Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Problem bei Fehlervalidierung

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Problem bei Fehlervalidierung

    Hallo,

    ich würde gern für ein Formular die folgenen Felder wie folgt validieren:

    "name" und "url" dürfen weder leer sein, noch bereits genutzt werden.

    Das beide nicht leer sein dürfen habe ich schon und auch, das ein Feld nicht genutzt werden darf auch:

    PHP-Code:
    <?    //Übergebene Daten auslesen
        $pname = $_REQUEST["name"];
        $pdescription = $_REQUEST["description"];
        $purl = $_REQUEST["url"];

        //Fehler-Überprüfung
        //TODO: 2. Fehlerprüfung "name" darf nicht verwendet sein einfügen
        if ($pname=="") {
            echo ""._PROJECT_NAME." "._NOTEMPTY."";
            $ErrorHere=1;
        } elseif ($purl=="") {
            echo ""._PROJECT_NAME." "._NOTEMPTY."";
            $ErrorHere=1;
        } elseif {
          $resultx = mysql_query("SELECT count(1) FROM projects WHERE name='$pname'");
          list($anzahl)=mysql_fetch_row($resultx);
          if ($anzahl!=0) {
              echo ""._PROJECT_URL." "._USED."";
              $ErrorHere=1;
          }
        } else {
          $resulty = mysql_query("SELECT count(1) FROM projects WHERE url='$purl'");
          list($anzahl)=mysql_fetch_row($resulty);
          if ($anzahl!=0) {
              echo ""._PROJECT_URL." "._USED."";
              $ErrorHere=1;
          }
        }?>
    Sobald ich jedoch die "elseif" Schleife wiederhole und die letzte Fehlervalidierung versuche, wird mir dieses "elseif" immer als Fehler angezeigt:

    Parse error: syntax error, unexpected '{', expecting '(' in C:\xampp\htdocs\Playground\projects.php on line 92

    Ich hoffe, es kann mir jemand helfen, da ich da schon sehr lange suche. Danke!

    Kay

  • #2
    Sobald ich jedoch die "elseif" Schleife wiederhole[...]
    if-schleife.de

    Code:
    } elseif {
    Da fehlt eine Bedingung!

    Verzichte auf Short-Tags, nutze Long-Tags.

    Codeoptimierung:Code-Smells - PHP.de Wiki
    [URL]http://hallophp.de[/URL]

    Kommentar


    • #3
      Hallo,

      das war mir soweit klar, da er ja eine () erwartet, in der normalerweise die Bedingungen stehen.

      Wir kann ich denn eine solche Bedingung formulieren, wenn ich sagen will, das dieser Wert in der Datenbank nicht existieren darf. Denn das frage ich ja erst "später" ab.

      Danke
      Kay

      Kommentar


      • #4
        Schmeiß die beiden Abfragen doch zusammen und streich den 2. else if -Block weg:
        PHP-Code:
            } else {
              
        $resulty mysql_query("SELECT count(1) FROM projects WHERE url='$purl' OR name='$pname'");
              list(
        $anzahl)=mysql_fetch_row($resulty);
              if (
        $anzahl!=0) {
                  echo 
        ""._PROJECT_URL." "._USED."";
                  
        $ErrorHere=1;
              }
            } 
        Btw. beschäftige dich dringend mit PHP: SQL Injection - Manual.

        Gruß
        [URL]http://hallophp.de[/URL]

        Kommentar


        • #5
          Ich brauch schon zwei getrennte Bereiche, da ich ja jeweils spezielle eindeutige Fehlermeldungen für den User ausgeben möchte.

          Ich habe nun die Abfragen vor die Fehlervalidierung gestellt und das klappt jetzt auch:

          PHP-Code:
          <?
              //Anzahl DS "name" abfragen
              $result_name = mysql_query("SELECT count(1) FROM projects WHERE name='$pname'");
              list($anzahl_name)=mysql_fetch_row($result_name);

              //Anzahl DS "url" abfragen
              $result_url = mysql_query("SELECT count(1) FROM projects WHERE url='$purl'");
              list($anzahl_url)=mysql_fetch_row($result_url);    
              
              if ($pname=="") {
                  echo ""._PROJECT_NAME." "._NOTEMPTY."";
                  $ErrorHere=1;
              } elseif ($purl=="") {
                  echo ""._PROJECT_URL." "._NOTEMPTY."";
                  $ErrorHere=1;
              } elseif ($anzahl_name!=0) {
                  echo ""._PROJECT_NAME." "._USED."";
                  $ErrorHere=1;
              } elseif ($anzahl_url!=0) {
                  echo ""._PROJECT_URL." "._USED."";
                  $ErrorHere=1;
              }
          ?>
          Vielen Dank, dass ich daruch auf die Idee gekommen bin.

          Bezüglich Deines Hinweises: ich frage hier ja nicht nach irgendwelchen Passwörten oder Benutzernamen. Der Benutzer der DB hat auch nur Rechte auf die Tabelle "projects". Was könnte denn schlimmstenfalls hier passieren?

          Kay

          Kommentar


          • #6
            Bezüglich Deines Hinweises: ich frage hier ja nicht nach irgendwelchen Passwörten oder Benutzernamen.
            Das ist einem Hacker relativ gleichgültig, wonach DU fragst!
            [URL]http://hallophp.de[/URL]

            Kommentar


            • #7
              Es würde aber auch zum Beispiel helfen, wenn ich anstatt direkter Abfragen Stored Procedures verwende, oder?

              Kommentar


              • #8
                Es würde reichen, wenn du ein entsprechendes Escaping verwendest, entweder durch Verwendung von prepared statements oder mysql_real_escape_string()

                Stored Procedures gehen auch, machen dein Programm aber m.M.n unflexibel. Ich würd sie jedenfalls nicht verwenden, wenn ich nicht müsste.
                Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                Kommentar

                Lädt...
                X