Hilfe bei Auswertung mit Checkbox

Christoph Haas

Mitglied
Hallo und guten Abend,

ich sitze hier an einem Code und komme nun nicht weiter, wahrscheinlich sehe ich den Code vor lauter Zeichen nicht mehr :rolleyes:

Folgender Fall:
In meiner Datenbank befinden Daten die nur angezeigt werden sollen, wenn der entsprechende Haken beim "Produkt" gesetzt ist.

Hiert erstmal der Code der anzeige.php:
PHP:
<?php

  $link = mysql_connect('localhost','root','');
  mysql_select_db('vergleich',$link);
  
  $abfrage = 'SELECT * FROM produkt';
  $ergebnis = mysql_query($abfrage);
  echo "<form name=form1 method=post action='auswahl.php'>";
  echo "<input type=submit name=Submit value=Senden>";
  while($row = mysql_fetch_object($ergebnis))
			{
			echo "
					<table border=1>
					<tr><th width=250><input type=checkbox name=checkbox value=checkbox></th></tr>
					<tr><th width=250>$row->name</th></tr>
					<tr><th width=250>$row->wert</th></tr>				
					</table><br>";
			
			}
			echo "</form>";
?>

Soweit erstmal gut. Es wird alles angezeigt wie es soll!
was mit Sorgen bereitet ist die anzeige.php
PHP:
<?php    
  $link = mysql_connect("localhost","root","");
  mysql_select_db("vergleich",$link);
  $abfrage = "SELECT * FROM produkt"; // mit WHERE arbeiten ****
?> 
<table border="1">
	<tr><?php
  		$ergebnis = mysql_query($abfrage); 
		while($row = mysql_fetch_object($ergebnis))
			{
			echo "<th width=200>$row->name</th>";
			}
		?>
	</tr>
	<tr><?php
  		$ergebnis = mysql_query($abfrage);  
		while($row = mysql_fetch_object($ergebnis))
	 		{
			echo "<th width=200>$row->wert</th>";
			}
		?>
	</tr>	
</table>

Also ich glaube ich muss mit WHERE oder mit $_POST['xxxx'] arbeiten aber wie und wo!?

Danke für die Hilfe
Christoph
 
Zwei einfache Schritte: Benenne deine Auswahlfelder von checkbox nach checkbox[] um und dann setze jeweils als Wert (value) des Auswahlfeldes die ID des Datensatzes. Damit kannst du dann in der anzeige.php alle aktivierten Felder per $_POST['checkbox'] abfragen.
 
Hallo,

also, zu allererst solltest du mal valides HTML generieren. Alle Attribute werden in HTML mit einem Double-Quote versehen:

HTML:
<input type="checkbox" name="checkbox" value="checkbox"/>

Das nächste wäre, das "checkbox" als value sehr ungeeignet ist. Normalerweise wird man hier einen aussagekräftigeren Wert wie z.B. eine Zahl oder auch einen Wert verwenden, den man dann in der Datenbank finden will. Da ich keine Ahnung habe, wie die Daten in deiner DB organisiert sind, mach ich mal einen educated guess:

Ändere die Checkbox:
PHP:
echo '<input type="checkbox" name="produkt_name" value="' .$row->name. '"/>";

Dann kannst du in anzeige.php so darauf zugreifen:

PHP:
$abfrage = "SELECT * FROM produkt WHERE name = '".mysql_real_escape_string($_POST['produkt_name'])."'"; // Hier wird aus dem Form die Checkbox bzw. deren Value eingetragen

Noch ein letzter Hinweis (eigentlich zwei) zum Abschluss:

Füge diese zwei Zeilen an den Anfang der Scripts

PHP:
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);

Außerdem arbeite mit der Fehlerbehandlung, die dir PHP bzw. die MySQL-Funktionen anbieten:

PHP:
mysql_query($abfrage) or die("Fehler in " . __FILE__ . " Zeile " __LINE__ . ": " . mysql_error() . " SQL = $abfrage");
 
Hallo nochmal,

erstmal danke für eure Hilfe.
Der Code von saftmeister funktioniert soweit. Nur wird mir immer nur das letzte angeklickte Produkt angezeigt. Es soll ja auch eine Mehrfachauswahl möglich sein. Setze ich allerding die $abfrage in die while-Schleife hab ich logischerweise eine Endlosschleife der Anzeige des Produkts.

Danke nochmal
Christoph
 
Wenn du mehrere Elemente übergeben willst, musst du - wie schon gesagt - eine öffnende und direkt dahinter eine schließende eckige Klammer hinter den Feldnamen setzen. Somit gibst du an, dass der Browser ein Array, also eine Liste von Elementen, übergeben soll.
 
hab ich gemacht:

anzeige.php
PHP:
//...
<tr><th width=250><input type="checkbox" name="produkt_name[]" value="' .$row->name. '"/></th></tr>
//...

Allerdings zeige er mir dann sobalf ich den "submit"-Button drücke bei der anzeige.php

Code:
Warning: mysql_real_escape_string() expects parameter 1 to be string, array given in C:\xampp\htdocs\vergleich\auswahl.php on line 9
an.

Wenn ich's richtig verstanden habe, akzeptiert mysql_real_escape_string() nur ein Parameter, aber wie gesagt brauch ich ja mehr:confused:

nochmals danke ;)
 
Ich musste gerade schmunzeln, denn die Meldung sagt dir genau, wo das Gras brennt: du bekommst jetzt natürlich mehrere Werte übergeben, mysql_real_escape_string verarbeitet aber nun mal nur Zeichenketten. Deshalb musst du das in eine Schleife setzen:
PHP:
if($_POST['produkt_name'] !== array()) {
  $sanitized = array();
  foreach($_POST['produkt_name'] as $value) {
    $sanitized[] = mysql_real_escape_string($value);
  }
}

$sql = 'SELECT * FROM produkt WHERE name IN("' . implode('", "', $sanitized) . '")';
 
Zurück