Swappen van ID's
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...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$swap3 = $swap1;
$swap4 = $swap2;
echo"swap 3 = $swap3<br>";
echo"swap 4 = $swap4<br>";
$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");
?>
$swap3 = $swap1;
$swap4 = $swap2;
echo"swap 3 = $swap3<br>";
echo"swap 4 = $swap4<br>";
$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
Gewijzigd op 01/01/1970 01:00:00 door Frans van Berendonk
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$swap3 = $swap1;
$swap4 = $swap2;
echo"swap 3 = $swap3<br>";
echo"swap 4 = $swap4<br>";
$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");
?>
$swap3 = $swap1;
$swap4 = $swap2;
echo"swap 3 = $swap3<br>";
echo"swap 4 = $swap4<br>";
$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");
?>
Edit:
foutje :S:S
foutje :S:S
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
Ik blijf foutmeldingen krijgen... ik zie in de post hierboven trouwens een verschil in de twee commano's: ... welke is de goede syntax?
WHERE id = ".$swap1;
WHERE id = ."$swap2
Gewijzigd op 01/01/1970 01:00:00 door Frans van Berendonk
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.
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! :-)
Maak een kolom aan met de naam volgorde, en wijzig daar alles in.
Je wilt bijvoorbeeld id 2 en 3 omdraaien.
Dus je update id 2 naar 3
En daarna 3 naar 2. Welke van de twee id's met nummer 3 moet je dan hebben?
Oplossing:
Maak een extra veld aan in de tabel en zet daar het nummer van de volgorde in zodat je ORDER BY heel simpel kan gebruiken.
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...
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...! ;-)
Gewijzigd op 01/01/1970 01:00:00 door Frans van Berendonk
Quote:
Die auto_increment kan er dus uit.
NEE zeker niet eruithalen!
je moet ziezo een ID geven aan elke row. Hier baseer je je sleutel van je tabel op. Anders zal je database op een gegeven moment ook weer in elkaar lopen.
dus alleen een kolom toevoegen zoals al eerder vermeld, verder alles met rust laten.
Quote:
Helaas, dat ga ik niet voor je doen, dat mag je zelf uitzoeken. Ik wil je wel even een zetje in de juiste richting geven: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...! ;-)
Wikipedia
MySQL-handleiding
Succes!
Ps. innoDB is de enige engine van MySQL die (enigzins) als relationele database bruikbaar is. De rest is volkomen onbetrouwbaar en mag de naam database (als in DBMS) eigenlijk niet hebben. Tip: Gebruik PostgreSQL, dat werkt vele malen beter en vooral veiliger.
@Frank: Heb je soms aandelen bij PostgreSQL......LoL ;-))
Tja en verder... mijn probleem is nog steeds niet opgelost, ik vind PHP inmiddels uitermate frustrerend en omslachtig (vergeleken bij ActionScript) om zelf te schrijven. Ik heb na uren klooien geen zin meer om me hier nog verder in te verdiepen.
Ik ben best leergierig, maar het is voor ons als bedrijf de moeite gewoon niet waard om zelf te gaan zitten prutsen, als dit al 100 keer door een ander (met meer kennis) verzonnen is. Ik installeer Joomla wel, dan kan ik tenminste meteen aan de slag met het ontwerp (CSS) zonder me druk te hoeven maken over een om zeep te helpen database.
Gewijzigd op 01/01/1970 01:00:00 door Frans van Berendonk