06. maj 2007 - 21:21Der er
15 kommentarer og 1 løsning
sql query før action hvordan ?
Hej Eksperter
Har følgende tabel:
CREATE TABLE `toej2` ( `id` int(6) unsigned NOT NULL auto_increment, `del` varchar(100) NOT NULL default '', `pic` text NOT NULL, `maerke` varchar(100) NOT NULL default '', `model` text NOT NULL, `beskr` text NOT NULL, `str` text NOT NULL, `pris` decimal(18,2) NOT NULL default '0.00', `antal` decimal(10,0) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=28 ;
Jeg vil før nedenstående action 'add' gerne tjekke min tabel og kun udføre add HVIS jeg kan tjekke antal i min tabel ud fra det id jeg kommer med til siden. Antal skal så være > 0.
Her er min side med action:
<?php // Include MySQL class require_once('inc/mysql.class.php'); // Include database connection require_once('inc/global.inc.php'); // Include functions require_once('inc/functions.inc.php'); // Start the session session_start(); // Process actions $cart = $_SESSION['cart']; $action = $_GET['action']; switch ($action) {
/* vil kun udføre case 'add' hvis query større end nul */
case 'add': if ($cart) { $cart .= ','.$_GET['id']; } else { $cart = $_GET['id']; } break;
/* så koden skal vel ind i ovenstående et sted ? */
case 'delete': if ($cart) { $items = explode(',',$cart); $newcart = ''; foreach ($items as $item) { if ($_GET['id'] != $item) { if ($newcart != '') { $newcart .= ','.$item; } else { $newcart = $item; } } } $cart = $newcart; } break; case 'update': if ($cart) { $newcart = ''; foreach ($_POST as $key=>$value) { if (stristr($key,'qty')) { $id = str_replace('qty','',$key); $items = ($newcart != '') ? explode(',',$newcart) : explode(',',$cart); $newcart = ''; foreach ($items as $item) { if ($id != $item) { if ($newcart != '') { $newcart .= ','.$item; } else { $newcart = $item; } } } for ($i=1;$i<=$value;$i++) { if ($newcart != '') { $newcart .= ','.$id; } else { $newcart = $id; } } } } } $cart = $newcart; break; } $_SESSION['cart'] = $cart; header("location:" . $_SERVER['HTTP_REFERER']); ?>
case 'add': if(is_numeric($_GET['id'])) //Er ID et nummer? { $id = intval($_GET['id']); $query = mysql_query("SELECT id FROM toej2 WHERE antal > 0 WHERE id = $id LIMIT 1"); if(mysql_num_rows($query)==1) //Fandt vi varen og er der nogle på lager? { if ($cart) { $cart .= ','.$_GET['id']; } else { $cart = $_GET['id']; } } } break;
ID vælger jeg selv at sætte ind ja som varenummer. Den side jeg kommer fra har allerede valgt et bestemt id. Dette id refererer så til den linie i tabellen hvor jeg vil tjekke at denne linies antal er > 0 ... så hvis det du skrev er det den gør, så vil jeg da lige prøve det ....syntes bare du validerer på id samtidig ?
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /customers/timhs.dk/timhs.dk/httpd.www/cart/cart.php on line 19
Warning: Cannot modify header information - headers already sent by (output started at /customers/timhs.dk/timhs.dk/httpd.www/cart/cart.php:19) in /customers/timhs.dk/timhs.dk/httpd.www/cart/cart.php on line 76
Måske det ville være nemmere at gøre i selve forretningen hvor jeg henter de forskellige varer. Så skal den jo ikke tjekke i case add men bare tjekke i funktionen:
$sql = 'SELECT * FROM toej2 WHERE del = "Jeans" ORDER BY id'; $result = $db->query($sql); while ($row = $result->fetch()) {
/* men igen ... hvordan ? .. for at indsætte WHERE antal > 0 ORDER BY id vil den ikke bare tage ....
I Jakobs sql er der lige en smutter: $query = mysql_query("SELECT id FROM toej2 WHERE antal > 0 WHERE id = $id LIMIT 1"); Skal väre: $query = mysql_query("SELECT id FROM toej2 WHERE antal > 0 AND id = ". $id ." LIMIT 1");
Jeps ... nu smider den ikke varen i kurven hvis ikke der er antal større end nul... :o))
takker til jer begge.
Vender nok tilbage for jeg skal sidde og leget lidt med hvordan jeg gør det når man vil tjekke ud og accepterer bestillingen så jeg nedskriver antal i tabellen ud for de valgte varer ....
Lad os forestille følgende scenario. Vare1 - antal = 1. Kunde1 - tilføj Vare1 (er der en vare på lager? Ja, tilføj kurv) Kunde2 - tilføj Vare1 (er der en vare på lager? Ja, tilføj kurv)
De begge kan tilføje produktet, men kun 1 for så lov at acceptere.
Min cart.php tjekker nu fint med lager osv ... og jeg har sat den til at sige "-1" hvis man tilføjer ... Hvis jeg så deleter en var, hvordan sætter jeg den så til det ? .. ja altså hvor i case delete sætter jeg linien ind ??
switch ($action) { case 'add': if(is_numeric($_GET['id'])) //Er ID et nummer? { $id = intval($_GET['id']); $query = mysql_query("SELECT id FROM toej2 WHERE lager > 0 AND id = ".$id." LIMIT 1"); if(mysql_num_rows($query)==0) //Fandt vi varen og der er ingen på lager? { header( "location: ../minusvare.php" ); exit; }else{ if ($cart) { $cart .= ','.$_GET['id']; } else { $cart = $_GET['id']; } } } $query = mysql_query("UPDATE toej2 SET lager = lager-1 WHERE id = ".$id."");
break; case 'delete': if ($cart) { $items = explode(',',$cart); $newcart = ''; foreach ($items as $item) { if ($_GET['id'] != $item) { if ($newcart != '') { $newcart .= ','.$item; } else { $newcart = $item; } } } $cart = $newcart; } break;
Og kan jeg på en eller anden måde på siderne der kører denne sæsion sige at hvis man bryder sæssionen så skal den også smide "+1" tilbage i lager igen på de id'er man har i sin kurv ?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.