Fehlermeldung wird pro Zeile ausgegeben

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

  • Fehlermeldung wird pro Zeile ausgegeben

    Hallo liebe Forumsmitglieder,

    bin zum ersten Mal hier und absolute Anfängerin in PHP. Habe vor kurzem begonnen PHP zu lernen, dazu auch ein Buch gekauft "Einstieg in PHP 5.3 und MySQL 5.5". Bin dabei mir anhand von Beispielübungen das bisher gelernte und gelesene zu festigen.

    Ich habe ein Skript geschrieben wo in einer Textdatei mittels Eingabe aus einem erstellten Formular ein Name (Nachname) gesucht und ausgegeben wird. Es klappt soweit auch alles bestens. Zusätzlich wollte ich nun das wenn im Feld Nachname ein Name eingegeben wird der nicht existiert, eine Fehlermeldung erscheint wie zum Beispiel "keine Adresse gefunden".

    Habe dies dann mit der else - Anweisung definiert. Nun passiert aber folgendes; jede Zeile wird durchsucht und wenn der Namen in dieser Zeile nicht vorhanden ist dann erscheint die Fehlermeldung.

    Beispiel: (Meine Textdatei hat insgesamt 3 Zeilen und ich habe als such-Name "Muster" eingegeben)
    HTML-Code:
    Keine Adresse gefunden. 
    Hans Muster Seestrasse 54300 Mustern 011 213 20 20
    Keine Adresse gefunden. 

    Ich möchte aber das die Fehlermeldung erst erscheint wenn alle Zeilen durchsucht worden sind und der Name nicht vorhanden ist.
    Ich denke der Fehler ist, dass ich "else" innerhalb der Anweisung setze wo definiert ist, dass es zeilenweise durchsucht werden soll und von daher ist es wohl logisch das er dann auch pro Zeile den Fehler ausgibt.

    Sehe ich das richtig?
    Muss ich nochmals eine separate if/else - Anweisung schreiben damit er dies nicht zeilenweise ausgibt?
    Wo muss ich ansetzen? Könnt ihr mir da etwas weiterhelfen?

    Hier den Code den ich dafür geschrieben habe:

    PHP-Code:
    [LEFT]<html>
    <body>

    <?php

    if( !file_exists ("adressen.txt"))
    {
    echo 
    "Datei konnte nicht gefunden werden";
    exit;
    }

    $datei fopen("adressen.txt","r");
    if(!
    $datei)
    {
    echo 
    "Datei konnte nicht geöffnet werden";
    exit;
    }




    $datei file("adressen.txt");

    echo 
    "<table border='1'>";

    echo 
    "<tr><td><b>Vorname</td></b>" "<td><b>Nachname</td></b>" "<td><b>Strasse</td></b>" "<td><b>PLZ</td></b>" "<td><b>Ort</td></b>" ."<td><b>Tel.</b></td></tr>";

    foreach(
    $datei as $ausgabe)

    $daten explode(";"$ausgabe);

    echo 
    "<tr><td>$daten[0]</td>" "<td>$daten[1]</td>" "<td>$daten[2]</td>" "<td>$daten[3]</td>" "<td>$daten[4]</td>" "<td>$daten[5]</td>";
    }
    echo 
    "</table>";

    &
    #12288;
    ?>

     
    <p>Bitte tragen Sie einen Nachnamen ein und<br /> 
    senden Sie anschließend das Formular ab.</p>
    <form action="" method="post">
    <input type="text" name="nachname">
    <input type="submit" name="cmd" value="Suchen">
    </form>

     
    <?php

    &#12288;
    /*
    * Zeilenweise das Array durchsuchen und Ausgeben.
    */


    if (isset($_POST['nachname'])) {
    if (
    $_POST['nachname'] !='') { 
    $nachname $_POST['nachname'];
    }

    foreach(
    $datei as $ausgabe)
    {
    $daten explode(";"$ausgabe);

    if (
    strtolower($_POST['nachname']) == strtolower($daten[1])){ 

    echo 
    "<table border='1'>";
    echo 
    "<tr><td>$daten[0]</td>" "<td>$daten[1]</td>" "<td>$daten[2]</td>" "<td>$daten[3]</td>" "<td>$daten[4]</td>" "<td>$daten[5]</td>";
    echo 
    "</table>";


    }else
    echo 
    "Keine Adresse gefunden.";
    {


    }
    }


    ?>

     
    </body>

    </html>[/LEFT]


    Ich hoffe ich habe mich verständlich genug ausgedrückt. Bitte habt ein bisschen Verständnis bin absoluter Newbie.

    Danke
    Angi

  • #2
    Hallo,

    definier vor der foreach-Schleife eine Variable, z. b. $found = false;

    Den nicht funktionierenden else-Teil nimmst du erstmal weg, denn wie du bereits erkannt hast, macht der dort keinen Sinn. Im if-Teil setzt du die Variable $found auf true und nach der Schleife kannst du dann überprüfen, welchen Wert $found hat und weißt damit, ob innerhalb der Schleife irgendwann einmal was gefunden wurde oder nicht.

    Gruß,

    Amica

    PS: Du hast dich verständlich ausgedrückt und die korrekten Code-Tags benutzt, das ist für's erste Posting schon anerkennenswert. Wir haben hier ganz andere Spezis, die das nach mehreren hundert Beiträgen noch nicht kapiert haben Wenn du die Zeilenlänge von 100 Zeichen für Code-Blöcke noch berücksichtigst, ist es perfekt.
    Zuletzt geändert von AmicaNoctis; 28.11.2011, 14:24.
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Hallo Amica,

      Danke für Deinen Tipp, werde dies so in Angriff nehmen und melde mich dann wieder mit dem Ergebnis.

      Gruss
      Angi

      Kommentar


      • #4
        Hallo,

        Ich habe nun mein Script mit den noch notwendigen Einträgen erweitert.


        PHP-Code:
        <?php
        /*
        * Zeilenweise das Array durchsuchen und Ausgeben.
        */
         
        $found false
         if (isset(
        $_POST['nachname'])) {
           if (
        $_POST['nachname'] !='') { 
            
        $nachname $_POST['nachname'];
           }
         
          foreach(
        $datei as $ausgabe)
            {
             
        $daten explode(";"$ausgabe);
         
         if (
        strtolower($_POST['nachname']) == strtolower($daten[1])){ 
          
        $found true
         
           echo 
        "<table border='1'>";
            echo 
        "<tr><td>$daten[0]</td>" "<td>$daten[1]</td>" .
             
        "<td>$daten[2]</td>" "<td>$daten[3]</td>" .
             
        "<td>$daten[4]</td>" "<td>$daten[5]</td>";
                echo 
        "</table>";
          }
        }
        }
        [
        LEFT]//Meldung wenn Name falsch oder nicht vorhanden
        if (isset($_POST["gesendet"])){
        if (!empty(
        $found)){
        }else {
        echo 
        'Keine Adresse gefunden, oder Sie haben keinen Nachnahmen eingegeben.'
        }[/
        LEFT]
        }
        ?>
        Hier noch ein Nachtrag:

        Das Script funktioniert richtig, habe es (Dank Hilfestellung von Amica) korrekt ergänzt. Die Fehlanzeige wurde durch meinen Browser den ich nicht aktualisiert hatte hervorgerufen.

        Gruss
        Angi
        Zuletzt geändert von Angi; 07.12.2011, 15:44.

        Kommentar

        Lädt...
        X