Oké, ik heb gekozen om de waarde simpel te verhogen met 100.. dit onderwerp is voor mij nu al lastig genoeg.
Ik heb een toolman menu in DHTML gedownload, wanneer je een menuitem sleept (drag and drop) dan wordt aan het einde van het slepen (het loslaten van je muis) de hele menu geupdate, dat is althans de bedoeling.
De volgende code gebruik ik via ajax:
[url]http://plaatscode.be/51666/[/url]
Hij gooit er netjes 100 bij op maar er is iets mis met de volgorde o.i.d.
Stel ik heb:
ids = 1,2,3 en waardes = Home,Chicks,Contact
Als ik dan Home naar Contact sleep en ik alert mijn query.. dan krijg ik:
Ten eerste haal je met MAX() de hoogste waarde op, je doet deze waarde+1 en nu heb je je niet bestaande id.
Vervolgens ga je van home en contact de ID's ophalen.
Je gaat nu de home (bijvoorbeeld) op de niet bestaande ID zetten.
Vervolgens zet je contact op de ID van home en de ID van home zet je op die van contact.
PHP.net: mysql_insert_id
mysql_insert_id — Get the ID generated from the previous INSERT operation
Of bedoel je de LAST_INSERT_ID functie van MySQL zelf?
Die doet eigenlijk precies hetzelfde als de MAX(id) die ik gebruik...
Je moet er bij allebei nog 1 optellen.
performantie gericht gaat last_insert_id volgens mij beter zijn; bij MAX ga je alle waardes nog moeten vergelijken en moet mysql nog rekenwerk verrichten...
Ik had het trouwens over de PHP functie ja... Daarom dat ik naar Mysql.com verwijs (had het dus wel degelijk over de mysql functie )
Oké, ik heb gekozen om de waarde simpel te verhogen met 100.. dit onderwerp is voor mij nu al lastig genoeg.
Ik heb een toolman menu in DHTML gedownload, wanneer je een menuitem sleept (drag and drop) dan wordt aan het einde van het slepen (het loslaten van je muis) de hele menu geupdate, dat is althans de bedoeling.
De volgende code gebruik ik via ajax:
[url]http://plaatscode.be/51666/[/url]
Hij gooit er netjes 100 bij op maar er is iets mis met de volgorde o.i.d.
Stel ik heb:
ids = 1,2,3 en waardes = Home,Chicks,Contact
Als ik dan Home naar Contact sleep en ik alert mijn query.. dan krijg ik:
1(Home) wordt 102, dat moet dus 103 zijn omdat dat later weer -100 gedaan wordt.
Dus er klopt nog iets niet, is er iemand die me hierbij kan helpen? Als er nadere informatie nodig is dan zeg je het maar.
Een publiekelijk voorbeeld kan ik niet online zetten omdat de database gewoon toegankelijk is, voor een voorbeeld kan je me een PM sturen.
// Update:
heb veel volgordes proberen aan te passen, maar nog steeds doet hij het niet.
Als ik 2 menu items gebruik doet hij perfect.
Als ik 3 menu items gebruik dan werkt hij niet goed. Wanneer home van de 1e naar de 2e plek gaat, is er geen probleem. Wanneer home van de 1e naar de 3e plek gaat, dan gaat het mis.
<?php
$pos = ''; // Huidige positie
$posTemp = ''; // Tijdelijke positie
$posNew = ''; // Nieuwe positie
/*
Dit moet er gebeuren wanneer 2 wordt versleept tussen 6 en 7 toch?
1 1
2 3
3 4
4 5
5 6
6 2
7 7
8 8
*/
if($pos > $posNew)
{
mysql_query("UPDATE tabel SET position=".$posTemp." WHERE position=".$pos."");
mysql_query("UPDATE tabel SET position=position+1 WHERE position<".$pos." AND position>".$posNew."");
mysql_query("UPDATE tabel SET position=".$posNew." WHERE position=".$posTemp."");
}
elseif($pos < $posNew)
{
mysql_query("UPDATE tabel SET position=".$posTemp." WHERE position=".$pos."");
mysql_query("UPDATE tabel SET position=position-1 WHERE position<".$pos." AND position>".$posNew."");
mysql_query("UPDATE tabel SET position=".$posNew." WHERE position=".$posTemp."");
}
?>
<?php
$pos='';// Huidige positie
$posTemp='';// Tijdelijke positie
$posNew='';// Nieuwe positie
/*
Dit moet er gebeuren wanneer 2 wordt versleept tussen 6 en 7 toch?
1 1
2 3
3 4
4 5
5 6
6 2
7 7
8 8
*/
if($pos>$posNew)
{
mysql_query("UPDATE tabel SET position=".$posTemp." WHERE position=".$pos."");
mysql_query("UPDATE tabel SET position=position+1 WHERE position<".$pos." AND position>".$posNew."");
mysql_query("UPDATE tabel SET position=".$posNew." WHERE position=".$posTemp."");
}
elseif($pos<$posNew)
{
mysql_query("UPDATE tabel SET position=".$posTemp." WHERE position=".$pos."");
mysql_query("UPDATE tabel SET position=position-1 WHERE position<".$pos." AND position>".$posNew."");
mysql_query("UPDATE tabel SET position=".$posNew." WHERE position=".$posTemp."");
}
?>
Code is natuurlijk niet helemaal mooi met die ."" etc. Het gaat op dit moment alleen om de denkwijze.
Ja tot dat 'snap' gedeelte snap ik het nog, je voorbeeld is ook juist.
Over 1 á 2 uur heb ik toegang tot m'n webhost en zal ik het direct proberen.. heb het na ongeveer 5 keer doorlezen eindelijk een beetje door.
Is er verder geen lek te zien in de code? Want hij krijgt van javascript eigenlijk de id's van nu al mee, dus eigenlijk zijn alle 3 de variabelen boven aan de pagina al bekend.
Wat ik wel jammer vind van je voorbeeld is dat je in je comments het hebt over 8 buttons en in je code maar 3. Als je weet waar je het over hebt dan is dat wel te snappen maar misschien was het beter geweest een gelijk aantal te nemen, maar mij hoor je niet klagen met zo een antwoord
UHmz je bedoelt dat ik in mijn voorbeeld 1 t/m 8 gebruikt en maar 3 queries heb?
De eerste query die geeft het verplaatste id een tijdelijke positie.
De middelste query die verschuift alle posities tussen de verplaatste positie en de nieuwe positie.
De laatste query die geeft het verplaatste id zijn nieuwe positie.
Ik krijg de waardes verkeerd door van mijn javascript.
Die javascript haalt alle li tag's op en gooit ze gescheiden met een komma naast elkaar. Deze stuurt hij via php dan door, ik denk dat ze in php goed worden verwerkt.
//edit:
Ik kreeg de waarden niet goed door vanaf javascript, nu krijg ik ze wel door maar op de verkeerde manier.
Ik krijg het volgende lijstje terug:
Oud:(voordat ik de drag and drop actie deed)
oudid: 1(Home)
oudid: 2(Downloads)
oudid: 3(Contact)
Nieuw:(nadat ik mijn drag and drop actie deed)
nieuwid: 2(Downloads)
nieuwid: 3(Contact)
nieuwid: 1(Home)
Maar vergeet niet dat ik ze zo terug krijg:
Oud: 1|2|3
Nieuw: 2|3|1
De volgordes kloppen wel maar ik kan niet zeggen:
update menu set id=oudid where id=nieuwid.
Hoe krijg ik nu wel de goede waarden terug?
(Dit probleem is van PHP naar JS gegaan, 't zou mooi zijn als dit kan worden aangepast)