Ankündigung

Einklappen
Keine Ankündigung bisher.

ISSET-Frage (immer was neues)

Einklappen

Neue Werbung 2019

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

  • ISSET-Frage (immer was neues)

    Hallo PHP.de Forum,

    es tut mir wirklich sehr leid. Aber immer öfter mal was neues.
    Bzgl. meines Projektes habe ich ja schon den ein oder anderen Beitrag hier erstellt. Ich habe trotzdem größtenteils versucht, allein zurechtzukommen.
    Dennoch ist der ein oder andere Tip, den ich hier bekommen habe Gold Wert.

    Ich habe 2 PHP - Dateien. Die eine PHP-Datei ist größtenteils ein HTML-Formular. Ich musste sie nur mit der Endung PHP enden lassen, weil sich der ein oder andere PHP - Code in dieser Datei befindet. Ich denke, dann muss man das ja auch so machen. Nun habe ich in dieser ersten PHP - Datei, welche zum Beantworten von Fragen zur Verfügung steht, unter anderem folgendes Feld:

    <input type="hidden" id="hidden" name="id" value="<?php echo $_GET['id']; ?>">

    Hier holt er sich dann die ID rein, die ich oben über die Adresszeile mit dem Aufruf der PHP-Datei verknüpft habe.

    Beispiel:
    localhost/test.php?id=jlkdf32_39jdsafj

    In der PHP-Datei, die die Daten dann entgegennimmt steht ziemlich weit oben folgender Eintrag:

    if (!isset($_POST['id'])) {
    die ('<p class="format">Es wurde keine ID übergeben</p>'); }

    Eigentlich steht dieser Eintrag ganz oben. Dieser Eintrag prüft halt, ob die Variable überhaupt gesetzt wurde, wenn ich das mal endlich richtig verstanden habe.

    Ob Ihr es glaubt oder nicht, obwohl die ID gesetzt ist und auch im Quelltext in dem versteckten Feld eingetragen ist, erscheint hin und wieder die Meldung bei Mausklick auf den Submit-Button: "Es wurde keine ID übergeben".

    Das ist absolut zum verzweifeln, weil es nicht immer so ist.
    Manchmal funktioniert es und manchmal erscheint die Meldung, dass keine ID übergeben wurde.

    Hat jemand evtl. einen Anhaltspunkt?

    Grüße Felge

  • #2
    Hallo,

    PHP-Code:
     <input type="hidden" id="hidden" name="id" value="<?php echo $_GET['id']; ?>">
    Hier liegt erst einmal einiges im Argen:
    1. Es wirft dir eine Notice, sobald id nicht gesetzt ist
    2. Es ist anfällig gegen XSS

    So ist es besser:

    PHP-Code:
     <input type="hidden" id="hidden" name="id" value="<?php echo isset($_GET['id']) ? htmlspecialchars($_GET['id']) : ''?>">
    Desweiteren:
    Wenn etwas nicht so klappt, wie du das gedenkst, dann hilft nur Debuggen. Versuche Testausgaben zu machen, um zu sehen, wo genau der Fehler ist. Versuche herauszufinden, wann der Fehler immer auftritt.

    PHP-Code:
    if (!isset($_POST['id'])) {
       echo 
    '<pre>';
       
    print_r($_POST);
       
    print_r($_GET);
       
    print_r($_SERVER['REQUEST_METHOD']);
       echo 
    '</pre>';
       die (
    '<p class="format">Es wurde keine ID übergeben</p>'); 

    wäre zum Beispiel ein Anfang, um den Fehler zu finden.

    Kommentar


    • #3
      Ein Tipp von mir:
      PHP-Code:
      localhost/test.php?id=jlkdf32_39jdsafj 
      Welche Request-Methode ist das?

      Kommentar


      • #4
        Vielen Dank. Aber was ist, wenn die ID definitv gesetzt ist und ich trotzdem diese Meldung erhalte?
        Das ist doch merkwürdig. Ich meine bspw. schon einen Unterschied zu erkennen, je nachdem welchen Browser ich zum Aufruf des Links verwende.

        Und dann noch was; auch, wenn es nicht zu diesem Beitrag passt:
        Was genau muss ich tun, um das ganze Thema wirklich mal vernünftig zu lernen..? Richtig PHP lernen?
        (PHP & mySQL von Kopf bis Fuss scheint es nicht zu sein)

        Grüße Felge

        Kommentar


        • #5
          Zitat von $littleCow Beitrag anzeigen
          Ein Tipp von mir:
          PHP-Code:
          localhost/test.php?id=jlkdf32_39jdsafj 
          Welche Request-Methode ist das?

          Zitat von Felge Beitrag anzeigen
          <input type="hidden" id="hidden" name="id" value="<?php echo $_GET['id']; ?>">
          [...]
          obwohl die ID gesetzt ist und auch im Quelltext in dem versteckten Feld eingetragen ist, erscheint hin und wieder die Meldung bei Mausklick auf den Submit-Button: "Es wurde keine ID übergeben".

          Das ist absolut zum verzweifeln, weil es nicht immer so ist.
          Manchmal funktioniert es und manchmal erscheint die Meldung, dass keine ID übergeben wurde.
          Ich schätze mal, das das Formular prinzipiell schon auf method="post" stehen wird, sonst würde er ja immer die Fehlermeldung bekommen.

          Kommentar


          • #6
            @$littleCow: Was meinst Du genau ?

            Kommentar


            • #7
              Zitat von Young Jedi Beitrag anzeigen
              Ich schätze mal, das das Formular prinzipiell schon auf method="post" stehen wird, sonst würde er ja immer die Fehlermeldung bekommen.

              ... das ist korrekt!

              Kommentar


              • #8
                Zitat von Felge Beitrag anzeigen
                Vielen Dank. Aber was ist, wenn die ID definitv gesetzt ist und ich trotzdem diese Meldung erhalte?
                Das ist doch merkwürdig. Ich meine bspw. schon einen Unterschied zu erkennen, je nachdem welchen Browser ich zum Aufruf des Links verwende.

                Und dann noch was; auch, wenn es nicht zu diesem Beitrag passt:
                Was genau muss ich tun, um das ganze Thema wirklich mal vernünftig zu lernen..? Richtig PHP lernen?
                (PHP & mySQL von Kopf bis Fuss scheint es nicht zu sein)

                Grüße Felge

                Setze erst einmal meinen ersten Hinweis um. Das ist sicherheitstechnisch wichtig und könnte eventuell schon der Fehler sein. Denn wenn die id in folgender Form übergeben wird:
                Code:
                localhost/test.php?id="blablubbdudidup
                Dann wird schon z.B. höchstwahrscheinlich überhaupt keine id mehr im Formular übergeben.

                Wenn es sonst noch auftritt, musst du halt mal rumprobieren, bis der Fehler wieder kommt und die Debugausgaben auswerten.

                Zum Thema gutes Tutorial:
                Ich persönlich finde das PHP-Tutorial von Quakenet ganz gut: http://tut.php-quake.net/de/
                Das ist aber natürlich subjektiv. Weitere gute Tutorials sind hier aufgelistet: http://www.php.de/php-einsteiger/489...nsammlung.html

                Kommentar


                • #9
                  richtiger Gedanke, falsche Funktion

                  schon beim Anhängen des Get-Parameters muss dieser mittels urlencode() behandelt werden, sonst könnten "illegale" Zeichen = Zeichen, die in der URL nicht erlaubt sind, den ganzen Vorgang behindern

                  Kommentar


                  • #10
                    Ob Ihr es glaubt oder nicht
                    Ja, hast recht. Ich glaube es nicht. Ein abgeschicktes hidden Field erzeugt immer einen Wert, egal ob da "", ne Notice oder ein echter Wert drin steht.

                    richtiger Gedanke, falsche Funktion

                    schon beim Anhängen des Get-Parameters muss dieser mittels urlencode() behandelt werden, sonst könnten "illegale" Zeichen = Zeichen, die in der URL nicht erlaubt sind, den ganzen Vorgang behindern
                    htmlspecialchars ist Pflicht, egal wie das Form gestartet wird.

                    Kommentar


                    • #11
                      Hallo Zusammen,

                      warum fällt mir das manchmal schwer, zu folgen: Bitte bitte helft mir.
                      Was ist nun der falsche Gedanke gewesen? Meiner oder der von Young Jedi? Und wenn immer ein Wert übergeben wird, warum erhielt ich dann immer die Meldung, dass keine ID übergeben wurde (also meine eigene eingetragene Meldung) bevor ich die Zeile von Young Jedi übernommen habe ?

                      Ich befürchte / vermute, dass ich das selbst wieder irgendwo finden kann.

                      Hier möchte ich noch was ergänzen:

                      1. Ich übergebe in der URL eine ID (Beispiel: localhost/test.php?id=sfkja_3838o_dsfjs)
                      2. Die ID, die übergeben wurde, befindet sich bereits schon vorher in der Datenbank, damit die entsprechende Zeile upgedated werden kann.
                      3. Das ursprüngliche Problem war ja, dass ich hin und wieder die Meldung von meiner zweiten PHP-Datei erhalten habe, dass keine ID vorhanden war,
                      obwohl im Quelltext in dem versteckten Feld, die ID eingetragen war. Merkwürdig.
                      4. Nun habe ich von Young Jedi die htmlspecialchars-Funktion benutzt. Das Problem tritt nun komischerweise nicht mehr auf. Warum nicht?

                      Eine andere Sache, da ich wirklich ernsthaft gewillt bin, zu lernen. Ich habe mir zum Thema htmlspecialchars und auch zum URLEncode mal was durchgelesen.
                      Wenn ich das richtig verstanden habe, haben beide Funktionen ja wohl auch eher wieder sicherheitstechnische Hintergründe. Und das bestimmte Zeichen bspw. ein &
                      durch andere Zeichen ersetzt werden.

                      Nehmen wir mal an, ich hätte verrückterweise hin und wieder ein "&" in meiner ID und somit auch schon in der Datenbank.

                      Dann würde das alles nicht mehr funktionieren oder ?

                      Grüße Felge

                      Kommentar


                      • #12
                        1. Ich übergebe in der URL eine ID (Beispiel: localhost/test.php?id=sfkja_3838o_dsfjs)
                        obwohl im Quelltext in dem versteckten Feld, die ID eingetragen war
                        Du weißt aber auch nicht was Du willst.

                        Soll die id per POST/Formular oder als GET-Parameter übergeben werden ?

                        Kommentar


                        • #13
                          Oh Mist. Ich habe gerade eine ganz üble Befürchtung:
                          2 PHP-Dateien. Eine Datei die das Formular enthält und so aufgerufen wird localhost/test.php?id=sfkja_3838o_dsfjs
                          Hier habe ich es bisher so gemacht, dass ich in einem Hidden-Feld, welches sich eben in dieser ersten PHP-Datei befindet, per Get diese ID eingetragen habe. In dieser Datei befindet sich dann eben auch die method="post", die ja durch Klicken auf den submit Button aktiviert wird.

                          Heißt das, ich kann mir das schenken, die ID vorher in dem hidden-Feld unterzubringen und die trotzdem in der zweiten PHP-Datei übernehmen? Eigentlich geht das doch nicht oder?

                          Kommentar


                          • #14
                            ja, die ID als GET-Parameter zu übernehmen und per POST in einem hidden-Feld zu schicken ist sinnfrei.

                            Kommentar


                            • #15
                              Nein ich rufe eine PHP-Seite auf: localhost/test.php?id=383_dsfsf_333_AB

                              In dieser PHP-Seite befindet sich ein HTML-Formular.
                              Hier kann man auf Dinge antworten.
                              Ich benötige sowohl die Antworten als auch die ID aus der URL später in einer zweiten PHP-Datei.
                              Bisher mache ich das so, dass ich per GET die ID aus der URL in ein Hidden-Feld des HTML-Formulars speichere.
                              Irgendwann habe ich dann alle Fragen beantwortet klicke auf den Submit-Button und übergebe alle Daten einschl. die ID per POST an die zweite PHP - Datei.

                              Was ist falsch daran ?

                              Grüße Felge

                              Kommentar

                              Lädt...
                              X