Carfreak Skrevet 23. april 2006 Del Skrevet 23. april 2006 (endret) Hei Jeg driver å lager en webshop, da ønsket kunden å ha manuel flytting av produkter i listingen av alle produktene. Jeg har laget alle spørringer o.l, og de skal i teorien fungere, men det gjør det ikke Slik ser de ut: Den som flytter produkter ned: <?php $query1 = "UPDATE `shop_products` SET place = place+1 WHERE place = $place AND cat_id = '$cat_id' LIMIT 1"; $query2 = "UPDATE `shop_products` SET place = place-1 WHERE place = $place+1 AND cat_id = '$cat_id' LIMIT 1"; ?> Den som flytter produkter opp: <?php $query1 = "UPDATE `shop_products` SET place = place-1 WHERE place = $place AND cat_id = '$cat_id' LIMIT 1"; $query2 = "UPDATE `shop_products` SET place = place+1 WHERE place = $place-1 AND cat_id = '$cat_id' LIMIT 1"; ?> Her er den komplette koden: http://www.pastebin.the-cosmic.net/129-nei Og her er tabell strukturen: http://www.pastebin.the-cosmic.net/140 For å se det i funksjon kan dere som har passord gå hit: http://din-webhost.no-ip.info/privat/webshop/?mod=Admin Mens dere som ikke har må desverre ta kontakt med meg på PM. Det er desverre noen som ikke klarer å lavære å ødelegge. Håper noen kloke hoder kan hjelpe meg, jeg kommer ikke lenger hvertfall. Er det noe dere lurer på/trenger, bare til å spørre - dere skal få det dere trenger På forhånd, takk. Endret 23. april 2006 av Carfreak Lenke til kommentar
gnab Skrevet 23. april 2006 Del Skrevet 23. april 2006 (endret) Det som skjer er jo at du flytter elementet du finner på posisjon n til n+1 og deretter elementet du finner på posisjon n+1 til n, altså flytter du (som du sikkert har erfart) et og samme element først opp, og så ned igjen. Når du flytter et element ned (eller opp) vil det etter den første spørringen være to elementer med samme plassering. Når du så i den andre spørringen egentlig vil flytten opp (eller ned) det andre elementet, har du ingen garanti for at du får flyttet nettopp dette elementet og ikke det du akkurat har flyttet ned (eller opp).. Er du med? Jeg foreslår at du først av alt henter ut id-en på elementet du vil flytte i den andre spørringen, slik at du kan identifisere dette utfra id-en fremfor plasseringen når det skal flyttes, da denne er tvetydig og ikke til å stole på. Altså, når du skal flytte et element opp: - Hent id for element som skal flyttes opp (SELECT id ... WHERE place = $place) - Flytt ned element som nå er "oppe" (query1: som før) - Flytt opp element som nå er "nede" (query2: UPDATE ... WHERE id = $id) og tilsvarende når du skal flytte et element ned. (Har utelatt noe av spørringene for å få det mer oversiktlig.) Nå kan du skille mellom de to elementene som har samme plassering, og dermed flytte rett element opp (eller ned).. Endret 23. april 2006 av gnab Lenke til kommentar
Carfreak Skrevet 23. april 2006 Forfatter Del Skrevet 23. april 2006 (endret) Tusen hjerlig takk for svar gnab! Det der hørtes veldig logisk ut, egentlig(etter at jeg hadde lest ca 5 ganger ). Dette skal testes Igjen, tusen takk! Endret 23. april 2006 av Carfreak Lenke til kommentar
Carfreak Skrevet 23. april 2006 Forfatter Del Skrevet 23. april 2006 Evig stor takk til deg gnab! Jeg ahr slitt med dette siden fredag, så tar det deg to minutter å komme med et svar, så funker det Fytti! Jeg bare bytta om plassen på mysql queryene, så funka det fjell! Tusen tusen takk! Lenke til kommentar
Carfreak Skrevet 23. april 2006 Forfatter Del Skrevet 23. april 2006 Hmm. Det skjedde noe rart, det funker bare innimellom, men oftere enn tideligere ihvertfall Kunnde du endret koden slik du ville gjort? Her er koden jeg har nå: http://www.pastebin.the-cosmic.net/141 Takker Lenke til kommentar
Peter Skrevet 24. april 2006 Del Skrevet 24. april 2006 (endret) $query1 = "UPDATE `shop_products` SET place = place+1 WHERE place = $place AND cat_id = '$cat_id' LIMIT 1"; $query2 = "UPDATE `shop_products` SET place = place-1 WHERE place = $place+1 AND cat_id = '$cat_id' LIMIT 1"; if( mysql_query($query2) && mysql_query($query1) ) Det her kan da ikke funke? Her er slik jeg ville gjort det, utifra koden din. Mer optimalt ville jeg egentlig ha fått produkt-id som argument i funksjonen moveLine, i stedet for å hente den ut på den måten jeg har gjort her. (Dette er for linje 239 og 240 fra http://www.pastebin.the-cosmic.net/141 , det samme må gjøres på linje 263 og 264, med små endringer i UPDATE) $prod_1 = mysql_result(mysql_query('SELECT id FROM shop_products WHERE place = '.$place." AND cat_id = '".$cat_id."'"), 0); $prod_2 = mysql_result(mysql_query('SELECT id FROM shop_products WHERE place = '.($place+1)." AND cat_id = '".$cat_id."'"), 0); $query_1 = 'UPDATE shop_products SET place = place+1 WHERE id = '.$prod_1; $query_2 = 'UPDATE shop_products SET place = place-1 WHERE id='.$prod_2; if(mysql_query($query_1) && mysql_query($query_2)) { echo 'yay!'; } (med forbehold om skrivefeil) Endret 24. april 2006 av Nazgul Lenke til kommentar
Carfreak Skrevet 24. april 2006 Forfatter Del Skrevet 24. april 2006 Tusen takk Fikk løst det sent i går kveld, og det var akkurat slik Tusen takk for begge svar. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå