PHP - przesuwanie elementów w bazie danych

Witam!

Chciałem napisać skrypt który będzie przesuwał elementy w bazie danych. Tak więc mamy tabelę “menu” i w mniej pole “position” ale mój skrypt nie bardzo chce chodzić:

function up($id) {

								$query="SELECT * FROM menu WHERE id='".$id."' LIMIT 1";

								$result=mysql_query($query);

								$pozycja = mysql_result($result,0,"position");

								$query="SELECT * FROM menu WHERE position<'".$id."' ORDER BY position DESC LIMIT 1";

								$result=mysql_query($query);

								$ilosc = mysql_num_rows($result);

								if($ilosc == 0) {

									error("Nie można przesunąć!");

									show_form();

									show_menu();

								} else {

									$id2 = mysql_result($result,0,"id");

									$pozycja2 = mysql_result($result,0,"position");

									$query = "UPDATE menu SET `position`=".$pozycja2." WHERE id=".$id;

									$result=mysql_query($query);

									$query = "UPDATE menu SET `position`=".$pozycja." WHERE id=".$id2;

									$result=mysql_query($query);

									ok("Przesunięto!");

									show_form();

									show_menu();

									}

							}



							function down() {

								$query="SELECT * FROM menu WHERE id='".addslashes($_GET['id'])."' LIMIT 1";

								$result=mysql_query($query);

								$pozycja = mysql_result($result,0,"position");

								$query="SELECT * FROM menu WHERE position>'".$pozycja."' ORDER BY position ASC LIMIT 1";

								$result=mysql_query($query);

								$ilosc = mysql_num_rows($result);

								if($ilosc == 0) {

									error("Nie można przesunąć!");

									show_form();

									show_menu();

								} else {

									$id = mysql_result($result,0,"id");

									up($id);

									}

							}

I wywołanie funkcji:

if(addslashes($_GET['action']) == "up") up(addslashes($_GET['id']));

												  else if(addslashes($_GET['action']) == "down") down();

Proszę o pomoc.

$query = "UPDATE menu SET `position`=".$pozycja2." WHERE id=".$id;

:stuck_out_tongue:

Wiem,że wyglada zabawnie ale wolałbym wiedzieć co z tym nie tak :slight_smile:

$query = "UPDATE menu SET position='$pozycja2' WHERE id='$id'"; [/code]

To nie wyglądało śmiesznie tylko to był jeden wielki błąd. Jak przypisujesz do zmiennej to nie możesz korzystać w środku z cudzysłowia* bo wtedy przerywasz ciąg i dajesz złe zapytanie.

Btw

[code]$query=“SELECT * FROM menu WHERE position<’”.$id."’ ORDER BY position DESC LIMIT 1";
:stuck_out_tongue:

$query="SELECT * FROM menu WHERE position<'$id' ORDER BY position DESC LIMIT 1"; [/code]

Tak masz praktycznie wszędzie. Przy każdym query

Ta zmiana nic nie poprawiło, dalej działa jak działało czyli albo nie zmienia pozycji albo zmienia zupełnie inaczej niż powinno

Ogólnie przy pobieraniu wg cb ja zrobiłbym coś w stylu.

$idm=$id--;$idp=$id++;$query=mysql_query("UPDATE menu SET id='0' WHERE id='$id'")$query=mysql_query("UPDATE menu SET id='$idm' WHERE id='$idp'")$query=mysql_query("UPDATE menu SET id='$idp' WHERE id='0'") [/code]



Czyli wymieniamy id tego wyżej i tego co chcemy dać na jego miejsce. Ogólnie wg mnie takie coś jak pozycja mija się z celem. Lecz ja nie mam takiego doświadczenia w mysql bym mógł powiedzieć, że to akurat będzie działać ;]

Id wolałbym nie zmieniać, tylko jednak wymieniać ich pozycje

Dodane 26.04.2011 (Wt) 15:19

Dobra juz sobie poradziłem. Zamiast:

$query="SELECT * FROM menu WHERE position<'".$id."' ORDER BY position DESC LIMIT 1";

Miałobyć:

$query="SELECT * FROM menu WHERE position<'".$pozycja."' ORDER BY position DESC LIMIT 1";

Głupi błąd

Jeśli chcesz zmieniać pozycję, musisz sobie określić jakiś format którym to zrobisz, mając np robisz to na takiej samej zasadzie jak ja ci podałem.

Ja bym spróbował coś takiego:

$zm=mysql_query("SELECT 'position' FROM menu WHERE id='$id'");$zm2=$zm+1;mysql_query("UPDATE menu SET position='$zm2' WHERE position='$zm'") [/code]