Reihenfolge eingeben und abschicken. Hmm..

ChrisPB

Mitglied
Hallo zusammen,

und schon stoße ich auf das nächste Problem in meinem Online-Shop.

Ich habe an einer Stelle Handy-Tarife eingetragen und möchte jetzt an
einer anderen eine gewisse Reihenfolge eingeben, da dies erforderlich ist.

Momentaner Status:
Ich bekomme Tarife angezeigt und habe eine Spalte "reihe" angelegt, wo
eine Zahl eingegeben werden kann, nach der ich später die Ausgabe sortiere.

Normalerweise hab ich keine Probleme mit SQL-Befehlen um eine DB
zu füllen. Nur hier müssen viele Werte gleichzeitig abgeschickt werden.

Mein Code

Wenn Button gedrückt, in die DB schreiben:
PHP:
<?php
include("db.php");

if(isset($_POST['sent'])){
			
	$sql_string = "INSERT INTO ".$db_tarife." (tarif_id,provider_name,tarif,reihe) ";
	$sql_string .= "VALUES(NULL,NULL,NULL,'".$_POST['reihe']."')";

	$db_result = mysql_query($sql_string);

}
?>


Hole alle Tarife, nach Netzbetreiber sortiert
PHP:
			<?
			$sql_get_all = "SELECT * FROM " . $db_tarife . " WHERE provider_name = '".$_GET['prov']."'";
			$db_result = mysql_query($sql_get_all);

			if (mysql_num_rows($db_result) >0) {

				echo "<table>";

				while ($row = mysql_fetch_array($db_result, MYSQL_ASSOC)) {
					echo "<tr><td><b>ID:</b> " . $row['tarif_id'] . "</td><td><b>Provider:</b> " . $row['provider_name'] . "</td><td><b>Tarif:</b> " . $row['tarif'] . "</td><td><b>Nr:</b> <input name='reihe' type='text' id='reihe' size='1' value='".$row['reihe']."'></td></tr>";
				} 
				echo "</table>";
				$no_data = 0;
			}
			else{
				echo "<b>Bitte Netzanbieter w&auml;hlen!<b>";
				$no_data = 1;
			} 
?>

Dazwischen ist natürlich noch überall HTML, aber der ist uninteressant.

Es soll nur die Spalte reihe in der DB verändert werden.

P.S. Siehe Anhang für Ansicht: Man soll in die Felder Zahlen eingeben können
und dann abschicken. Im FrontEnd wird anschließend nach der Spalte 'reihe'
sortiert und angezeigt.
 

Anhänge

  • 24938attachment.jpg
    24938attachment.jpg
    38,6 KB · Aufrufe: 6
Okay, jetzt hab ich schon herausgefunden, dass ich die DB
nur updaten muss mit dem Befehl UPDATE...SET, aber hänge
trotzdem noch an der Stelle fest, dass ich nicht weiß wie er
alle Felder updatet.
 
Hallo!

Die Reihenfolge in der die Einträge in der Datenbank stehen sind doch egal.
Da Du ja mit der Spalte "reihe" eine benutzerdefinierte Sortierreihenfolge festlegen willst, musst Du dort nur die entsprechenden Zahlen eintragen.
Sind die Einträge bereits vorhanden (egal ob mit oder ohne Zahl zum sorteiren), musst Du zum ändern der Reihenfolge den UPDATE Befehl nutzen.
Sollen aber neue Einträge hinzukommen, machst Du dieses halt mit INSERT.

Sortieren tust Du den ganzen Kram später bei der Ausgabe mit einem ORDER BY `reihe`.

Gruss Dr Dau

[edit]
Wird die tarif_id mit einem auto_increment vergeben?
[/edit]
 
Zuletzt bearbeitet:
Hey Doc,
Danke für dein Beitrag, aber soweit bin ich ja schon.
Mein Problem ist, dass ich nicht weiß wie er folgenden Ablauf z.B. machen soll:

UPDATE `p_shop_tarife` SET `reihe` = '1' WHERE `tarif_id` = '1'
UPDATE `p_shop_tarife` SET `reihe` = '3' WHERE `tarif_id` = '5'
UPDATE `p_shop_tarife` SET `reihe` = '2' WHERE `tarif_id` = '2'
UPDATE `p_shop_tarife` SET `reihe` = '4' WHERE `tarif_id` = '6'
....

usw.


Wenn ich die Felder aus der DB ziehe, generiert er mir ja ne Liste.
Wenn ich in dieser Liste alle Felder (wo standardmäßig ne 0 drin ist)
verändere, will ich das Formular ja abschicken. Der muss doch
rein theoretisch x-Mal das UPDATE-Querry durchlaufen, damit er
jedes Feld verändert...
 
Rein theoretisch kannst Du hunderte von UPDATE-Querys untereinander schreiben. ;)
Da aber auch mal ein neuer Datensatz hinzukommen könnte oder einer gelöscht werden könnte, währe diese Möglichkeit natürlich "etwas" zu statisch. ;)
Daher solltest Du die UPDATE-Querys in einer while-Schleife durchlaufen.
Damit die Schleife aber nicht endlos durchläuft, musst Du sie auf die Anzahl der Datensätze begrenzen.
Hierzu zählst Du die betroffenen Datensätze, welche Du ja im vorherigem Script ausgegeben hast, im selbigen mittels mysql_num_rows() und übergibst das Ergebnis in einem <input type="hidden" name="datensaetze" value="Anzahl der Datensätze"> (ausserhalb der while-Schleife) an das Update-Script.
Damit MySQL aber auch weiss welcher Datensatz gerade geupdatet werden soll, musst Du auch die ID des jeweiligen Datensatzes mit übergeben.
Dieses machst Du innerhalb der while-Schleife mit einem <input type="hidden" name="id" value="'.$row['tarif_id'].'">.

Dann würde Deine while-Schleife im Update-Script ungefähr so aussehen:
PHP:
<?php
$i = 0;
while($i <= $_POST['datensaetze']) {
     mysql_query("UPDATE `p_shop_tarife` SET `reihe` = '".$_POST['reihe']."' WHERE `tarif_id` = '".$_POST['id']."';");
$i++;
}
?>
Ich hoffe jetzt dass es so richtig ist. :confused:
 
Zuletzt bearbeitet:
Ich glaube mein Problem wurde nicht richtig verstanden.

Ich poste jetzt mal den gesamten Code:

Code:
<?php
include("db.php");

if(isset($_POST['sent'])){
			
	$sql_string = "UPDATE ".$db_tarife." SET reihe='".$_POST['reihe']."' WHERE tarif_id = '".$_POST['tarifid']."'";
	$db_result = mysql_query($sql_string);
	echo $sql_string;
}
?>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="../data/style.css" rel="stylesheet" type="text/css">
</head>
<body>
	<table width="600" border="0" cellpadding="10" cellspacing="0" bgcolor="#bbccbb">
		<tr>
			<td>
			<b>Tarif Reihenfolge festlegen</b><br />
			<br />
			<a href="?prov=T-Mobile">T-Mobile</a> | <a href="?prov=Vodafone">Vodafone</a> | <a href="?prov=O2">O2</a> | <a href="?prov=e-plus">E-Plus</a><br />
			<a href="?prov=Debitel">Debitel</a> | <a href="?prov=Mobilcom">Mobilcom</a> | <a href="?prov=Victorvox">Victorvox</a> | <a href="?prov=Phonehouse">Phonehouse</a><br />
			<br />
			<form action="<? $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data" name="das_formular">
			<?
			$sql_get_all = "SELECT * FROM " . $db_tarife . " WHERE provider_name = '".$_GET['prov']."' ORDER BY reihe";
			$db_result = mysql_query($sql_get_all);

			if (mysql_num_rows($db_result) >0) {

				echo "<table>";

				while ($row = mysql_fetch_array($db_result, MYSQL_ASSOC)) {
					echo "<tr><td><b>Tarif:</b> <input name='tarifname' type='text' id='tarifname' size='25' value='".$row['tarif']."'></td><td><b>Nr:</b> <input name='reihe' type='text' id='reihe' size='1' value='".$row['reihe']."'> | <input name='tarifid' type='text' id='tarifid' size='1' value='".$row['tarif_id']."'></td></tr>";
				} 
				echo "</table>";
				$no_data = 0;
			}
			else{
				echo "<b>Bitte Netzanbieter w&auml;hlen!<b>";
				$no_data = 1;
			} 
			?>		
			</td>
		</tr>
		<tr>
			<td>
			<b>Alles &uuml;berpr&uuml;fen...</b><br />
			<br />
			<div align="center"> 
				<input type="submit" name="Submit2" value="Send">
				&nbsp; 
				<input type="reset" name="Submit3" value="Reset">
				<input name="sent" type="hidden" id="sent" value="1">
			</div>
			
			</form>
			</td>
		</tr>
	</table>

</div>

  

</body>
</html>

Wie sich das verhält ist seltsam...

In meinem Startpost seht ihr ein Anhang. Dort werden 5 Zeilen gezeigt.

In der letzten Zeile, wo ID=23 ist, kann ich einen Wert einsetzen und abschicken.
DER wird in der Datenbank auch geändert. Bei den ersten 4 Zeilen allerdings nicht.


Ich bin echt ratlos.
 
Die 5 Zeilen stehen aber alle in ein und dem selben Formular..... und werden somit auch alle gemeinsam ans Update-Script gesendet. ;)
Wenn Du nun also nur die letzte Zeile updaten willst, musst Du im Update-Script erstmal überprüfen ob die Daten aus dem Formular identisch sind mit denen in der Datenbank.
Wenn Nein, dann wird das Update durchgeführt.
Wenn Ja, dann werden die entsprechenden Datensätze ausgelassen (alternativ kannst Du Dir auch anzeigen lassen welche Datensätze nicht geupdatet wurden).
Die Überprüfung findet wie auch das updaten in der while-Schleife statt.

Alternativ zur Überprüfung mit der Datenbank, könntest Du in der while-Schleife auch einfach abfragen ob $_POST['reihe']=="0" ist.
Auf jedenfall kommst Du um die Überprüfung nicht drum herum..... es sei denn Du lässt Dir zuvor nur die Datensätze ausgeben die Du auch ändern willst oder jeden Datensatz in ein eigenes Formular packst.

Du hast mir aber meine Frage nicht beantwortet.....
Wird die tarif_id mit einem auto_increment vergeben?
Denn wenn diese ID automatisch vergeben wird, macht es keinen Sinn sie in ein <input type="text"> Feld zu setzen.
Eine automatisch vergebene ID kann nicht (ohne weiteres) geändert bzw. erneut vergeben werden, da sie zur eindeutigen Identifizierung dient.
 
Ja, tarif_id ist auf auto_increment gesetzt.

---

Warum sollte ich nur die letzte Zeile updaten wollen? Ich möchte einfach ein UPDATE auf alle Felder, die dort ausgegeben sind, durchführen.
Es ist ja egal ob da im Nachinein dieselbe Zahl eingetragen wird.


Ich möchte echt nur jeden Wert aus reihe updaten.
 
Jetzt verwirrst Du mich aber..... Dein zuletzt geposteter Code hat ja praktisch keinerlei Ähnlichkeit mehr mit dem wie es auf dem Bild aussieht. :confused:

Wenn Du ein Update auf ALLEN Feldern des jeweiligen Datensatzes durchführen willst, dann musst Du auch alle Felder über das Formular übergeben.
Mehrere übergebene Datenfelder aus dem Formular trennst Du beim SET jeweils mit einem Komma.....
PHP:
SET `feld1` = 'bla', `feld2` = 'blub'.....
[edit]
Trotz allem fehlt dir die while-Schleife.
Ohne dem wird immer nur die letzte Zeile geupdatet.
[/edit]
 
Zuletzt bearbeitet:
Warum hat der keine Ähnlichkeit? Alles ist gleich.

Mir scheint du hast wirklich nicht verstanden was ich will.
 
Zurück