Abfrage mit der Funktion empty
mustino
- php
Hallo zusammen,
ich bin dabei einen Onlineshop mit Php-Mysql zu erstellen und habe dazu zum test zwei Php-Seiten.
Die Phpseite1.php enthält alle Artikel aus der Datenbank, die durch anklicken einer Checkbox ausgewählt werden und mit Hilfe von der Methode "post" an die Phpseite2.php gesandt werden.
Die Checkboxen haben alle durch die for-Schleife generierten Namen wie z.B. " b$i ", also durchnummeriert und als Wert den Primärschlüssel.
Jetzt kommen wir zum Problem:
Nach dem Absenden der aktivierten Kästchen versuche ich auf Phpseite2.php mit Hilfe einer for-Schleife die aktivierten Kästchen auszugeben und die "nicht-aktivierten" Kästchen mit der if-Abfrage
$test = "b".$i;
if(empty($test)){...}
abzufangen.
Jedoch gelingt die Ausgabe NUR, wenn ich alle Kästchen aktiviere, denn sonst bekomme ich folgende error-Meldung, NACHDEM ich die aktivierten Kästchen angezeigt bekomme:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Programme\Apache Group\Apache2\htdocs\Testserver\testshop2.php on line 25
Danke im Vorraus für alle Beiträge!
Hallo mustino
Die Checkboxen haben alle durch die for-Schleife generierten Namen wie z.B. " b$i ", also durchnummeriert und als Wert den Primärschlüssel.
$test = "b".$i;
if(empty($test)){...}
Jedoch gelingt die Ausgabe NUR, wenn ich alle Kästchen aktiviere, denn sonst bekomme ich folgende error-Meldung, NACHDEM ich die aktivierten Kästchen angezeigt bekomme:Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Programme\Apache Group\Apache2\htdocs\Testserver\testshop2.php on line 25
Nicht aktivierte Checkboxen werden typischerweise _nicht_ zurückgeliefert. Lass Dir einfach in einem Testskript den Inhalt von $_POST tabellarisch ausgeben. Sei bitte nicht überrascht, dass leere Checkboxen nicht erwähnt werden.
Freundliche Grüsse,
Vinzenz
Hallo Vinzenz,
Nicht aktivierte Checkboxen werden typischerweise _nicht_ zurückgeliefert. Lass Dir einfach in einem Testskript den Inhalt von $_POST tabellarisch ausgeben. Sei bitte nicht überrascht, dass leere Checkboxen nicht erwähnt werden.
Danke vorerst für die schnelle Antwort.
Auch wenn ich dieses empty weglasse habe ich den gleichen Ausgabefehler.
Irgendetwas stimmt mit dem Datenbankzugriff nicht.
$sqlab = "SELECT * FROM toner WHERE tnr = $_POST[$test]";
$res = mysql_db_query("Online-Shop",$sqlab);
$num = mysql_num_rows($res);
Ich laufe diese drei Zeilen für jeden Artikel durch, also $test wird durchgezählt, könnte dass das Problem sein?
Dankeschön!
Hallo mustino
Nicht aktivierte Checkboxen werden typischerweise _nicht_ zurückgeliefert. Lass Dir einfach in einem Testskript den Inhalt von $_POST tabellarisch ausgeben. Sei bitte nicht überrascht, dass leere Checkboxen nicht erwähnt werden.
Irgendetwas stimmt mit dem Datenbankzugriff nicht.
$sqlab = "SELECT * FROM toner WHERE tnr = $_POST[$test]";
Gibt es $_POST[$test]?
Du solltest mit einer for-each-Schleife durch $_POST gehen, und nicht blindlings $test hochzählen.
Wenn die Checkbox nicht aktiviert ist, gibt es kein $_POST[<nicht aktivierte Checkbox>].
Freundliche Grüsse,
Vinzenz
Hallo Vinzenz,
Du solltest mit einer for-each-Schleife durch $_POST gehen, und nicht blindlings $test hochzählen.
Wenn die Checkbox nicht aktiviert ist, gibt es kein $_POST[<nicht aktivierte Checkbox>].
Danke vorerst für die schnelle Antwort.
Ich habe es leider mit foreach nicht hinbekommen obwohl foreach wesentlich eleganter wäre, meine Lösung sieht wie folgt aus: (Der foreach-Versuch ist weiter unten)
MEINE LÖSUNG:
$sqlabm = "SELECT * FROM toner";
$resm = mysql_db_query("Online-Shop",$sqlabm);
$numm = mysql_num_rows($resm);
for($m=0; $m<$numm; $m++){
if(empty($_POST["b".$m]))
{
continue;
}
else{
$test = "b".$m;
$sqlab = "SELECT * FROM toner WHERE tnr = $_POST[$test]";
$res = mysql_db_query("Online-Shop",$sqlab);
$num = mysql_num_rows($res);
for($q=0; $q<$num; $q++){
$t1 = mysql_result($res, $q, "tnr");
$t2 = mysql_result($res, $q, "art");
$t3 = mysql_result($res, $q, "bezeichnung");
... usw....
FOREACH-VERSUCH:
foreach($_POST[] as $test){
$sqlab = "SELECT * FROM toner WHERE tnr = $_POST[$test]";
$res = mysql_db_query("Online-Shop",$sqlab);
$num = mysql_num_rows($res);
for($q=0; $q<$num; $q++){
$t1 = mysql_result($res, $q, "tnr");
$t2 = mysql_result($res, $q, "art");
$t3 = mysql_result($res, $q, "bezeichnung");
..... usw ....
Hallo mustino
Ich habe es leider mit foreach nicht hinbekommen obwohl foreach wesentlich eleganter wäre, meine Lösung sieht wie folgt aus: (Der foreach-Versuch ist weiter unten)
$sqlabm = "SELECT * FROM toner";
$resm = mysql_db_query("Online-Shop",$sqlabm);
$numm = mysql_num_rows($resm);for($m=0; $m<$numm; $m++){
if(empty($_POST["b".$m]))
Auch wenn es hier keinen Unterschied macht, verwende lieber isset() http://de3.php.net/manual/de/function.isset.php,
noch besser array_key_exists http://de3.php.net/manual/de/function.array-key-exists.php
...
$test = "b".$m;
$sqlab = "SELECT * FROM toner WHERE tnr = $_POST[$test]";
Grundsätzlich solltest Du Inhalte nie komplett ungeprüft in ein SQL-Statement übernehmen, lies bitte dazu http://www.dclp-faq.de/q/q-sql-injection.html
foreach($_POST[] as $test){
Da Du sicher nicht nur Deine Checkboxen hast (es sollte auch ein Submit-Button dabei sein), könntest Du hier auf b* prüfen.
...
Freundliche Grüsse,
Vinzenz
Hallo Vinzenz,
vielen Dank für die Hilfen und die Unterstützung!
Gruß
Mustino