Plausibilitätsprüfung zum x-ten

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

  • Plausibilitätsprüfung zum x-ten

    Moin Moin,
    zwei Sachen gerne vorweg:
    Ich beschäftige mich mit PHP erst seit kurzem
    Die in der Suchfunktion gefundenen Lösungen halfen mir leider nicht.
    Vielleicht bin ich ja auch nur zu doof und habe was übersehen.

    Zum Problem:
    Eine Adress-Datenbank....
    Mittels HTML und PHP lasse ich eine SQL-Datenbank füllen und auswerten.
    Das klappt bis jetzt auch ganz gut, die Suchfunktionen und die Darstellung sowie das Füllen mit neuen Adressdaten klappt zu meiner Zufriedenheit.

    Das Eingabe-Formular sieht ungefähr so aus:

    <form action="ok.php" method="POST">
    [COLOR=darkred]
    <table border="0" width="560">
    <tr>
    <td width="135"><font face="arial" size="-1">Anrede </font></td>
    <td width="425"> [/COLOR]
    <input type="text" size="4" name="Anr">
    [COLOR=darkred]</td>
    </tr>
    <tr>
    <td width="135"><font face="arial" size="-1">Vorname</font></td>
    <td width="425"> [/COLOR]
    <input type="text" size="30" name="VName">
    [COLOR=darkred]</td>
    </tr>
    .
    .
    .
    <input type="submit" name="B1" value="Abschicken">[/COLOR]

    Die o.g. ok.php sieht dann so aus:

    <?php
    mysql_connect ("localhost", "", "");
    mysql_select_db("xyz");
    $Datum = strftime('%Y-%m-%d');
    mysql_query("INSERT INTO xyz (Anr, VName, Name, Str, Land, PLZ, Ort, Tel, Fax, Mail, url, Komm, Grp, Datum) VALUES ('$Anr', '$VName', '$Name', '$Str', '$Land', '$PLZ', '$Ort', '$Tel', '$Fax', '$Mail', '$url', '$Komm', '$Grp', '$Datum')");
    mysql_close();
    ?>

    Ihre Daten wurden am <b>
    [COLOR=blue]<?php echo $Datum; ?>[/COLOR]
    </b> in die Kategorie <b>&quot;[COLOR=blue]<?php echo $Grp; ?>[/COLOR] &quot;</b> in die Datenbank übernommen: </font></td>
    </tr>
    <tr>
    <td width="45%"> <font size="-1" face="Arial, Helvetica, sans-serif">
    [COLOR=blue]<?php echo $Anr; ?>
    <?php echo $VName; ?>
    <?php echo $Name; ?>
    .
    .
    .
    [/COLOR]

    Wie kann ich nun Pflichtfelder und Inhalte (PLZ= 5-stellig, E-Mail-Format) abprüfen?

    Wie gesagt, etliche Bsp. habe ich ja im Forum gefunden, aber leider funzen sie anscheinend nicht in diesem Falle.
    Vielen Dank vorab!

    Mannie

    [Nec sire fas est omnia]

  • #2
    Re: Plausibilitätsprüfung zum x-ten

    Original geschrieben von Mannie
    Wie kann ich nun Pflichtfelder und Inhalte (PLZ= 5-stellig, E-Mail-Format) abprüfen?

    Wie gesagt, etliche Bsp. habe ich ja im Forum gefunden, aber leider funzen sie anscheinend nicht in diesem Falle.
    welche beispiele hast du gefunden, wie hast du sie auf dein problem angepasst, was scheint nicht zu "funzen"?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Hallo,

      z.B. mit dem Eintrag

      [COLOR=crimson]if ($name == ""){ echo "<font color='#FF0000'>Sie haben keinen <b> Namen</b> eingegeben.</font><br>";}[/COLOR]

      Diese Zeile erfüllt zwar den Zweck eine Warnmeldung herauszugeben ("Sie haben keinen Namen eigegeben"), der Eintrag landet aber trotzdem in der DB. Ich sehe auch hier keine Anweisung, die dieses Verhindern sollte, der POST-Befehl wird ja auf alle Fälle ausgeführt.

      Weiter:
      [COLOR=crimson]if
      ($REQUEST_METHOD == "POST"){
      $require = array('Name','VName','Mail','PLZ','Ort','Komm');
      $Name = $HTTP_POST_VARS[Name];
      $Vname = $HTTP_POST_VARS[VName];
      $Mail = $HTTP_POST_VARS[Mail];
      $PLZ = $HTTP_POST_VARS[PLZ];
      $Ort = $HTTP_POST_VARS[Ort];
      $Komm = $HTTP_POST_VARS[Komm];
      foreach($HTTP_POST_VARS as $key => $wert){
      if ($x = array_search($key, $require)){
      if(empty($wert)){[/Color]

      bringt ein Syntax-Problem hervor ("Parse error: parse error, unexpected $ in c:\....\ok.php on line 99"), obwohl fachgerecht implementiert (zumindest für meine trüben Augen). Übrigens, der Quellcode besteht nur aus 98 Zeilen

      Am elegantesten ist ja folgende Lösung, welche ich auch (teilweise) erfolgreich einsetzen konnte:

      [COLOR=crimson]
      <?php
      if ($Name == '')
      die ("Fehler! Name fehlt")
      ?>
      [/COLOR]

      Hier fehlt mir aber noch eine elegante Syntax, wenn ich nicht nur $Name, sondern auch $VName, $PLZ, $Ort, $Mail und $Komm abfragen will.
      Das kann ich ja wahrscheinlich nicht in einer Abfrage, da ja die Fehlermeldungen nicht spezifisch wären (oder doch? )
      "Name fehlt" bei weglassen der Mail wäre ja äusserst ungeschickt, die Angabe "Alle Pflichtfelder ausfüllen ist mir zu allgemein", also brauche ich nicht nur 6 If's, sondern auch 6 Textausgaben dazu.

      Also frage ich, primitiv wie ich nun mal bin, bei 6 Pflichtfeldern 6 mal die If-Abfrage im Quellcode ab, was ja eigentlich nicht schlimm ist. Wäre nicht der unelegante Weg, dass, wenn ich ein leeres Formular abschicke, ich auch 6 mal korrigieren muss, da ich nie eine Gesamt-Fehlermeldung erhalte sondern die 6 hintereinander folgenden If's einzeln ab arbeite.
      (Vorname vergessen- Fehlermeldung - zurück zu Eingabe - ändern - Enter
      Name vergessen - Fehlermeldung - zurück zu Eingabe - ändern - Enter
      .....)

      Ich könnte auch mit dieser simplen Aufreihung der If-Abfragen leben, doch es muss doch auch eine etwas gediegenere Methode geben, oder?
      Vielen Dank im Voraus

      Kommentar


      • #4
        PHP-Code:
                                
            
        if ($descr[0] == "")
                                    {echo 
        "<font color='#FF0000'>Bitte <b>Vornamen</b> eintragen.</font><br>";}
                                    elseif (
        $descr[1] == "")
                                    {echo 
        "<font color='#FF0000'>Bitte <b>Nachname</b> eintragen.</font><br>";}
                                    elseif (
        $descr[3] == "")
                                    {echo 
        "<font color='#FF0000'>Bitte <b>Firma</b> eintragen.</font><br>";}
                                    elseif (
        $descr[4] == "")
                                    {echo 
        "<font color='#FF0000'>Bitte <b>Strasse</b> eintragen.</font><br>";}
                                    elseif (
        $descr[5] == "")
                                    {echo 
        "<font color='#FF0000'>Bitte <b>Postleitzahl</b> eintragen.</font><br>";}
                                    elseif (
        $descr[6] == "")
                                    {echo 
        "<font color='#FF0000'>Bitte <b>Ort/Stadt</b> eintragen.</font><br>";}
                                    elseif (
        $descr[6] != "")
                                    
        $descr[6] = str_replace($search,$replace,$descr[6]);
                                    elseif (
        $descr[8] == "")
                                    {echo 
        "<font color='#FF0000'>Bitte <b>Land</b> eintragen.</font><br>";}
                                    elseif (
        $descr[9] == "")
                                    {echo 
        "<font color='#FF0000'>Bitte <b>Telefon</b> eintragen.</font><br>";}
                                    elseif (
        $descr[11] == "")
                                    {echo 
        "<font color='#FF0000'>Bitte <b>Email</b> eintragen.</font><br>";}
                                    elseif(!
        ereg("^[a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+\.([a-zA-Z]{2,3})$"$descr[11]))
                                    {echo 
        "<font color='#ff0000'><b>Email</b> hat das falsche Format!</font><br>";}
                                    else
                                    {
        $step2 "ok";} 
        hier so mache ich das. Dann machst du eine if anweisung if step 2 ok --- eintrag in die db.


        Aber mal ne andere Frage. Wo wir gerade beim Thema sind. ich suche eine Plausel Prüfung auf die Gültigkeit einer Internationalen Telefonnummer.

        sprich die eingegebene Tel. soll so aussehen:


        + 49 (0) 0000-90-1258

        +49.000090125855

        +49 69 545485

        +49.6990554599

        es sind also viele schreibweisen erlaubt allerdings sollen nur nummern und das "+" , "." Zeichen erlaubt sein.

        Bzw wen ich 069 548745656 eingebe soll er es ersetzten in +49 (0)69 548745656.

        Wie stelle ich das an bzw wie sieht der regex aus ?
        Ein blue screen ist nicht immer was schlimmes... es hängt nur davon ab wo er zu sehen ist !
        www.d-creationz.de

        Kommentar


        • #5
          Original geschrieben von Mannie
          z.B. mit dem Eintrag

          [COLOR=crimson]if ($name == ""){ echo "<font color='#FF0000'>Sie haben keinen <b> Namen</b> eingegeben.</font><br>";}[/COLOR]

          Diese Zeile erfüllt zwar den Zweck eine Warnmeldung herauszugeben ("Sie haben keinen Namen eigegeben"), der Eintrag landet aber trotzdem in der DB. Ich sehe auch hier keine Anweisung, die dieses Verhindern sollte, der POST-Befehl wird ja auf alle Fälle ausgeführt.
          dann musst du die logik deines scriptes eben entsprechend anpassen:

          zunächst mal werden alle eingaben überprüft.

          wenn fehler auftreten, gibst du entsprechende meldungen aus.

          wenn kein fehler aufgetreten ist, dann machst du den eintrag in die datenbank.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar

          Lädt...
          X