kleine PHP Abfrage
Hallo,
kann mir jemand helfen,
Ich bin in PHP eine absolute Niete.
Ich habe eine Tabelle (wp_plz) in meiner MYSQL DB angelegt
Diese Tabelle enthät 3 Felder mit den Namen:
Name, Ort, PLZ
Jetzt brauche ich eine PHP Seite mit einem Eingabefeld wo man die PLZ eintragen kann
und einen Button um eine Abfrage auslösen.
Nach dem auslösen des Buttons soll dann die Tabelle nach der eingegeben PLZ durchsucht werden
und als Ergebnis soll dann der Name und der Ort auf der Seite erscheinen.
Ich danke jetzt schon für die Hilfe.
kann mir jemand helfen,
Ich bin in PHP eine absolute Niete.
Ich habe eine Tabelle (wp_plz) in meiner MYSQL DB angelegt
Diese Tabelle enthät 3 Felder mit den Namen:
Name, Ort, PLZ
Jetzt brauche ich eine PHP Seite mit einem Eingabefeld wo man die PLZ eintragen kann
und einen Button um eine Abfrage auslösen.
Nach dem auslösen des Buttons soll dann die Tabelle nach der eingegeben PLZ durchsucht werden
und als Ergebnis soll dann der Name und der Ort auf der Seite erscheinen.
Ich danke jetzt schon für die Hilfe.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 125870
Url: https://administrator.de/contentid/125870
Ausgedruckt am: 25.11.2024 um 17:11 Uhr
30 Kommentare
Neuester Kommentar
Hmm.
Wo liegt das Problem?
Die Anfrageseite mit dem Formular:
Und bei der Auswertung:
Meinst du etwa das?
Nachtrag: Bin mir grad nicht sicher ob pro PLZ in Deutschland immer ein eindeutiges Name, Ort Resultat erscheint - Vielleicht weiss das ja einer ---
Wo liegt das Problem?
Die Anfrageseite mit dem Formular:
<form method="post" name="myForm" action="auswertung.php">
<input type="text" name="PLZ_FELD_DER_ANFRAGESEITE">
<input type="submit" value="Suchen">
</form>
Und bei der Auswertung:
<?
$SQL = "SELECT * FROM 'wp_plz' WHERE PLZ='".$_POST['PLZ_DER_ANFRAGESEITE']."'";
$result = mysql_query($SQL);
if (mysql_num_rows($result) > 0)
{
echo "Name: " . mysql_result($result, 0, 'Name'). "; Ort: " . mysql_query($result, 0, 'Ort');
}
else
{
echo 'Sorry, keine Einträge gefunden!';
}
?>
Meinst du etwa das?
Nachtrag: Bin mir grad nicht sicher ob pro PLZ in Deutschland immer ein eindeutiges Name, Ort Resultat erscheint - Vielleicht weiss das ja einer ---
Hallo,
Gruß
Filipp
$SQL = "SELECT * FROM 'wp_plz' WHERE
PLZ='".$_POST['PLZ_DER_ANFRAGESEITE']."'";
$result = mysql_query($SQL);
Konfuzius sagt: gebe niemals eine Nutzereingabe direkt an eine DB-Abfrage weiter, sonst ist SQL-Injection vorprogrammiert (im wahrsten Sinne des Wortes ). Wenn ein Nutzer da "12345; SELECT username AS Ort, pwd AS Name FROM MeineGeheimstenPasswoerter" eingibt kann es schon passiert sein...PLZ='".$_POST['PLZ_DER_ANFRAGESEITE']."'";
$result = mysql_query($SQL);
Nachtrag: Bin mir grad nicht sicher ob pro PLZ in Deutschland immer
ein eindeutiges Name, Ort Resultat erscheint - Vielleicht weiss das ja
einer ---
Das kommt völlig darauf an, was du in deiner Tabelle für Daten hast und natürlich wie du "Ort" definierst. Aber definitiv hat nicht alles, was ein eigenes Ortsschild hat eine eigene PLZ.ein eindeutiges Name, Ort Resultat erscheint - Vielleicht weiss das ja
einer ---
Gruß
Filipp
Und Konfuzius war schlieslich ein schlaues Bürchen ;)
Wie wär das:
oder sogar noch:
mfG
Wie wär das:
$SQL = "SELECT * FROM 'wp_plz' WHERE PLZ='".preg_replace('#[^0-9]#', "", $_POST['PLZ_DER_ANFRAGESEITE'])."'";
oder sogar noch:
if (strlen($_POST['PLZ_DER_ANFRAGESEITE']) > 6) $_POST['PLZ_DER_ANFRAGESEITE'] = '000000';
$SQL = "SELECT * FROM 'wp_plz' WHERE PLZ='".preg_replace('#[^0-9]#', "", $_POST['PLZ_DER_ANFRAGESEITE'])."'";
mfG
Jetzt ist deine Aufgabe den Fehler zu finden. Das System zu debuggen.
Als erstes kannst du ein
durchführen um zu sehen wie die Query richtig aussieht. Diese Query kannst du dann im PHPMyAdmin direkt an die Datenbank schicken um zu sehen was sie bewirkt.
Auch kannst du dir den Fehler anzeigen lassen den die Abfrage generiert:
mfG
Edit: Pack deinen Code in einen Codeblock, das sieht besser und leserlicher aus. (hier im Forum: Schreib von den code "< code >" und danach "< /code >" - ohne Anführungszeichen und ohne Leerzeichen). Dann erscheint der Quelltext wie in meinem Beitrag.
Edit2: Ich bin nicht sicher ob ich richtig lese aber die Query muss lauten:
WHERE PLZ='".$___.'" Also vorne Apostroph Gänschefüschen (oder wie die Dinger auf Deutsch heissen. Die Dinger halt: ") und hinten muss es " und dann Apostroph sein.
Als erstes kannst du ein
echo $SQL;
durchführen um zu sehen wie die Query richtig aussieht. Diese Query kannst du dann im PHPMyAdmin direkt an die Datenbank schicken um zu sehen was sie bewirkt.
Auch kannst du dir den Fehler anzeigen lassen den die Abfrage generiert:
$SQL = "SELECT * FROM 'wp_plz' WHERE PLZ='".$_POST['PLZ_DER_ANFRAGESEITE']."'";
$result = mysql_query($SQL);
echo mysql_error();
mfG
Edit: Pack deinen Code in einen Codeblock, das sieht besser und leserlicher aus. (hier im Forum: Schreib von den code "< code >" und danach "< /code >" - ohne Anführungszeichen und ohne Leerzeichen). Dann erscheint der Quelltext wie in meinem Beitrag.
Edit2: Ich bin nicht sicher ob ich richtig lese aber die Query muss lauten:
WHERE PLZ='".$___.'" Also vorne Apostroph Gänschefüschen (oder wie die Dinger auf Deutsch heissen. Die Dinger halt: ") und hinten muss es " und dann Apostroph sein.
Edit2: Ich bin nicht sicher ob ich richtig lese aber die Query muss lauten:
Bevor wir jetzt lustiges Raten um SQL-Injections machen:
<?php
define ( 'MYSQL_HOST', 'localhost' );
define ( 'MYSQL_BENUTZER', 'xxxxxxx' );
define ( 'MYSQL_KENNWORT', 'xxxxxxx' );
define ( 'MYSQL_DATENBANK', 'xxxxxxx' );
// SQL-Befehl für den Zugriff
if(isset($_POST['PLZ'])) {
$plz = @intval($_POST['PLZ']);
if($plz < 1000 || $plz > 9999)
die('Ungültige PLZ angegeben');
$db_link = @mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);
if ( ! $db_link ){
die('keine Verbindung zur Zeit möglich - später probieren ');
}
mysql_select_db( MYSQL_DATENBANK )
or die("Auswahl der Datenbank fehlgeschlagen");
$sql = sprintf("SELECT * FROM `wp_plz` WHERE plz = %05u",$plz);
$query = mysql_query($sql);
if(mysql_num_rows($query) == 1) {
$result = mysql_fetch_row($query);
echo "Name: " . $result['Name']. "; Ort: " . $result['Ort'];
} else {
echo 'Sorry, keine Einträge gefunden!';
}
}
?>
Übrigens ist eine Suche nach Postleitzahlen nicht immer ideal.
Jemand der im 97xxx-Gebiet wohnt hat u.U. einen näheren Ansprechpartner im 36xxx-Gebiet...
Grüße
Max
Steht alles erklärt:
http://de2.php.net/sprintf
% - Beginn der Steuersequenz
0 - Fülle Platz mit 0en auf
5 - Benutze mind. 5 Stellen
u - Formatiere die Zahl als positive Ganzzahl.
Grüße
Max
http://de2.php.net/sprintf
% - Beginn der Steuersequenz
0 - Fülle Platz mit 0en auf
5 - Benutze mind. 5 Stellen
u - Formatiere die Zahl als positive Ganzzahl.
Grüße
Max
Hello again,
Erstens lese ich noch immer PLZ_DER_ANFRAGESEITE. Ersetz das mal durch was kurzes wie ptPLZ. In den beiden Dateien.
Zweitens: Wenn das der gesamte Inhalt der auswertung.php ist fehlt der Teil mit dem Verbindungsaufbau :
mfG
Erstens lese ich noch immer PLZ_DER_ANFRAGESEITE. Ersetz das mal durch was kurzes wie ptPLZ. In den beiden Dateien.
Zweitens: Wenn das der gesamte Inhalt der auswertung.php ist fehlt der Teil mit dem Verbindungsaufbau :
<?php
define ( 'MYSQL_HOST', 'localhost' );
define ( 'MYSQL_BENUTZER', 'xxxxxxx' );
define ( 'MYSQL_KENNWORT', 'xxxxxxx' );
define ( 'MYSQL_DATENBANK', 'xxxxxxx' );
$db_link = @mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);
if ( ! $db_link ) {
die('keine Verbindung zur Zeit möglich - später probieren ');
}
mysql_select_db( MYSQL_DATENBANK )
or die("Auswahl der Datenbank fehlgeschlagen");
...........
?>
mfG
Ok,
dann folgendes:
1)
sollte am besten lauten:
Man sollte es sich abgewöhnen für alles Variablen zu benutzen. Variablen verbrauchen speicher. PHP verwaltet den Speicher zwar extrem effizient, aber trotzdem ist es eine schlechte Angewohnheit. Das hat aber nichts mit dem Fehler zu tun!
2. Code
Versuch mal genau diesen Code:
Kopier den Code indem du auf den Link "In den Arbeitspeicher kopieren" klickst (hier im Forum über dem Code-Block) und dann in die Datei kopierst. Kopier es bitte genau so, da auch manches an der Gross/Kleinschreibung geändert wurde.
mfG
dann folgendes:
1)
$dbname = 'xxxxx';
mysql_select_db ($dbname);
sollte am besten lauten:
mysql_select_db('xxxxxx');
Man sollte es sich abgewöhnen für alles Variablen zu benutzen. Variablen verbrauchen speicher. PHP verwaltet den Speicher zwar extrem effizient, aber trotzdem ist es eine schlechte Angewohnheit. Das hat aber nichts mit dem Fehler zu tun!
2. Code
Versuch mal genau diesen Code:
<?php
/*Connect to the database.*/
$conn = mysql_connect ('localhost', 'xxxxxx', 'xxxxxx') or die ('There was an error connecting to the database.');
mysql_select_db ('xxxxxx');
$SQL = "SELECT * FROM 'wp_plz' WHERE plz='".$_POST['ptPLZ']."'";
$result = mysql_query($SQL);
while ($row = mysql_fetch_row($result)) {
echo "<br>".$row['name'].' - '.$row['Ort'].' - '.$row['plz'];
}
mysql_free_result($result);
mysql_close($conn);
?>
Kopier den Code indem du auf den Link "In den Arbeitspeicher kopieren" klickst (hier im Forum über dem Code-Block) und dann in die Datei kopierst. Kopier es bitte genau so, da auch manches an der Gross/Kleinschreibung geändert wurde.
mfG
Hast du einen FTP am laufen? Dann kannst du mir vielleicht die Zugangsdaten (per PN!) geben.
Ansonsten bekommst du ja die Meldung
"Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /usr/export/www/vhosts/funnetwork/hosting/aruba1/auswertung.php on line 13"
Das heisst genau dass die Variable $result keinen gültigen Zeiger auf die Resultate hat. Oder anders gesagt: Irgendwas schmeckt ihm nicht an der Zeile $result= mysql_query($SQL). Was ihm nicht schmeckt sagt er dir auch wenn du die Zeile
hinter die "$result"-Zeile anfügst.
mfG
Ansonsten bekommst du ja die Meldung
"Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /usr/export/www/vhosts/funnetwork/hosting/aruba1/auswertung.php on line 13"
Das heisst genau dass die Variable $result keinen gültigen Zeiger auf die Resultate hat. Oder anders gesagt: Irgendwas schmeckt ihm nicht an der Zeile $result= mysql_query($SQL). Was ihm nicht schmeckt sagt er dir auch wenn du die Zeile
echo "<br>".mysql_error($conn);
hinter die "$result"-Zeile anfügst.
mfG
Vom Code her müsste es passen. Wenn du glaubst dass der SQL Code das Problem ist, kannst du das testen indem du ein
einfügst. Entweder du siehst den Fehler sofort oder aber du kannst die Query in phpmyadmin eingeben. Es kann auch schon helfen wenn du die query mal folgendermassen abänderst:
Wichtig: Ändere bitte sonst nichts weil sonst sprechen wir ständig von verschiedenen Versionen und drehen uns dauernd im Kreis.
mfG
echo "<br>".$SQL;
einfügst. Entweder du siehst den Fehler sofort oder aber du kannst die Query in phpmyadmin eingeben. Es kann auch schon helfen wenn du die query mal folgendermassen abänderst:
$SQL = "SELECT * FROM 'wp_plz' WHERE plz='55218'";
Wichtig: Ändere bitte sonst nichts weil sonst sprechen wir ständig von verschiedenen Versionen und drehen uns dauernd im Kreis.
mfG