PHP ordnen Funktion einer Datenbank Ausgabe

dark-staple

Mitglied
Hallo Leute,
ich hab mal wieder ein Problem, eig. Mangelware bei mir aber naja.
Es geht darum ein Kunde von mir möchte seine Produkte ordnen können z.B.
Artikel an 12. Stelle soll an die 2. Stelle.
Also logisch dachte ich mir dafür müssen Stelle 2 - 11 um einen nach hinten rücken.
Aus 2 wird 3, aus 3 wird 4, aus 4 wird 5.....
Damit am Ende die 2. Stelle frei wird und dort das Produkt aus der 12. stelle hin kann.
Problem ist nur, wenn er Produkt 2 zu 3 macht das geht noch, aber dann habe ich 2 mal die 3 und dann macht er 2 mal die 3 zu einer 4....

2 zu 3 = aus der 2. Stelle wird die 3. Stelle
3 zu 4 = aus der 3. Stelle soll die 4. Stelle werden aber die ehemalige 2. Stelle ist ja auch zur 3. stelle geworden und somit gibt es 2-mal die 3. Stelle.

Mein Script bisher:
PHP:
if($_POST["ordnen"] != $datensatz["order"])
			{
				//größer als
				if($_POST["ordnen"] <= $datensatz["order"])
					{
						$i = $_POST["ordnen"];
						while($i != $datensatz["order"])
							{
								$i++;
								$mi = $i;
								$mi--;
								$update = mysql_query("UPDATE shop SET 'order' = '".$i."' WHERE 'order' = '".$mi."'");
							}
					}
			}

Mit freundlichen Grüßen
dark-staple
 
Zuletzt bearbeitet:
Sofern du es dir wirklich so kompliziert machen möchtest, schieb einfach mal statt von vorne nach hinten von hinten nach weiter hinten.

Leichter sollte es aber gehen, die Stärken deiner Datenbank auszunutzen:
SQL:
-- verschiebe alle Datensätze zwischen momentaner und Zielposition um eins nach hinten
UPDATE
	`shop`
SET
	`order` = `order` + 1
WHERE
	`order` BETWEEN {$_POST['ordnen']} AND {$datensatz['ordnen']}
;

-- aktualisiere zu verschiebenden Datensatz
UPDATE
	`shop`
SET
	`order` = {$_POST['ordnen']}
WHERE
	`id` = {$datensatz['id']}
;

Und bitte validiere und verifiziere deine Eingaben. Speziell wenn du sie einfach an / in den Querystring konkatenierst, sind deine Anwendung und die Datenbestände ein leichtes Ziel für Manipulationsversuche.
 
Vielen Dank maeTimmae,
auf die Lösung wäre ich nie gekommen...
Man lernt nie aus, danke nochmal.
Validierung der Eingaben kommt noch ;)

Meine Script am Ende:
PHP:
if(htmlspecialchars($_POST['ordnen']) != $datensatz["order"])
			{
				//größer als
				if(htmlspecialchars($_POST['ordnen']) <= $datensatz["order"])
					{
						//-- verschiebe alle Datensätze zwischen momentaner und Zielposition um eins nach hinten
						$update = mysql_query("UPDATE `shop` SET `order` = `order` +1 WHERE `order` BETWEEN '".htmlspecialchars($_POST['ordnen'])."' AND '".$datensatz['order']."'");
 
						//-- aktualisiere zu verschiebenden Datensatz
						$update = mysql_query("UPDATE `shop` SET `order` = '".htmlspecialchars($_POST['ordnen'])."' WHERE `id` = '".$datensatz['id']."'");
					} else {
						//-- verschiebe alle Datensätze zwischen momentaner und Zielposition um eins nach hinten
						$update = mysql_query("UPDATE `shop` SET `order` = `order` -1 WHERE `order` BETWEEN '".htmlspecialchars($_POST['ordnen'])."' AND '".$datensatz['order']."'");
 
						//-- aktualisiere zu verschiebenden Datensatz
						$update = mysql_query("UPDATE `shop` SET `order` = '".htmlspecialchars($_POST['ordnen'])."' WHERE `id` = '".$datensatz['id']."'");
					}
			}
Mit freundlichen Grüßen
dark-staple
 
Hi,

die Funktion htmlspecialchars() ist dazu gedacht, Zeichen mit spezieller Bedeutung in HTML zu maskieren, bzw. durch ihre Entitäten zu ersetzen. Dementsprechend wendet man sie bei der Ausgabe von Daten in ein HTML-Dokument an. In der Datenbank haben diese Entitäten nichts zu suchen. Wenn Du Strings aus Benutzereingaben sicher in einer Datenbankabfrage verwenden möchtest, wende [phpf]mysql_real_escape_string[/phpf] darauf an.
Merke: Behandle Daten entsprechend dem Kontext, in den Du sie überführen willst.

LG
 
Zurück