Ik heb een SQL tabel met daarin een kolom 'id', een kolom 'title' en een kolom 'text'. De kolom met 'id' is een auto-incrementing primary key. Met het Update commando probeer ik 2 'id' met elkaar te wisselen zodat een gebruiker straks zelf een volgorde kan bepalen.
Die krijgt een form te zien met daarin de invulvelden 'swap1' en 'swap 2'. Hierin kan de gebruiker invullen welke twee 'id' er gewisseld moeten worden. In dit script...
$query = "UPDATE content SET id = $swap4 WHERE id = $swap1";
mysql_query($query) or die ("Zoekopdracht is mislukt: deel1");
$query = "UPDATE content SET id = $swap3 WHERE id = $swap2";
mysql_query($query) or die ("Zoekopdracht is mislukt: deel2");
?>
... krijg ik steeds een foutmelding, wellicht omdat 'SET id = $swap3' incorrecte syntax is. Moet ik dat fetchen? En hoe doe ik dat dan? Het idee van bovenstaand script is:
> Bewaar de waarden van 1 + 2 als 3 + 4
> Geef 1 de waarde van 3
> Geef 2 de waarde van 4
Kun je niet gewoon beter een query opbouwen waarbij de gebruiker de volgorde selecteert? en deze vervolgens in een cookie stoppen zodat hij zijn volgorde behoudt.
Met de 'gebruiker' bedoel ik in dit geval de Admin, die moet kunnen bepalen in welke volgorde de items worden weergegeven. Vandaar dat de 'bepalende factor' in de database moet zijn opgeslagen.
De 1e die je noemde is de goede.. heb het ook aangepast in de post hiervoor. Maar wat het probleem zou kunnen zijn is dat je dan dubbele id's krijgt, terwijl een id altijd uniek moet zijn.
verander:
'or die ("Zoekopdracht is mislukt: deel1");' eens in:
'or trigger_error(mysql_error());'
En zo ook voor je 2e zoekopdracht. Dan zou je moeten zien (in het engels, dat wel) wat er fout gaat.
Bedankt voor de syntax! Ik heb het nog niet werkende, maar bedoel je hierboven dat er iets verkeerd zou kunnen gaan door de volgende logica:
De inhoud van swap1 sla ik ff op in swap3, die van swap2 sla ik ff op in swap4. Voordat ik de inhoud van swap4 in swap1 plaats, en die van swap3 in swap2 (en ze dus omwissel) zou ik de id's in de tabel eerst even moeten vullen met een uniek nummer. Want anders zou er tussen de 2 UPDATE queries een moment zijn waarop 2 id's gelijk zijn, en dat kan niet.
Klopt deze logica? En kan ik die id dan ook gewoon tijdelijk leeg maken? Alvast bedankt voor al jullie tips trouwens, ik heb er al meerdere andere scripts mee aan de gang gekregen. Leerzame webstek hier! :-)
BLIJF MET JE VINGERS VAN DE KOLOM MET DE AUTO_INCREMENT AF!
Of je moet echt wanhopig op zoek zijn naar grote problemen.
Een kolom waarop auto_increment staat, gebruik je uitsluitend om een uniek record te herkennen. Het heeft helemaal niets met ouderdom of sortering te maken, ga het daar dan ook niet voor gebruiken.
Houd altijd in gedachten dat een query op ieder ongewenst moment kan mislukken. Wanneer je dan met de auto_increment loopt te kloten, kun je daarmee eenvoudig de hele database om zeep helpen.
Verder mag ik hopen dat je de innoDB-engine van MySQL gebruikt en dat je de queries in een TRANSACTION zet. Wanneer dan een query mislukt, kun je de vorige query ongedaan maken. Wederom om jouw database te redden van de ondergang...
Whoooo dat gaat me allemaal eventjes boven mijn pet! Maar je waarschuwing hierboven betreffende de auto_increment is zeker wel nuttig. Ik gebruikte het dus wel zo, omdat ik merkte dat als je een nieuwe row maakt dat-ie dan netjes onderaan kwam te staan. Die auto_increment kan er dus uit.
Verder mag ik hopen dat je mij eens verteld wat de innoDB-engine van MySQL is en hoe je de queries in een TRANSACTION zet...! ;-)