Gå til innhold

Problemer med manuel listing av produkter


Anbefalte innlegg

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 :p

 

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 av Carfreak
Lenke til kommentar
Videoannonse
Annonse

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? :p

 

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 av gnab
Lenke til kommentar

$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 av Nazgul
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...