Abfrage-Formular

  • Hallo,

    ich habe gerade eine Vorlesung gehabt, die sich mit PHP beschäftigt und bin fast ganz ahnungslos. Ich versuche eine Formular-Abfrage zu erstellen, die mir mithilfe einer Suchfunktion dann die Daten rausgibt, die ich haben will. Das funktioniert aber leider nicht, und weil ich einfach zu wenig Ahnung habe, weiß ich leider nicht wieso. Ich weiß so grob, was in meinem Code passiert, allerdings nicht so genau, dass ich den Fehler finden würde. Es wäre super, wenn mir jemand helfen könnte, den Code zu verstehen und so natürlich den Fehler zu finden.

    Hier der Code:

    <!DOCTYPE html>
    <html>
    <head>
    <title>Teilnehmerliste</title>
    </head>

    <body>
    <h1>Suche Teilnehmer</h1></br>
    <h4>Abfrage Daten:</h4>

    <form method="get" action="dbzugriff0.php">
    <input type="text" name="ein1" />
    <input type="submit" value="senden" name="sub1" />
    </form>

    <?php
    echo "DB-Zugriff beginnt";
    $mysqli = new mysqli ("hierhost", "hierbenutzer", "hierkennwort", "TestDB");
    if (mysqli_error() ) {
    echo "<p>Keine Verbindung ", mysqli_error (), "</p>\n";
    exit ();
    }

    echo "Abfrage ".$sql;
    echo $GET ['ein1'];
    $such = $GET['ein1'];
    $sql = "Select * from teilnehmer limit 0,50 where teilnehmer like '%$such%'";
    echo "<br>SQL: ".$sql;
    if ($result = $mysqli->query($sql) ) {
    echo "<p>Daten kommen</p><table> ";
    while ($row = $result->fetch_array() ) {
    echo "<tr>";
    echo "<td>","</td>";
    echo "</tr>";
    }
    echo "</table>";
    $result->close();
    } else {
    echo "Problem SQL-Abfrage";
    }
    $mysqli->close ();
    ?>

    </body>
    </html>


    Danke! :)


  • Für mehrere Informationen und detaillierteres wende dich an die Dokumentation über MySQLi von php.net
    Diese findest du hier

    Viel Erfolg :)
    Ps: Vielleicht erstmal ein paar SQL Statements angucken, und allgemeines über php lernen bevor man gleich mit Datenbanken hantiert :)

    Einmal editiert, zuletzt von Bleistift (1. Juni 2013 um 20:13)

  • Hey!
    Danke für die Erklärungen! Das einzige, was ich nicht so ganz verstehe ist der Teil hier:

    Hier ist wahrscheinlich deine Aufgabe entsprechende Ausgaben zu tätigen.
    Also gibst du hier über dein Array row deine Daten aus, in etwa so: $row['columnname']
    echo "<tr>";
    echo "<td>","</td>";

    In Beispielen habe ich gesehen, dass da z.B. [2] drinstand, um eben diese Postion abzurufen. Ich habe aber keine bestimmte Positon. Das verwirrt mich etwas.
    Ich habe mich ja auch etwas belesen, das Problem ist nur, dass ich eine Woche für diese Aufgabe habe, das ist seehr wenig Zeit, da es ja leider nicht die einzige Aufgabe ist, die ich zeitig abgeben muss :)

    Es funktioniert übrigens verbessert auch noch nicht :D Ich weiß leider nicht, wie ich einen Bildanhang oder sowas machen kann, sonst könnte ich das mal zeigen :)

  • Richtig debuggen

    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
    3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

  • Wie gesagt etwas Datenbank-KnowHow wäre nicht schlecht.
    Du hast sicherlich eine Datenbank wenn du das jetzt versuchst, oder?
    Dann klick doch mal auf deine Tabelle und dann auf SQL. Anschließend auf den Button SELECT (ohne *)
    Dann hast du da einen wunderbaren SQL String, der dir alle deine Spalten selektiert.
    Diese sind geordnet in deiner Tabelle.
    Erst kommt deine id, dann dein Name. Also wäre deine ID == $row[0] oder $row['id']
    Der Integer gilt hierbei dann für den Spaltenindex und der String ist dann einfach nur die Möglichkeit deine Spalte per Namen zu "suchen".

    Zum Fehler: Entfern mal die eine Zeile echo "Abfrage ".$sql; unter der IF-Abfrage.

  • Ungetestet:

  • Bleistift:
    ja, die DB wird mir zur Verfügung gestellt :)
    Das ist jetzt sicher eine blöde Frage, aber wie klicke ich denn auf meine Tabelle? Es handelt sich bei der DB um eine Liste von Leuten mit Telefonnummern, sind also unglaublich viele Daten, deswegen kann ich nicht alle ausgeben lassen. Man soll sozusagen in der Suche einen Nachnamen oder einen Teil vom Namen eingeben können und dann alle mit dem Namen angezeigt bekommen.
    Die Zeile habe ich entfernt, und der nicht ganz verständliche Teil sieht gerade so aus:
    while ($row = $result->fetch_array() ) {
    echo "<tr>";
    echo "<td>",$row[0]"</td>";
    echo "</tr>";
    }

    zeigt mir aber jetzt nur eine leere Seite an, also ist das immernoch falsch ^^
    Lasse ich das $row[0] weg, zeigt es mir unter dem Suchfeld "SQL: Select kennummer, name, strasse, plz, telefon from teilnehmer limit 0,50 where teilnehmer like '%%'Problem SQL-Abfrage " an, wenn ich suchen will dann erscheint eine Error-Meldung.

    @ Bandit:
    Danke für den Versuch, aber damit kann ich leider nicht so viel anfangen :/


  • @ Bandit:
    Danke für den Versuch, aber damit kann ich leider nicht so viel anfangen :/


    Warum nicht? Damit hast du einen Ansatz, wie man es richtig macht! Bei dir sind einige Fehler drin.

  • @Bandit:
    Entschuldige! Habe den letzten Post übersehen, danke, das sieht so besser aus! :)

  • Benutze zum Verbinden von Strings und Variablen den Verkettungsoperator .

    echo "Das ist meine Variable:".$var;

    Im Allgemeinen baust du dort eine Tabelle auf und sagst, dass jeder Eintrag eine Zeile in der Tabelle sein soll.
    Bau deinen Head der Table doch mal auf wie deine Datenbank.

    Wenn du also die Spalten id und name in deiner Liste hast erstelle dir diese 2 Spalten in deiner HTML-Tablle in der Reihenfolge wie in der Datenbank.
    Lasse dir dann deine $row von 0 bis letzter index ausgeben und befülle die Spalten.
    Solltest du alles richtig machen solltest du ein logisches und verständliches Ergebnis bekommen :)
    Schau dir den Quellcode von Bandit an, der sollte funzen.

  • Bleistift
    Der Quellcode von Bandit sieht auf jeden Fall gut aus, nur gibt es mir nichts zurück, wenn ich etwas in die Suche eingebe ^^ Ich habe wohl irgendwo noch was verkehrt oder so..
    Ich weiß leider nicht, wie die mir zur Verfügung gestellte Tabelle aussieht. Ich weiß nur, dass ich sie habe :D

  • Du brauchst:

    HTML
    <form method="post" action="action.php">
    <input type="text" name="searchcontent" /> Suchinhalt
    </form>

    Auswertung:

  • Ich sehe, es wird! :D
    Ich merke allerdings auch, dass meine Konzentration langsam gegen Null geht, Zeit fürs Bett :)
    Vielen Dank soweit, ich melde mich morgen wieder!
    Gute Nacht :)

  • ..weiter geht's :D
    Ich habe einige Fragen zu Bandits Lösung.
    Ich habe zwar gelesen, dass $_SERVER ein Array ist, dass bestimmte Informationen zurückgibt, aber was ist ['SCRIPT_NAME']?
    Wieso benutzt man da MYSQL_ASSOC? Ich habe ja auch Telefonnummern, wäre da nicht MYSQL_BOTH die richtige Variante für mich?
    Und welche Bedeutung haben die Punkte hier:

    echo "<tr>
    <td>" . $row['kennummer'] . "</td>
    <td>" . $row['plz'] . "</td>
    <td>" . $row['name'] . "</td>
    <td>" . $row['strasse'] . "</td>
    <td>" . $row['telefon'] . "</td>

    kommt da nichts mehr hin?

    Ich glaube, das war alles ^^
    Großes Danke schonmal!!

  • Ah, okay.
    Sollte man meinen, aber es gibt mir nichts zurück :) Wenn ich irgendetwas in die Suche eingebe, sieht es so aus, als würde sich die Seite neu laden und einfach das Suchfeld leeren.

  • Das ist der aktuelle Code:

    Einmal editiert, zuletzt von Bandit (2. Juni 2013 um 17:19) aus folgendem Grund: Code-Formatierung eingebaut

  • Und das nächste Mal bitte die Formatierungsmöglichkeiten des Forums nutzen: [noparse]

    PHP
    Quellcode

    [/noparse]

    Auf den ersten Blick sehe ich das Problem auch nicht, da hilft wohl nur:

    Richtig debuggen

    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
    3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

    Und sieh' dir mal den HTML-Code an, den der Browser bekommt.

    Einmal editiert, zuletzt von Bandit (2. Juni 2013 um 17:25)