Mit Formular (Dropdown-Box) MySQL UPDATE erzeugen

drabbit

Mitglied
Hallo,

ich stehe nun seit Stunden vor einem Problem, ich habe auch schon sehr viel danach gegoogelt, aber leider ohne Erfolg :(

Jetzt seit ihr meine letzte Hoffnung ;)

Was ich erreichen möchte: Ich lasse mir mit Php meine Bestellungen ausgeben und anzeigen - damit es schön übersichtlich wird lasse ich das alles in eine Tabelle schreiben und füge gleich die Dropdownbox mit den verschiedenen Statuseigenschaften ein. wenn ich den Status von erhalten auf ausgeliefert ändern möchte sollte das Php-Formular dies in der Datenbank umschreiben, wenn ich meine auswahl getroffen habe und dies bestätige...

Nun mein Code (was ich bisher "verbrochen" habe):
PHP:
<div id="center">
	
    
    
    <?

// Datenbankverbindung aufbauen 
	$db_user = 'pizza';
	$db_pass = 'pronto';
	$db_host = 'localhost';
// Verbinden
	$dblink = mysqli_connect($db_host, $db_user, $db_pass);
	$selected = mysqli_select_db($dblink, 'pizza');
	
	if (!$selected) {
	die ('Cannot use DB : '.mysqli_error($dblink));
	}
	
	mysqli_set_charset($dblink, 'utf8');

$sql = "SELECT * FROM bestellung WHERE status = 'eingegangen'"; 
$result = mysqli_query($dblink,$sql);


$num_results = $result->num_rows;

echo 'Anzahl gefundener Bestellungen:' . $num_results . '</p><br /><br />';

echo '<table border="1">';
echo '<tr> <td>Best. ID</td> <td>Kunden ID</td> <td>Prod. Kat</td> <td>Prod.</td><td>Menge</td><td>Datum</td><td>Status</td></tr>'; 

for ($i = 0; $i < $num_results; $i++){
	$row = $result->fetch_assoc();
 echo "<tr>"; 
 echo "<td><form method='post' action='index2.php?page=eingeg'>". $id = $row['id'] . "</td>";
 echo "<td>". $row['orderid'] . "</td>";
 echo "<td>". $row['kundenid'] . "</td>";
 echo "<td>". $row['produktid'] . "</td>";
 echo "<td>". $row['prodkatid'] . "</td>";
 echo "<td>". $row['menge'] . "</td>";
 echo "<td>". $row['datum'] . "</td>";
 echo "	<td> 
 		<select name='status'><option>eingegangen</option><option>angenommen</option>
		<option>ausgeliefert</option></select></td>";
 echo "<td><input type='submit' value='&auml;ndern'></td></form>";
 
$status = $_POST['status'];
 
 
echo $status;
echo $id;

// Hier werden die Daten in die Datenbank gespeichert
	$sql  = "UPDATE bestellung";
	$sql .= "SET status = '$status'";
	$sql .= "WHERE";	  
	$sql .= "id = '$id'";
 mysqli_query($dblink,$sql);
 
 echo "</tr>";
 
 }
 echo "</table>";



?>


</div>

Ich hoffe ihr könnt mir weiterhelfen.

lg
drabbit
 
Hi,

du solltest hier
Code:
<option>eingegangen</option><option>angenommen</option>
        <option>ausgeliefert</option>
noch die passenden value-Werte einfügen, sonst wird $status wohl leer bleiben.
 
Hallo,

also am value liegt es meiner Meinung nach nicht die variabel $status wird ja befüllt - das seh ich weil ich sie ja auf der Seite mit echo zum testen ausgebe.

hab es jetzt mit value versucht klapt auch nicht...
 
Das Problem lieg darin dass:

  1. Das Formular die Datenbank nicht updated
  2. Das Formular anscheinend gleich alle aufgelisteten Einträge auswählt

Ich glaube mit meinem Formular stimmt was nicht, bzw. speche ich die Felder falsch an... Vielleicht fehlt mir auch nur eine Abfrage, die checkt ob etwas angeklickt wurde?
 
Nachdem du auf "Ändern" klickst, leitet er auf die gleiche Seite weiter?
wenn ja, dann poste mal, was bei
PHP:
var_dump($_POST);
rauskommt.
 
So danke für eure Hinweise. Ich bin nun auf die Lösung gekommen:

PHP:
<div id="center">
	
    
    
    <?

// Datenbankverbindung aufbauen 
	$db_user = 'pizza';
	$db_pass = 'pronto';
	$db_host = 'localhost';
// Verbinden
	$dblink = mysqli_connect($db_host, $db_user, $db_pass);
	$selected = mysqli_select_db($dblink, 'pizza');
	
	if (!$selected) {
	die ('Cannot use DB : '.mysqli_error($dblink));
	}
	
	mysqli_set_charset($dblink, 'utf8');

$sql = "SELECT * FROM bestellung WHERE status = 'eingegangen'"; 
$result = mysqli_query($dblink,$sql);



if (isset($_POST['change'])){
	$status=$_POST['status'];
	
	$id=$_POST['id'];


// Hier werden die Daten in die Datenbank gespeichert
	$sql  = "UPDATE bestellung ";
	$sql .= "SET status = '$status' ";
	$sql .= "WHERE ";	  
	$sql .= "id = '$id'";
 $erg = mysqli_query($dblink,$sql);

echo '<strong> Die Daten wurden auf ' . $status . ' ge&auml;ndert.<br /><br /></strong>';

}



// Ausgabe auf der Seite

$num_results = $result->num_rows;

echo 'Anzahl gefundener Bestellungen:' . $num_results . '<br /><br />';

echo '<table border="1">';
echo '<tr> <td>id</td><td>Best. ID</td> <td>Kunden ID</td> <td>Prod. Kat</td> <td>Prod.</td><td>Menge</td><td>Datum</td><td>Status</td></tr>'; 

for ($i = 0; $i < $num_results; $i++){
	$row = $result->fetch_assoc();
 echo "<tr>"; 
 echo "<td><form method='post' action='index2.php?page=eingeg'>". $id = $row['id'] . "</td>";
 echo "<td>". $row['orderid'] . "</td>";
 echo "<td>". $row['kundenid'] . "</td>";
 echo "<td>". $row['produktid'] . "</td>";
 echo "<td>". $row['prodkatid'] . "</td>";
 echo "<td>". $row['menge'] . "</td>";
 echo "<td>". $row['datum'] . "</td>";
 echo "	<td> 
 		<select name='status'>
			<option value='eingegangen'>eingegangen</option>
			<option value='angenommen'>angenommen</option>
			<option value='ausgeliefert'>ausgeliefert</option>
		</select>
		
		
		</td>";
		
echo "<select name='id' style='visibility:hidden;'><option>$id</option></select>";		
 echo "<td><input name='change' type='submit' value='&auml;ndern'> </td></form>";

 
 echo "</tr>";

 }
 echo "</table>";


?>




</div>

Das Hauptproblem, warum nix upgedatet wurde lag hier:
PHP:
// Hier werden die Daten in die Datenbank gespeichert
	$sql  = "UPDATE bestellung ";
	$sql .= "SET status = '$status' ";
	$sql .= "WHERE ";	  
	$sql .= "id = '$id'";
 $erg = mysqli_query($dblink,$sql);
mein query hat sich nicht ausgekannt, da ich keine leerzeichen am Ende einer Reihe gemacht habe.

Weiters war ein Problem, dass ich keine if(isset()) funktion verwendet habe.

Nun funktioniert alles super und ich bin total happy :-)
 
Zurück