[Datenbank] Error mit Switch case
Frank
- php
hallo miteinander,
hab ein dummes problem.
aber erstmal der code:
<?
include("connect.php");
$sql = "SELECT * FROM users WHERE nachname = '".$_POST['name']."' OR vorname = '".$_POST['vorname']."' OR ort = '".$_POST['ort']."' OR land = '".$_POST['land']."'";
$select = mysql_query($sql) or die(mysql_error());
$anzahl = mysql_num_rows($select);
$do = isset($_GET['do'])?$_GET['do']:'';
switch($do)
{
default:
echo "Es wurden <b>$anzahl</b> Ergebnisse zu Ihrer Suchanfrage gefunden.<br><br>
<a href="$_SERVER[PHP_SELF]?do=ergebnis">weiter zu den Ergebnissen</a>";
break;
case "ergebnis";
while($arr = mysql_fetch_assoc($select))
{
echo 'irgendwas';
}
?>
so, ich übergebe von einem Formular die daten an diese seite.
dann sendet er ein query an die db.
dann brauch ich die anzahl der gefunden daten.
bisher ja nicht schwer.
nur wenn ich dann auf "weiter zu den Ergebnissen" klicke, kommt immer folgender fehler:
Notice: Undefined index: name in f:\apache\webmail_neu\ergebnis.php on line 24
Notice: Undefined index: vorname in f:\apache\webmail_neu\ergebnis.php on line 24
Notice: Undefined index: ort in f:\apache\webmail_neu\ergebnis.php on line 24
Notice: Undefined index: land in f:\apache\webmail_neu\ergebnis.php on line 24
weis auch wieso der immer kommt, weil die seite neu aufgebaut wird, und dann nicht mehr die POST Vars hat, nur jetzt weis ich nicht, wie ich das machen soll, damit es funst.
Der soll wenn man auf dem link klickt, die gefundenen Daten anzeigen.
hoffe auf baldige hilfe
mfg
Frank
Fehler in Zeile 24 ?
Da du nur 23 Zeilen hast, fehlt die schließende geschweifte Klammer vom switch, die er in Zeile 24 vermisst.
Gruss, Kalle
Hallo,
$sql = "SELECT * FROM users WHERE nachname = '".$_POST['name']."' OR vorname = '".$_POST['vorname']."' OR ort = '".$_POST['ort']."' OR land = '".$_POST['land']."'";
Böser code...
Niemals daten vom user direkt in funktionen einbinden ohne den inhalt überprüft zu haben.
Beispiel:
$sql="DELETE FROM users WHERE id=$id AND permission='7'";
wenn ein "böser" user dir id aber so übergibt:
$id="1 #"
dann wird aus deinem SQL befehl: DELETE FROM users WHERE id=1 # AND permission='7'
$select = mysql_query($sql) or die(mysql_error());
$anzahl = mysql_num_rows($select);$do = isset($_GET['do'])?$_GET['do']:'';
???? für was ? $do ist sowiso schon auf $_GET['do'] gesetzt (ausser du befindest dich hier in einer function)
Generell ist das was du machst nicht sinnvoll. Warum muss der User auf einen link klicken um sich die ergebnisse anzeigen zulassen? (Usability).
Ausserdem musst du die Datenbank mit dem Selben query 2x quälen.
PHP ist nun mal ('leider') kein application server, sonst könntest zb. die mysql linkid übergeben. Aber php beendet die verbindung wenn das skript beendet wird. das heisst ein einfaches übergeben der linkid nützt dir nichts.
du hast also nur die möglichkeit alle benötigten variablen nochmal zu übergeben oder (ums noch bösartiger zu machen) gleich den query zu übergeben.
Über Session oder Cookies wärs auch möglich, aber wie gesagt, der zwischenschritt ist unnötig.
lg
Ludwig