Ankündigung

Einklappen
Keine Ankündigung bisher.

Datei speichern mit URL-Parameter

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datei speichern mit URL-Parameter

    Hallo,
    erstmal vorweg: Das sind meine aller-ersten Schritte in PHP - seid lieb zu mir
    Ich möchte erstmnal so wenig PHP einsetzen, als möglich, bis sich mal fitter bin.

    Habe HTML-Seite mit HTML-Formular, das mit Javascript verarbeitet wird. Dabei wird
    - ein HIDDEN-Input-Feld "CodeJS" gefüllt
    - FORM-ACTION bekommt für SUBMIT eine PHP-Datei mit 3 URL-Parameter zugewiesen: "datei_schreiben.php?param1=ID,param2=1,param3=inh alte_datei".
    - Der SUBMIT wird durch JS ausgelöst

    Die URL-Paramter werden im PHP verarbeitet:
    Es soll die Datei "outputX.js" in den Ordner "../js/ordnerY/" mit dem Inhalt "inhalte_datei" aus dem HIDDEN-INPUT-Feld geschrieben werden.
    Danach soll auf eine HTML-Seite mit Parameter zurück gelinkt werden.

    1. Problem: Die Strings werden nicht nicht richtig zusammengesetzt (habs auch mit String-Addintion "." probiert...)
    2. Problem: Wenn "param3=inhalte_datei" (generierter Inhalt des HIDDEN-Input) zu groß wird (>2000 Zeichen...) streikt PHP ?

    Javascript: läuft, alles gut

    Stark verkürztes HTML (wie durch JavaScript erzeugt):
    HTML-Code:
    <FORM METHOD="POST" ACTION="datei_schreiben.php?param1=ordner,param2=1,param3=inhalte_datei">
       <P>... Inhalte, Form-Felder....</P>
      <INPUT TYPE="HIDDEN" NAME="CodeJS">
      <INPUT TYPE="BUTTON" VALUE="OK" NAME="ButtonOK"> <!-- Löst JS aus, das HIDDEN-Input und ACTION füllt, dann SUBMIT auslöst -->
    </FORM>
    PHP, wie ich es mir gedacht habe (hoffentlich nirgendes vertippt):
    PHP-Code:
    <?php
        $FolderID 
    $_GET[param1];
        
    $DatenNr  $_GET[param2];
        
    $DatenJS  $_GET[param3];

        
    $DateiJS fopen("../js/ordner$FolderID/outpu$DatenNr.js");
        
    fwrite $DateiJS ,$DatenJS);
        
    fclose $DateiJS );
        
    header('Location: index.htm?Name=Name,Folder=' $FolderID ',Nummer=' $DatenNr );
     exit;
    ?>

    Das Problem, wenn $DatenJS zu groß wird, habe ich erstmnal ausgeblendet
    Habe mir vieles zusammen gegooelt und probiert... aber alles zusammen bekomm ich leider nicht hin

    Euch vielen Dank vorab!
    Vielen Dank und Grüße
    DiePetra

  • #2
    Du solltest die Parameter ins Formular schreiben und nicht an die URL anhängen. Desweiteren hoffe ich, dass das so nirgendwo produktiv zum Einsatz kommt, da es eine riesen Sicherheitslücke ist Parameter ungeprüft in Dateipfade oder einer URL einzubauen.

    Kommentar


    • #3
      Hallo und danke erstmal!
      Die PHP ist aber eine separte Datei. Die Parameter sind variabel (werden durch JS erzeugt)
      Sicherheit... ist mir erstmal egal. Es soll nur erstmal laufen
      Vielen Dank und Grüße
      DiePetra

      Kommentar


      • #4
        Zitat von PetraUG Beitrag anzeigen
        Die Parameter sind variabel (werden durch JS erzeugt)
        Und? Schreib sie halt mit JS variabel ins Formular.

        Kommentar


        • #5
          Verstehe Dich vielleicht nicht... die Parameter stehen ja im JS.
          Wie übergeben ich sie dann in die aufgerufene PHP-Datei, wenn nicht über URL-Parameter?
          Vielen Dank und Grüße
          DiePetra

          Kommentar


          • #6
            Habs falsch gelesen.

            Du musst halt einfach nur die URL richtig mit http_build_query() zusammenbauen, statt da mit Strings herumzubasteln.

            PHP-Code:
            $params = [
                
            'Name' => 'Name',
                
            'Folder' => $FolderID.
                
            'Nummer' => $DatenNr
            ];

            $url 'index.htm?' http_build_query($params);

            header($url); 
            Warum eigentlich dieser furchtbare Mischmasch aus Deutsch und Englisch (Folder, Nummer, DatenNr, ordner, output, ...)? Reicht eine Sprache nicht?

            Kommentar


            • #7
              Du meinst den HEADER... okay... aber dann sind die Parameter je schon inder PHP-Datei.
              Aber wie kommen die Parameter denn aus der HTML-Seite / dem HTML-Formular überhaupt erstmal in die PHP-Datei (wenn nicht über URL-Parameter) ?
              Vielen Dank und Grüße
              DiePetra

              Kommentar


              • #8
                . Problem: Wenn "param3=inhalte_datei" (generierter Inhalt des HIDDEN-Input) zu groß wird (>2000 Zeichen...) streikt PHP ?
                Wie lange soll Deine Url denn werden ?
                Nutze doch POST für sowas, macht vieles einfacher.

                Kommentar


                • #9
                  Hallo und auch Dir Danke!
                  Die Datei aus "param3=inhalte_datei" wird rd. 38k groß - also ~38.000 Zeichen. Ist ein assoziatives Array in Javascript.

                  Wie gesagt... das sind meine erste Schritte in PHP. Was meinst Du mit "POST" ? Das Formular wird mit POST an die separate PHP-Datei gesendet.
                  Dabei müssen Variablen ( als URL-Parameter ??? ) übergeben werden, die in PHP verarbeitet werden müssen:

                  HTML-Code:
                    <FORM METHOD="POST" ACTION="datei_schreiben.php?param1=ordner,param2=1,param3=inhalte_datei">
                  Vielen Dank und Grüße
                  DiePetra

                  Kommentar


                  • #10
                    https://php-de.github.io/jumpto/request/#post

                    Du mischt GET Und POST, mir ist nicht klar wieso.

                    Kommentar


                    • #11
                      Weil ich glaubte, dass ich nur mit $_GET die übergebenen URL-Parameter auslesen kann
                      Bekomem ich die URL-Parameter auch so ? ...

                      PHP-Code:
                      $FolderID $_POST[param1];
                      $DatenNr  $_POST[param2];
                      $DatenJS  $_POST[param3]; 
                      Vielen Dank und Grüße
                      DiePetra

                      Kommentar


                      • #12
                        Nein, aber mir ist nach wie vor nicht klar wieso Du den Inhalt einer Datei von 38k Zeichen mit GET überträgst, statt mit POST

                        Kommentar


                        • #13
                          Vielleicht verstehe ich Deine Aussage nicht.

                          Das Javascript generiert ein JavaScript-Array und schreibt es in das HIDDEN-Input-Feld "CodeJS"
                          Dann löst das JavaScript den SUBMIT mit POST aus, in dem es die PHP-Datei "datei_schreiben.php" in FORM ACTION aufruft.
                          Die PHP-Datei soll nun den Inhalt des Feldes "CodeJS" in die Datei "output.js" schreiben. Dazu (dachte ich) wollte ich den Inhalt des Feldes "CodeJS" als URL-Parameter übergeben. Aber das geht wohl nicht weil zu groß.

                          Wo übertrage ich die Datei "output.js" mit GET ?
                          Ich versuche die Datei "output" doch mit "fopen()" zu speichern.

                          Du.... ich bin in PHP blutige Anfängerin...
                          Vielen Dank und Grüße
                          DiePetra

                          Kommentar


                          • #14
                            Zitat von PetraUG Beitrag anzeigen
                            Die Datei aus "param3=inhalte_datei" wird rd. 38k groß - also ~38.000 Zeichen. Ist ein assoziatives Array in Javascript.
                            Das kannst du vergessen. Wenn du auf der sicheren Seite bleiben willst, darf eine URL nicht länger als 1000 Zeichen sein.

                            Kommentar


                            • #15
                              Ja... Danke! Habe das wieder auf HIDDEN-Inputs umgestellt. Das funktioniert auch "fast".

                              Nur die Datei, die geschrieben wird ist leer ( 0 kB )
                              Die Datei wäre 38 kB groß, wird aber von echo "$CodeJS"; korrekt angezeigt.

                              Die HTML-Seite / das Formular
                              HTML-Code:
                              <FORM METHOD="POST" ACTION="datei_schreiben.php">
                               <P>... Inhalte, Form-Felder....</P>
                               <INPUT TYPE="HIDDEN" NAME="FolderID">
                               <INPUT TYPE="HIDDEN" NAME="CodeJS">
                               <INPUT TYPE="BUTTON" NAME="ButtonPruefen" VALUE="Prüfen"> <!-- Startet JS, das HIDDEN-Inputs füllt und SUBMIT auf PHP-Datei auslöst -->
                              </FORM>
                              PHP-Datei "datei_schreiben.php"
                              PHP-Code:
                              <?php
                               $FolderID 
                              $_POST['FolderID'];  // liest Feldinhalt von FORM-INPUT NAME=="KfzArtID" aus
                               
                              $CodeJS   $_POST['CodeJS'];    // liest generiertzen Feldinhalt von FORM-INPUT NAME=="KfzSrcDt" aus
                               
                              $FileJS   "../dt.js/daten$FolderID.js"// die Datei die gefüllt und geschrieben werden soll

                               
                              echo "$CodeJS";                  // zeigt $CodeJS korrekt an

                               
                              $DateiJS fopen($FileJS"w" );
                               
                              fwrite$FileJS$CodeJS)
                               
                              fclose$FileJS );
                              // Datei ist korrekt geschrieben, ist aber leer
                              exit;
                              ?>
                              Deswegen binb ich auf URL-Parameter ausgewichen, was dann aber bei großer Menge streikte.
                              Wo liegt denn nun mein Fehler, dass die Datei zwar geschrieben wird, aber leer ist - obwohl echo die Daten korrekt anzeigt ???
                              Vielen Dank und Grüße
                              DiePetra

                              Kommentar

                              Lädt...
                              X