Avatar billede phplover Nybegynder
29. januar 2007 - 14:22 Der er 11 kommentarer

redigere sider html og php filer

hejsa kiggede lige på her på eksperten og faldt over:
http://www.eksperten.dk/spm/755420

søger et cms eller system der kan noget alla det.. men den kode som er henvist på linket kan jeg ikke få til at virke så håber der er nogen derude der vil hjælpe.. den skal blot kunne åbne en php eller html fil hvor man skal kunne ændre teksten..

Håber der er nogen der kan give mig en hånd..
Avatar billede zombien Juniormester
29. januar 2007 - 14:27 #1
altså, du kan bruge det gamle txt-file system

if mode = "edit_file" then
                       
'Tjekker om man har valgt en fil, hvis ikke sendes man tilbage til listen
if Request.QueryString("file") = "" then
Response.Redirect("" & filnavn & "?action=list_files_edit")
end if
                                           
Hvis filen skal opdateres
if Request.ServerVariables("REQUEST_METHOD") = "POST" then               
Set fso = CreateObject("Scripting.FileSystemObject")
set file = fso.CreateTextFile(Server.MapPath(Request.Querystring("file")), 8)
                                   
                                    file.Write(Request.form("fil"))
file.close
end if
                                           
'//Åbner filen og smider indholdet ud i et textarea
Set fso = Server.CreateObject("Scripting.FileSystemObject")
set file = fso.OpenTextFile(Server.MapPath(Request.QueryString("file")), 1, 0)
%>
<form method='post' action='<%=filnavn%>?file=<%=Request("file")%>&action=edit_file'>
<textarea rows='20' name='fil'cols='80'><%=Server.HTMLencode(file.readall)%></textarea>
<br>
<input type='submit' value='Gem'>
</form>
<%
file.close
set fso = nothing
%>
Avatar billede Slettet bruger
29. januar 2007 - 15:26 #2
Zombien.. det er asp..

Jeg har selv lavet noget lignende, og synes det fungerer ok - har dog kun testet det i IE..

Det består af 3 filer.

Show_files.php:
Danner en liste over filer.
I min version kan du kun editere php-filer, men det kan simpelt ændres i denne linje:

kun php filer:
if(eregi("(php)$",$file)){

php og htm(l) filer
if(eregi("(php|html?)$",$file)){

edit_file.php
Denne åbnes af Show_files.php i et vindue, hvor der kun er statusbar.
Der er et textarea på 100% af siden.
For at gemme trykkes Ctrl+s.
Jeg har enabled tab i textarea vha. javascript.

edit_file_post.php
Denne fil ses ikke, men kører i en skjult iframe.
Når der trykkes Ctrl+s sendes indholdet af textareaet, og edit_file_post.php gemmer filen. Mens der gemmes ses teksten "Saving" i nederste højre hjørne. Når filen er gemt, skrives "Saved", som begynder at fade ud efter 1.5 sekunder


I øjeblikket kan man ikke redigere filnavne eller oprette/slette filer/foldere, men det er på tegnebrættet..
Desuden har jeg planer om at lave AJAX post og lave browsersupport og validere koden, men det er når jeg får tid..

Hvis det kan bruges, står det dig frit at redigere og videresende..
Enabling af tab er taget fra
http://www.webdeveloper.com/forum/showthread.php?t=32317

Jeg mener, der er en built-in function til at tjekke om ctrl er down, men den har jeg ikke gjort brug af - det er også på tegnebrættet.

Denne del:
    include("./Library/PHP/connect.php");
    include("./Library/PHP/login.php");
   
    if(userrights("admin")){
er min måde at tjekke om brugeren har rettigheder til at ændre indholdet.


Show_files.php
<?php
    include("./Library/PHP/connect.php");
    include("./Library/PHP/login.php");
   
    if(userrights("admin")){
        function list_folder($path){
            $hasContent = false;
            $outString = "<table style='display: inline;'>";
                $dir = opendir($path);
                while(($file = readdir($dir)) !== false){
                    if($file == "."||$file == ".."){
                        continue;
                    }
                    $full_path = $path . "/" . $file;
                    if(is_file($full_path)){
                        if(eregi("(php)$",$file)){
                            $hasContent = true;
                            $outString .= "<tr><td><a href='#' onclick='window.open(\"edit_file.php?Path=" . $full_path . "\",\"\",\"location=yes,menubar=no,toolbar=no,resizable=yes\");'>" . $file . "</a></td></tr>";
                        }
                    }else if(is_dir($full_path)){
                        $folder_output = list_folder($full_path);
                        if($folder_output != false){
                            $outString .= "<tr><td>" . $file . "<br><div style='width: 30px;display: inline;'></div>";
                                $outString .= $folder_output;
                            $outString .= "</td></tr>";
                            $hasContent = true;
                        }
                    }
                }
                closedir($dir);
            $outString .= "</table>";
            if($hasContent){
                return $outString;
            }else{
                return false;
            }
        }
        echo list_folder(".");
    }
?>

edit_file.php

<?php    include("./Library/PHP/connect.php");
    include("./Library/PHP/login.php");
   
    if(userrights("admin")){
        echo "<html>";
            echo "<head>";
                echo "<title>" . $_GET['Path'] . "</title>";
?>
                    <style>
                        textarea
                        {
                            overflow: auto;
                        }
                        html,body
                        {
                            overflow: hidden;
                        }
                        html,body, textarea, form
                        {
                            height: 100%;
                            width: 100%;
                            margin: 0px;
                            font-size: 12px;
                        }
                        iframe
                        {
                            display: none;
                            border: none;
                        }
                        #save
                        {
                            position: absolute;
                            bottom: 0px;
                            right: 0px;
                            border: 1px solid #000000;
                            font-family: Trebuchet MS;
                            font-size: 20px;
                            filter: alpha(opacity=0);
                        }
                    </style>
                    <script>
                        var CTRL = false;
                        function keydown(obj){
                            return_value = true;
                            switch(event.keyCode){
                                case 83:
                                // S
                                    if(CTRL == true){
                                        var saveElement = document.getElementById("save")
                                        saveElement.style.filter = 'alpha(opacity=100)';
                                        saveElement.innerHTML = "Saving";
                                        document.forms[0].submit();
                                        return_value = false;
                                    }
                                    break;
                                case 9:
                                // TAB
                                    insertText(obj,String.fromCharCode(9));
                                    return_value = false;
                                    break;
                            }
                            if(event.keyCode == 17){
                                CTRL = true;
                            }else{
                                CTRL = false;
                            }
                            return return_value;
                        }
                        function keyup(){
                            if(event.keyCode == 17){
                                CTRL = false;
                            }
                        }
                        function insertText(input, replaceString){
                            if (input.setSelectionRange) {
                                var selectionStart = input.selectionStart;
                                var selectionEnd = input.selectionEnd;
                                input.value = input.value.substring(0, selectionStart)+ replaceString + input.value.substring(selectionEnd);
                           
                                if (selectionStart != selectionEnd){
                                    setSelectionRange(input, selectionStart, selectionStart + replaceString.length);
                                }else{
                                    setSelectionRange(input, selectionStart + replaceString.length, selectionStart + replaceString.length);
                                }
                            }else if (document.selection) {
                                var range = document.selection.createRange();
                                if (range.parentElement() == input) {
                                    var isCollapsed = range.text == '';
                                    range.text = replaceString;
                                    if (!isCollapsed)  {
                                        range.moveStart('character', -replaceString.length);
                                        range.select();
                                    }
                                }
                            }
                        }
                    </script>
                </head>
                <body>
                    <iframe name='save_frame'></iframe>
                    <button id='save'></button>
                    <form method='post' action='edit_file_post.php' target='save_frame'>
                        <?php
                            echo "<textarea onkeydown='return keydown(this);' onkeyup='keyup();' name='Content'>";
                                if(isset($_GET['Path'])){
                                    echo htmlspecialchars(fread(fopen($_GET['Path'],"r"),filesize($_GET['Path'])));
                                }
                            echo "</textarea>";
                            echo "<input type='hidden' name='Path' value='" . $_GET['Path'] . "'>";
                        ?>
                    </form>
                </body>
            </html>
<?php
    }
?>


edit_file_post.php

<?php
    include("./Library/PHP/connect.php");
    include("./Library/PHP/login.php");
   
    if(userrights("admin")){
        if(isset($_POST['Path'])){
            $handle = fopen($_POST['Path'], 'w');
            fwrite($handle,stripslashes($_POST['Content']));
        }
?>
<html>
    <head>
        <script type='text/javascript'>
            var current;
           
            function action(output){
                top.document.getElementById("save").innerHTML = output;
                current = 100;
                setTimeout('decrease_opacity()','1500');
            }
            function decrease_opacity(){
                top.document.getElementById("save").style.filter = 'alpha(opacity='+current+')';
                current = current - 5;
                if(current>0){
                    setTimeout('decrease_opacity()','50');
                }
            }
        </script>
    </head>
    <body onload='action("Saved");'>
    </body>
</html>
<?php
    }
?>
Avatar billede phplover Nybegynder
29. januar 2007 - 22:01 #3
forstår det ikke helt... :/..

Synes det er meget kode i forhold til:


<?
if(is_dir($_GET['dir']) && !empty($_GET['dir'])){$theDirectory = $_GET['dir']; $get = 1;}else{$theDirectory = ".";}
if(is_dir($theDirectory) && empty($_GET['fil']))
{
    echo "<table><tr><td style=\"width: 150px;\">Navn</td></tr>";
    $dir = opendir($theDirectory);
    while(false !== ($file = readdir($dir)))
    {
        $type    = filetype($theDirectory ."/". $file);
        $filtype = explode(".", $file);
        if($type != "dir" && $file != "." && $file != ".." && (end($filtype) == "html" || end($filtype) == "htm"))
        {
    if(!empty($_GET['dir']))
    {
    echo "<tr><td><a href=\"?fil=" . $_GET['dir'] . "/" . $file . "\">" . $file . "</a></td></tr>";
    }
    else
    {
    echo "<tr><td><a href=\"?fil=" . $file . "\">" . $file . "</a></td></tr>";
    }
        }
        else if($type == "dir" && $file != "." && $file != "..")
        {
    if($get == 1){$href = "href=\"?dir=".$_GET['dir']."/" . $file . "\"";}else{$href = "href=\"?dir=" . $file . "\"";}
            echo "<tr><td><a ".$href.">" . $file ."</a></td></tr>";
        }
    }
    closedir($dir);
    echo "</table>";
}
else if(empty($_GET['fil']))
{
    echo $theDirectory . " er ikke en mappe";
}


if(!empty($_GET['fil']))
{
$fil = $_GET['fil'];

global $submit;
if ($submit) {
$skrivtil = fopen($fil, "w");
$nytindhold = str_replace("\\","",$nytindhold);
fputs($skrivtil, $nytindhold);
fclose($skrivtil);
header("Location: ".$_SERVER['PHP_SELF']);
}
?>
<center>
<form action="" method="post">
<table border="4" bordercolor="black" cellpadding="12" cellspacing="0"><tr>
    <th>Rediger fi</th>
</tr><tr>
    <td valign="top" align="center" nowrap>Indtast nyt indhold, og klik på "opdater"<br><br>

<textarea name="nytindhold" cols="56" rows="16">
<?php
$indhold = str_replace("\\", "", readfile($fil));
echo $indhold;
?></textarea><br><br>
<input type="submit" name="submit" value="Opdater"></td>

</tr><tr>

    <th colspan="2"> </th>

</tr></table>
<?php
}
?>

Men kan ikke få det til at gemme mine ændringer jeg laver.. :S
Avatar billede Slettet bruger
30. januar 2007 - 08:18 #4
Hvis register globals er slået fra, skal du hente nytindhold som post..

$nytindhold = str_replace("\\","",$nytindhold);
rettes til
$nytindhold = str_replace("\\","",$_POST['nytindhold']);

Ellers må du være lidt mere specifik end "det virker ikke"..
Avatar billede Slettet bruger
30. januar 2007 - 08:23 #5
Ellers er det altid en god ide at debugge ved at udskrive variablerne undervejs, f.eks:

if ($submit) {
echo "Vi er kommet ind i submit-klammerne";
$skrivtil = fopen($fil, "w");
$nytindhold = str_replace("\\","",$nytindhold);
echo $nytindhold " <- filens nye indhold";
fputs($skrivtil, $nytindhold);
fclose($skrivtil);
header("Location: ".$_SERVER['PHP_SELF']);
}

Du vil self. få en fejl, når location bliver ændret, men det er ok når du debugger.


Og vil
global $submit;
ikke lave en ny instans af $submit der er null/empty/""?
Avatar billede phplover Nybegynder
30. januar 2007 - 10:59 #6
kvadratrodenaf1 ..  hele dit script er det ikke database baseret?? søger mere noget hvor jeg er fri for at skulle smide ting op i databasen og bare kan rette min html eller php fil med tekstindhold.

Fx. med denne kode kræver det da ingen server relateret kodning i mysql databasen ?
Jeg kan blot ikke få den til at redigere min html/php fil.


<?
if(is_dir($_GET['dir']) && !empty($_GET['dir'])){$theDirectory = $_GET['dir']; $get = 1;}else{$theDirectory = ".";}
if(is_dir($theDirectory) && empty($_GET['fil']))
{
    echo "<table><tr><td style=\"width: 150px;\">Navn</td></tr>";
    $dir = opendir($theDirectory);
    while(false !== ($file = readdir($dir)))
    {
        $type    = filetype($theDirectory ."/". $file);
        $filtype = explode(".", $file);
        if($type != "dir" && $file != "." && $file != ".." && (end($filtype) == "html" || end($filtype) == "htm"))
        {
    if(!empty($_GET['dir']))
    {
    echo "<tr><td><a href=\"?fil=" . $_GET['dir'] . "/" . $file . "\">" . $file . "</a></td></tr>";
    }
    else
    {
    echo "<tr><td><a href=\"?fil=" . $file . "\">" . $file . "</a></td></tr>";
    }
        }
        else if($type == "dir" && $file != "." && $file != "..")
        {
    if($get == 1){$href = "href=\"?dir=".$_GET['dir']."/" . $file . "\"";}else{$href = "href=\"?dir=" . $file . "\"";}
            echo "<tr><td><a ".$href.">" . $file ."</a></td></tr>";
        }
    }
    closedir($dir);
    echo "</table>";
}
else if(empty($_GET['fil']))
{
    echo $theDirectory . " er ikke en mappe";
}


if(!empty($_GET['fil']))
{
$fil = $_GET['fil'];

global $submit;
if ($submit) {
$skrivtil = fopen($fil, "w");
$nytindhold = str_replace("\\","",$nytindhold);
fputs($skrivtil, $nytindhold);
fclose($skrivtil);
header("Location: ".$_SERVER['PHP_SELF']);
}
?>
<center>
<form action="" method="post">
<table border="4" bordercolor="black" cellpadding="12" cellspacing="0"><tr>
    <th>Rediger fi</th>
</tr><tr>
    <td valign="top" align="center" nowrap>Indtast nyt indhold, og klik på "opdater"<br><br>

<textarea name="nytindhold" cols="56" rows="16">
<?php
$indhold = str_replace("\\", "", readfile($fil));
echo $indhold;
?></textarea><br><br>
<input type="submit" name="submit" value="Opdater"></td>

</tr><tr>

    <th colspan="2"> </th>

</tr></table>
<?php
}
?>
Avatar billede Slettet bruger
30. januar 2007 - 11:19 #7
phplover> Det kræver kun database i det omfang du ønsker adgangsbegrænsning til siden..

Hvorfor virker dit script ikke?
-Fejlmeddelelser
-Timeout
-Blank skærm
Avatar billede phplover Nybegynder
30. januar 2007 - 11:22 #8
hmm okay dvs det kræver ikke nogen mysql database dit script?:)..

Den kode jeg har hvis jeg bruger den som overstående viser den fint det den skal men den vil ikke opdatere mine html filer altså det tekst indhold der står i filen fx. hvis jeg vil rette forsidetekst.html så viser den fint det der står i dokumentet men jeg kan ikke redigere i det.
Avatar billede Slettet bruger
30. januar 2007 - 12:01 #9
Prøv at erstatte dette

global $submit;
if ($submit) {
$skrivtil = fopen($fil, "w");
$nytindhold = str_replace("\\","",$nytindhold);
fputs($skrivtil, $nytindhold);
fclose($skrivtil);
header("Location: ".$_SERVER['PHP_SELF']);
}

til

if (isset($_POST['nytindhold'])) {
$skrivtil = fopen($fil, "w");
$nytindhold = str_replace("\\","",$_POST['nytindhold']);
fputs($skrivtil, $nytindhold);
fclose($skrivtil);
header("Location: ".$_SERVER['PHP_SELF']);
}

/1
Avatar billede phplover Nybegynder
30. januar 2007 - 17:36 #10
Arh kanon kvadratrod det virker :) mange tak.. det eneste problem jeg har nu er at den skriver nogen tal...
fx skriver jeg dette er første side og trykker på opdater. og vil ændre filen igen står der nu: dette er første side20

hvorfor gør den det?

evt har jeg lidt flere spørgsmål kan du hjælpe over msn? lund2003@stofanet.dk
er min mail
Avatar billede Slettet bruger
31. januar 2007 - 23:34 #11
Vi fangede lige hinanden på messenger, og fandt frem til denne løsning:

$indhold = str_replace("\\", "", readfile($fil));
Rettes til
$indhold = htmlspecialchars(fread(fopen($fil,"r"),filesize($fil)));

readfile returnerer antal bytes sendt, så derfor forekommer de i textarea.. den anden måde at læse filen returnerer ikke bytesne..

Desuden er blevet added >>?action=Filen " . $fil . " blev gemt"<< i redirect og $_GET['action'] bliver udskrevet i toppen af filelisten..


<?
if(isset($_GET['action'])){
    echo "<div style='font-color: #FF0000;'>" . $_GET['action'] . "</div>";
}

if(is_dir($_GET['dir']) && !empty($_GET['dir'])){$theDirectory = $_GET['dir']; $get = 1;}else{$theDirectory = ".";}
if(is_dir($theDirectory) && empty($_GET['fil']))
{
    echo "<table><tr><td style=\"width: 150px;\">Navn</td></tr>";
    $dir = opendir($theDirectory);
    while(false !== ($file = readdir($dir)))
    {
        $type    = filetype($theDirectory ."/". $file);
        $filtype = explode(".", $file);
        if($type != "dir" && $file != "." && $file != ".." && (end($filtype) == "html" || end($filtype) == "htm"))
        {
    if(!empty($_GET['dir']))
    {
    echo "<tr><td><a href=\"?fil=" . $_GET['dir'] . "/" . $file . "\">" . $file . "</a></td></tr>";
    }
    else
    {
    echo "<tr><td><a href=\"?fil=" . $file . "\">" . $file . "</a></td></tr>";
    }
        }
        else if($type == "dir" && $file != "." && $file != "..")
        {
    if($get == 1){$href = "href=\"?dir=".$_GET['dir']."/" . $file . "\"";}else{$href = "href=\"?dir=" . $file . "\"";}
            echo "<tr><td><a ".$href.">" . $file ."</a></td></tr>";
        }
    }
    closedir($dir);
    echo "</table>";
}
else if(empty($_GET['fil']))
{
    echo $theDirectory . " er ikke en mappe";
}


if(!empty($_GET['fil']))
{
$fil = $_GET['fil'];

if (isset($_POST['nytindhold'])) {
$skrivtil = fopen($fil, "w");
$nytindhold = str_replace("\\","",$_POST['nytindhold']);
fputs($skrivtil, $nytindhold);
fclose($skrivtil);
header("Location: ".$_SERVER['PHP_SELF']."?action=Filen " . $fil . " blev gemt");
}
?>
<center>
<form action="" method="post">
<table border="4" bordercolor="black" cellpadding="12" cellspacing="0"><tr>
    <th>Rediger fi</th>
</tr><tr>
    <td valign="top" align="center" nowrap>Indtast nyt indhold, og klik på "opdater"<br><br>

<textarea name="nytindhold" cols="56" rows="16">
<?php
$indhold = htmlspecialchars(fread(fopen($fil,"r"),filesize($fil)));
echo $indhold;
?></textarea><br><br>
<input type="submit" name="submit" value="Opdater"></td>

</tr><tr>

    <th colspan="2"> </th>

</tr></table>
<?php
}
?>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester