24. maj 2007 - 17:42
Der er
18 kommentarer og 1 løsning
Tjek tabel i en function()
Hej eksperter Jeg mangler lige at tjekke min tabel før jeg vil udføre en function. Jeg vil gerne have en: $query = mysql_query("SELECT * FROM toej2 WHERE lager > 0 AND id = ".$id." LIMIT 1"); og så få en if(mysql_num_rows($query)==0) ind så jeg kan lave en echo hvis query ==0 og eller udføre denne function normalt hvis den ikke giver 0. Her er min function showCart() function showCart() { global $db; $cart = $_SESSION['cart']; if ($cart) { $items = explode(',',$cart); $contents = array(); foreach ($items as $item) { $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1; } $output[] = '<form action="cart/cart.php?action=update" method="post" id="cart">'; $output[] = '<table border=1 cellspacing=0 borderColor=black>'; foreach ($contents as $id=>$qty) { $sql = 'SELECT * FROM toej2 WHERE id = '.$id.''; $result = $db->query($sql); $row = $result->fetch(); extract($row); $output[] = '<tr>'; $output[] = '<td><a href="cart/cart.php?action=delete&id='.$id.'&qty='.$qty.'" class="r"> <img src="../../indkoebskurv2.gif" border="0"></a></td>'; $output[] = '<td width=50px><p align="center" class="style12">'.$del.'</p></td>'; $output[] = '<td width=150px><p class="style12">Mærke:<br> '.$maerke.'</p></td>'; $output[] = '<td width=100px><p class="style12">Model:<br> '.$model.'</p></td>'; $output[] = '<td width=70px><p class="style12">Størrelse:<br> '.$str.'</p></td>'; $output[] = '<td width=90px><p class="style12">Kr '.number_format($pris, 2, ",", ".").'</p></td>'; $output[] = '<td width=70px><p class="style12">Antal: '.$qty.'</p></td>'; $output[] = '<td width=110px><p class="style12">Kr '.number_format($pris * $qty, 2, ",", ".").'</p></td>'; $total += $pris * $qty; $output[] = '</tr>'; } $output[] = '</table>'; $output[] = '<br><p class="style12">I alt: <strong>Kr: '.number_format($total, 2, ",", ".").'</strong></p>'; $output[] = '</form>'; $output[] = '<FORM><INPUT TYPE="button" VALUE="Tilbage" onClick="history.go(-1);return true;"></FORM>'; } else { $output[] = '<p class="style12">Indkøbskurven er tom.</p><br><FORM><INPUT TYPE="button" VALUE="Tilbage" onClick="history.go(-1);return true;"></FORM>'; } return join('',$output); }
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
Det må vel være noget med: $result = $db->query($sql); if(mysql_num_rows($result) < 1) { return "Ingen rows fundet"; } // resten af script ......... $row = $result->fetch();
Den vil slet ikke godtage mysql_num_rows Men hvis jeg gør sådan her: if(($result) < 1) { return "Ingen rows fundet"; exit; } Så gør den næsten det den skal. Men den skriver så følgende fejl: Warning: extract() [function.extract]: First argument should be an array in /customers/timhs.dk/timhs.dk/httpd.www/cart/inc/functions.inc.php on line 36
jahh, det er jo så nok måden du udfører query på, ( mysql_num_rows ) Men når du skriver exit; burde scriptet jo stoppe? Altså ikke gå videre til extract
Det ville jeg jo også mene den skulle ... men gør det ikke ...
Function showCart() ligger på en side der ser sådan
her ud:
<?php
// Include MySQL class
require_once('cart/inc/mysql.class.php');
// Include database connection
require_once('cart/inc/global.inc.php');
// Include functions
require_once('cart/inc/functions.inc.php');
// Start the session
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"
http://www.w3.org/TR/html4/loose.dtd"> <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>LUXundPUNK - Din indkøbskurv</title>
<link rel="stylesheet" type="text/css" href="mystyle2.css" />
<!--[if IE]>
<link rel="stylesheet" type="text/css" href="mystyle.css" />
<![endif]-->
</head>
<body>
<div id="home2">
<div id="lpshop">
<p class="style11">Indkøbskurv</p>
</div>
<div id="del">
<?php
echo showCart();
?>
<form action="sluthandel.php" method="submit"><button type="submit">Betal/Afsend ordre</button></form>
</div>
</div>
</body>
</html>
hmmm.... forstår det ikke ...
hmm, ved ikke, men du burde kunne noget a'la $result = $db->query($sql); if(false == $row = $result->fetch()) { return"Ingen rows fundet!"; } extract($row);
og du behøver iøvrigt ikke at lave et array for output $output = '<form action="cart/cart.php?action=update" method="post" id="cart">'; $output .= '<table border=1 cellspacing=0 borderColor=black>'; $output .='<tr>'; o.s.v.
skal jeg sætte det direkte ind efter $result = $db->query($sql); igen ?
jahh, eller måske: $result = $db->query($sql); $row = $result->fetch() if(!is_array($row)) { return"Ingen rows fundet!"; } extract($row); ved ikke lige hvordan din query udføres.
Perfekt ... virker med: $sql = 'SELECT * FROM toej2 WHERE id = '.$id.' AND lager > 0'; $result = $db->query($sql); $row = $result->fetch(); if(!is_array($row)) { return"Ingen rows fundet!"; } extract($row); tak for hjælpen ... Kan jeg iøvrigt sætte en header ind istedet for "return" ?
nix, så skal du bruge javascript.
Omend du kan bruge ob_start() for at sætte en header midt i doc.
Men det er nu noget skrammel...
http://dk.php.net/ob_start
Og så ved jeg ikke lige, men i stedet for at lave et kald til db for hver $contents kan du bruge $mykeys = array_keys($contents); $sql = "SELECT * FROM toej2 WHERE id IN (". implode(",", $mykeys) .")"; mem det er jo lidt anden snak! :O)
ja det kan jeg godt se ... Nuværende giver faktisk et problem. Hvis jeg har to vare i min kurv, og det kun lige er den ene vare der er udgået fordi en anden person på samme tid lige har handlet den sidste vare, så giver den jo fejlsvar når man vil vise kurven: Ingen rows fundet .. selvom der stadig er den ene gyldige vare i kurven ...
Så kunne mit ex. med en query vist være fint at bruge? Men det kræver jo nok en del ændring af dit script.
ja ... en lidt stor ændring som jeg nok ikke lige kan håndtere. Men kunne jeg istedet for denne: if(!is_array($row)) { return"Varen lige udsolgt!"; } lave en if lager = 0 i den den får ud fra id, så skal den sætte pris samt antal til o i sessionen ?
altså så den automatisk laver disse to: $output[] = '<td width=90px><p class="style12">Kr '.number_format($pris, 2, ",", ".").'</p></td>'; $output[] = '<td width=70px><p class="style12">Antal: '.$qty.'</p></td>'; til 0
så en if(lager =0)/*skrevet rigtigt selvfølgelig*/ $pris = 0; $qty = 0; og så bla bla bla
Nope ... tror jeg laver en omvej istedet .... prøver lige noget fidilihut .. men send bare et svar så du kan få point
Total utestet, men måske en ide til ændring: ( aner intet om din db opbygning m.m. ) function newCart() { global $db; if (isset($_SESSION['cart'])) { $items = explode(',', $_SESSION['cart']); $contents = array(); foreach ($items as $item) { $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1; } $content_key = array_keys($contents); $sql = "SELECT * FROM toej2 WHERE id IN (". implode(",", $content_key) .")"; $result = mysql_query($sql) or die (mysql_error()); if(mysql_num_rows($result) == 0) { return "Ingen data fundet"; } $output = '<form action="cart/cart.php?action=update" method="post" id="cart">'; $output .= '<table border=1 cellspacing=0 borderColor=black>'; $vareid = array(); $total = 0; while($row = mysql_fetch_assoc($result)) { extract($row); $vareid[] = $id; $output .= '<tr>'; $output .= '<td><a href="cart/cart.php?action=delete&id='.$id.'&qty='.$qty" class="r"> <img src="../../indkoebskurv2.gif" border="0"></a></td>'; $output .= '<td width=50px><p align="center" class="style12">'.$del.'</p></td>'; $output .= '<td width=150px><p class="style12">Mærke:<br> '.$maerke.'</p></td>'; $output .= '<td width=100px><p class="style12">Model:<br> '.$model.'</p></td>'; $output .= '<td width=70px><p class="style12">Størrelse:<br> '.$str.'</p></td>'; $output .= '<td width=90px><p class="style12">Kr '.number_format($pris, 2, ",", ".").'</p></td>'; $output .= '<td width=70px><p class="style12">Antal: '.$qty.'</p></td>'; $output .= '<td width=110px><p class="style12">Kr '.number_format($pris * $qty, 2, ",", ".").'</p></td>'; $total += $pris * $qty; $output .= '</tr>'; } $output .= '</table>'; $output .= '<br><p class="style12">I alt: <strong>Kr: '.number_format($total, 2, ",", ".").'</strong></p>'; $output .= '</form>'; $output .= '<FORM><INPUT TYPE="button" VALUE="Tilbage" onClick="history.go(-1);return true;"></FORM>'; mysql_free_result($result); $koebte = array_diff($content_key, $vareid); if(count($koebte) != 0) { $output .= "Varer som desværre lige er blevet solgt.."; // Udsolgt varennavn m.m. skal så findes....... } } else { $output = '<p class="style12">Indkøbskurven er tom.</p><br><FORM><INPUT TYPE="button" VALUE="Tilbage" onClick="history.go(-1);return true;"></FORM>'; } return $output; } Og ingen point, ellers tak.
06. oktober 2008 - 16:54
#19
OK
Vi tilbyder markedets bedste kurser inden for webudvikling