PHP - HTML-Element-Inhalt "sich nehmen"

Hey Leute,

ich wollt mal fragen, ob es iwie möglich ist, mit PHP das selbe Ergebnis wie mit getElementById() zu erzielen.

Also, ich habe eine Seite, wo ich andere Seiten mit bearbeiten kann, dort habe ich unter dem Textfeld mit dem Code einen Button gemacht, der eine Javascript-Funktion ausführt, in der wiederum ein PHP Script ist, dass dann mit fwrite() den Code speichern soll. Für fwrite, brauch ich aber zwei Parameter (die Datei, den Inhalt). Die Datei hab ich, aber den Inhalt bekomm ich nicht.

Dafür bräuchte ich iwie sowas:

function save() { <?php $inhalt = document.getElementById('Code').value; ?> }

Gibt es ieine ähnliche Variante?

Hier mal mein Code:

[PHP]<?php
session_start();

if($_SESSION[‚eingeloggt‘] != true) {
Header(‚Location: http://localhost/Homepage/m-remy.de%20s/Original/html/?page=401‘);
}

if(isset($_GET[‚seite‘])) {
$file = $_GET[‚seite‘];
$lines = file($file);
$height = count($lines);

for($i=0; $i < count($lines); $i++) {
    $lines[$i] = preg_replace("/>/", ">", $lines[$i]);
    $lines[$i] = preg_replace("/</", "<", $lines[$i]);
}

} else {
$file = ‚Sie haben keine Seite ausgewählt‘;
$lines = ‚Bitte wählen Sie eine Seite aus.‘;
$height = 1;
}
?>

<head>

    <script language="javascript" type="text/javascript">
        function save() {
            <?php
                $file = $_GET['seite'];
                $inhalt = 0;  // Da muss iwie der Inhalt hin
                fwrite($file, $inhalt);
            ?>
        }

        function dokument_geladen() {
            save();
        }
    </script>

</head>

<body onload="dokument_geladen()">

    <div id="content">

        <textarea rows="<?php echo $height; ?>" cols="70" wrap="off" style="margin-bottom: 20px;">
            <?php
                if($height != 1) {
                    for($i=0; $i < count($lines); $i++) {
                        echo $lines[$i];
                    }
                } else {
                    echo $lines;
                }
            ?>
            </textarea>

    </div>

</body>
[/PHP]

Hoffe ihr könnt mir helfen.

Was denn für einen Inhalt? Du hast scheinbar nicht die Funktionsweise von HTTP und PHP verstanden. PHP ist schon lange vorbei, wenn das Dokument beim User ist.

Also, ich habe eine Seite, wo ich andere Seiten mit bearbeiten kann, dort habe ich unter dem Textfeld mit dem Code einen Button gemacht, der eine Javascript-Funktion ausführt, in der wiederum ein PHP Script ist, dass dann mit fwrite() den Code speichern soll.

Das klingt für mich stark nach AJAX. Warum liest du nicht gleich mit JavaScript den betroffenen Bereich per getElementById() aus und überträgst den per AJAX an das Script? Oder hab ich dein Problem nicht richtig verstanden?
Es gibt die Möglichkeit, in PHP mit regulären Ausdrücken aus einer eingelesenen PHP-Datei Teile des Codes zu filtern. Vielleicht suchst du ja sowas.

Der Inhalt ist der (HTML-)Quellcode der Seite. Ich habe einen Loginbereich eingerichtet, wo man sich als Admin anmelden kann und dann halt die Seiten alle vom Internet-heraus bearbeiten kann, z.B. für News.

Das PHP-Skript ist nur dafür da:

  1. Es prüft ob man wirklich eingeloggt ist
  2. Es liest den Quellcode der Seite und gibt ihn in das Textfeld aus
  3. Es speichert den veränderten Quellcode

Ich hatte die selbe Idee, wusste aber nicht, wie man das an das PHP-Srkipt überträgt. Mit AJAX soll das also gehen? Ich habe damit noch nie gearbeitet, wollte es mir aber schon lange vornehmen. Kennst du eine gute Seite, wo man das lernen kann?

Dein Fehler fängt schon mit dem HTML an. Eine Textarea gehört in ein Forumlar, alles Andere ist nicht valide. Über das Formular kannst du dann auch einen Request senden und die übermittelten Daten dann verarbeiten.

Ach ja, man bin ich blöd… Ich hatte das sogar schonmal überlegt, weis aber nicht, wieso ich das net gemacht hab. :smiley:
Wäre aber trotzdem cool, wenn iwer eine gute Seite zum lernen von AJAX kennt, dann kann ich direkt mal wieder was neues lernen :smiley:

Das am einfachsten strukturierteste und kürzeste finde ich das hier: Ajax Tutorial

MfG

Danke dir,

eine Frage hab ich aber noch: „Ist es sinvoller das Formular mit POST-Daten an sich selbst zu schicken oder das ganze mit AJAX zu machen?“

Hey Leute,

ich hab jetzt alles umgeschrieben, aber jetzt bekomme ich diese Fehlermeldungen:

Warning: fopen(404.php) [function.fopen]: failed to open stream: No error in C:\xampp\htdocs\Homepage\m-remy.de s\Original\html\seite_editieren.php on line 15

Warning: fwrite() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Homepage\m-remy.de s\Original\html\seite_editieren.php on line 16

Ich habe nachgeguckt und folgendes gecheckt:

  1. PHP darf die Datei öffnen
  2. Die Datei liegt im richtigen Verzeichnis

Was mache ich falsch?

Dann „check“ das eben noch mal. Zugriffsrechte als auch die Existenz der Datei. PHP lügt nicht!

Der zweite Fehler ist ein Folgefehler!

Hier mal mein Code:

[PHP]<?php
session_start();

if($_SESSION[‚eingeloggt‘] != true) {
Header(‚Location: http://localhost/Homepage/m-remy.de%20s/Original/html/?page=401‘);
}

$code = $_POST[‚code‘];
$file = $_POST[‚file‘];

if(isset($code) AND isset($file) AND $file != ‚‘) {
$file = fopen($file, 120);
fwrite($file, $code);
unset($code);
unset($file);

} elseif(isset($_GET[‚seite‘])) {
$file = $_GET[‚seite‘];
$lines = file($file);
$height = count($lines);

for($i=0; $i < count($lines); $i++) {
    $lines[$i] = preg_replace("/>/", ">", $lines[$i]);
    $lines[$i] = preg_replace("/</", "<", $lines[$i]);
}

} else {
$file = ‚Sie haben keine Seite ausgewählt‘;
$lines = ‚Bitte wählen Sie eine Seite aus.‘;
$height = 1;
}

?>

<head>

    <title>m-remy.de - Seite bearbeiten</title>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />

<link rel="stylesheet" type="text/css" href="../styles/Style.css" media="all" />

    <script language="javascript" type="text/javascript">
        function save() {
            document.getElementById('code_hidden').value = document.getElementById('code');
            document.getElementById('code_aendern').submit();
        }

    </script>

    <script language="javascript" type="text/javascript" src="../scripts/Scripts.js"></script>

    <!--[if IE]>
        <script language="javascript" type="text/javascript" src="../scripts/IE.js"></script>
        <link rel="stylesheet" type="text/css" href="../styles/Style_IE.css" media="all">
    <![endif]-->

    <!--[if lte IE 7]>
        <link rel="stylesheet" type="text/css" href="../styles/Style_lte_IE_7.css" media="all" />
    <![endif]-->


</head>


<body>

    <div id="main">


        <div id="content">

            <h3>Seite bearbeiten</h3>


            <p>Hier k&ouml;nnen Sie eine Seite bearbeiten.</p>
            <p>Welche Seite m&ouml;chten Sie bearbeiten?</p><br />

            <a href="http://localhost/Homepage/m-remy.de%20s/Original/html/seite_editieren.php?seite=401.php">401.php</a>,
            <a href="http://localhost/Homepage/m-remy.de%20s/Original/html/seite_editieren.php?seite=404.php">404.php</a>,
            <a href="http://localhost/Homepage/m-remy.de%20s/Original/html/seite_editieren.php?seite=index.php">index.php</a>,
            <a href="http://localhost/Homepage/m-remy.de%20s/Original/html/seite_editieren.php?seite=kontakt.php">kontakt.php</a>,
            <a href="http://localhost/Homepage/m-remy.de%20s/Original/html/seite_editieren.php?seite=kontakt_check.php">kontakt_check.php</a>,
            <a href="http://localhost/Homepage/m-remy.de%20s/Original/html/seite_editieren.php?seite=kontakt_gesendet.php">kontakt_gesendet.php</a>,
            <a href="http://localhost/Homepage/m-remy.de%20s/Original/html/seite_editieren.php?seite=seite_editieren.php">seite_editieren.php</a>,
            <a href="http://localhost/Homepage/m-remy.de%20s/Original/html/seite_editieren.php?seite=startseite.html">startseite.html</a>,
            <a href="http://localhost/Homepage/m-remy.de%20s/Original/html/seite_editieren.php?seite=login.html">login.html</a>

            <br /><br /><br /><p>Ausgew&auml;hlte Seite: <?php echo $file; ?></p><br /><br />

            <form id="code_aendern" action="seite_editieren.php" method="post">
                <input type="hidden" name="file" value="<?php echo $file; ?>" />
                <input type="hidden" name="code" value="" id="code_hidden" />
                <textarea rows="<?php echo $height; ?>" cols="70" wrap="off" id="code" style="margin-bottom: 20px;">
                <?php
                    if($height != 1) {
                        for($i=0; $i < count($lines); $i++) {
                            echo $lines[$i];
                        }
                    } else {
                        echo $lines;
                    }
                ?>
                </textarea>

                <center><input type="button" value="&Auml;nderungen speichern" onclick="save()" /></center>
            </form>


        </div>



  </div>


</body>
[/PHP]

Ich weiß, ich habs nur einfach so zur vollständigkeit hingeschrieben.

in der PHP.ini steht:

;;;;;;;;;;;;;;;;;;
; Fopen wrappers ;
;;;;;;;;;;;;;;;;;;

; Whether to allow the treatment of URLs (like http:// or ftp://) as files.
; PHP: Laufzeit-Konfiguration - Manual
allow_url_fopen = On

Ich hab die PHP.ini nach fopen durchsuchen lassen, aber nur die drei fopens die da oben stehen gefunden, wobei der Kommentar ja unwichtig ist :smiley:

Woran kann es denn noch liegen?

Hast du dir mal angeschaut, was da als zweiter Parameter erwartet wird?

EDIT: Das JS in deinem Beispiel ist auch falsch und unnötig.

Danke, man bin ich blöd, ich war iwie bei ner ganz anderen Funktion, bei ieiner wo der 2. Wert die Größe der Datei (in kB) angibt, ich glaub das ist file_get_contents() oder so.
Naja hab es jetzt geändert

Achso, ja hab auch grad festgestellt, dass ich oben das .value vergessen hab, hab ich in meinem Code aber nicht.
Ich habe aber auch festgestellt, dass die Textarea ein Array ist, was ich mit ner for-Schleife auslesen muss, komm da aber nicht weiter.

Hier mein Code:

[PHP] function save() {
for(i=0; i < <?php echo count($lines); ?>; i++) {
document.getElementById(‚code_hidden‘).value += document.getElementById(‚code‘)[i].value; //[i] für das Array

            }
            document.getElementById('code_aendern').submit();
        }[/PHP]

Wie kann man denn mmit Javascript per getElementById in dieses Array reinschreiben?

Warum machst du das überhaupt? Auch der Inhalt einer Textarea wird übertragen.

ach ja? ja dann kann ich mir das ganze ja sparen :smiley:

ja. Du musst ihr nur einen Namen geben, damit der Inhalt serverseitig abgefragt werden kann.

schn klar, hab ich alles schon gemacht, funktioniert alles bestens, danke euch nochmal