Avatar billede TiHs Nybegynder
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);
   
}
Avatar billede showsource Seniormester
25. maj 2007 - 09:23 #1
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();
Avatar billede TiHs Nybegynder
25. maj 2007 - 10:26 #2
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
Avatar billede showsource Seniormester
25. maj 2007 - 10:36 #3
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
Avatar billede TiHs Nybegynder
25. maj 2007 - 10:52 #4
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 ...
Avatar billede showsource Seniormester
25. maj 2007 - 10:56 #5
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);
Avatar billede showsource Seniormester
25. maj 2007 - 10:59 #6
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.
Avatar billede TiHs Nybegynder
25. maj 2007 - 11:07 #7
skal jeg sætte det direkte ind efter $result = $db->query($sql);
igen ?
Avatar billede showsource Seniormester
25. maj 2007 - 11:12 #8
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.
Avatar billede TiHs Nybegynder
25. maj 2007 - 11:28 #9
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" ?
Avatar billede showsource Seniormester
25. maj 2007 - 11:34 #10
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
Avatar billede showsource Seniormester
25. maj 2007 - 11:39 #11
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)
Avatar billede TiHs Nybegynder
25. maj 2007 - 11:48 #12
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 ...
Avatar billede showsource Seniormester
25. maj 2007 - 11:55 #13
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.
Avatar billede TiHs Nybegynder
25. maj 2007 - 12:07 #14
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 ?
Avatar billede TiHs Nybegynder
25. maj 2007 - 12:08 #15
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
Avatar billede TiHs Nybegynder
25. maj 2007 - 12:09 #16
så en if(lager =0)/*skrevet rigtigt selvfølgelig*/
$pris = 0;
$qty = 0;
og så bla bla bla
Avatar billede TiHs Nybegynder
25. maj 2007 - 12:19 #17
Nope ... tror jeg laver en omvej istedet .... prøver lige noget fidilihut .. men send bare et svar så du kan få point
Avatar billede showsource Seniormester
25. maj 2007 - 12:34 #18
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.
Avatar billede TiHs Nybegynder
06. oktober 2008 - 16:54 #19
OK
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester