SQL probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Johan Boerema

Johan Boerema

14/04/2006 22:09:00
Quote Anchor link
Fatal error: Cannot use object of type mysqli_result as array in /usr/home/deb1236n2/domains/diba13.nl/public_html/diba_cart.php on line 164

Deze foutmelding krijg ik bij de volgende code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
                    $totaalaantal
= $_SESSION['cart']->getAantal();
                                                            
                    //database openen via user defined function
                    $db = safe_db_open($host, $gebruiker, $wachtwoord, $database);

                    // Openen geslaagd, query opstellen en uitvoeren
                    $query = "SELECT kosten FROM diba_verzend WHERE aantal = '$totaalaantal' ORDER BY aantal ASC";
                    $result = safe_query($db, $query);
                    
                    if (mysqli_num_rows($result) != 0){
                        $verzendkosten = $result['kosten'];
                    }

                                        
                    else{
                    $query = "SELECT id, aantal, kosten FROM diba_verzend ORDER BY aantal DESC LIMIT 1";
                    $result = safe_query($db, $query);
                    $verzendkosten = $result['kosten'];
                    }

                    
                    echo $verzendkosten;
                    // echo "Verzendkosten: '$verzendkosten' Euro";
                
                ?>


Dit is regel 164
$verzendkosten = $result['kosten'];

Heeft iemand enig idee wat ik fout doe?
 
PHP hulp

PHP hulp

08/05/2024 05:08:05
 
Arjan Kapteijn

Arjan Kapteijn

14/04/2006 22:14:00
Quote Anchor link
Je hebt de query uitgevoerd, maar moet er eerst wat mee gaan doen voordat je er gegevens uit kan halen.

Bijv. mysql_fetch_array() o.i.d.
 
Eris -

Eris -

14/04/2006 22:16:00
Quote Anchor link
Hoe zien de functies
safe_query() en safe_db_open eruit (Ze bestaan namelijk niet op php.net
 
Johan Boerema

Johan Boerema

14/04/2006 22:24:00
Quote Anchor link
function safe_db_open($host, $gebruiker, $wachtwoord, $database){
$db ='';
if (empty($host) || empty($gebruiker) || empty($wachtwoord) || empty($database)){
// er zijn geen geldige parameters meegegeven
// eventueel nog uitbreiden met controles op het meegegeven type,
// zoals is_string().
return false;
}
else{
if (DEBUG_MODE){
// uitgebreide debugging-mode, met meldingen voor de programmeur
// DEBUG_MODE is een constante, gedefinieerd in het config-bestand
if (!$db = mysqli_connect($host, $gebruiker, $wachtwoord, $database)){
die ("Oooops: er is een fout opgetreden: <br />
host : $host <br />
gebruiker : $gebruiker <br />
wachtwoord : $wachtwoord <br />
database : $database <br />
MySQL-foutnummer: " . mysqli_errno($db) .
"<br /> MySQL-melding: " . mysqli_error($db));
}
else {
// alles OK, resource-handler teruggeven
return $db;
}
}
else{
// geen debug-mode, eindgebruiker krijgt beperkte foutmelding te zien
if (!$db = mysqli_connect($host, $gebruiker, $wachtwoord, $database)){
die ("Er s een fout opgetreden bij het werken met de database");
}
else {
// alles OK, resource-handler teruggeven
return $db;
}
}
}
} // einde functie safe_db_open()
 
Johan Boerema

Johan Boerema

14/04/2006 22:24:00
Quote Anchor link
/**
* function safe_query ()
* Algemene functie om queries safe uit te voeren, inclusief
* error-nummers. Schakel DEBUG_QUERY uit in config.php voor productiesites!
*
* @return resource
*/
function safe_query($db, $query){
global $ERRORS; // globale array met foutmeldingen
$result = '';
if (empty($query) || empty($db) || !is_string($query) || !is_object($db)){
// er zijn geen geldige parameters meegegeven
return false;
}
else{
if (DEBUG_MODE){
// uitgebreide debugging-mode, met meldingen voor de programmeur
if (!$result = @mysqli_query($db, $query)){
die ("{$ERRORS['QUERY_ERROR_ADMIN']}
<br> uitgevoerde query: $query .
<br> MySQL-foutnummer: " . mysqli_errno($db) .
"<br> MySQL-melding: " . mysqli_error($db));
}
else {
return $result;
}
}
else{
// geen debug-mode, eindgebruiker krijgt beperkte foutmelding te zien
if (!$result = @mysqli_query($db, $query)){
die ($ERRORS ['QUERY_ERROR_USER']);
}
else {
return $result;
}
}
}
}// einde functie safe_query()
 
Johan Boerema

Johan Boerema

15/04/2006 11:07:00
Quote Anchor link
Het 1e probleem is opgelost.
Het ging om een verzendkosten berekening bij een webshop.
De verzendkosten worden nu dus meegenomen in het winkelwagentje.
Nu wil ik diezelfde verzendkosten ook meenemen in het mailtje dat verstuurd wordt aan de besteller.

Dit gaat dmv de volgende functie:

function checkout_cart(){

$onderwerp = "DIBA: uw bestelling";
$ontvanger = $_SESSION['email'];

$bericht = "Bedankt voor uw bestelling bij DIBA 13!\n\n";
$bericht .= "Wij hebben de volgende bestelling genoteerd:\n\n";

// inhoud shopping cart in mailtje plaatsen
foreach($_SESSION['cart']->getcart()as $inhoud){
// totaalprijs berekenen
$p_totaal = round(($inhoud['aantal'] * $inhoud['prijs']), 2);
$p_aantal += $inhoud['aantal'];
$bericht .= $inhoud['naam'] .", " . $inhoud['prijs'] . ", ";
$bericht .= $inhoud['aantal'] . " stuk(s), $p_totaal euro.\n";
}

//database openen via user defined function
$db = safe_db_open($host, $gebruiker, $wachtwoord, $database);

// Openen geslaagd, query opstellen en uitvoeren
$query = "SELECT kosten FROM diba_verzend WHERE aantal = '$p_aantal' ORDER BY aantal ASC";
$result = safe_query($db, $query);
$verzend = mysqli_fetch_array($result);

if (mysqli_num_rows($result) > 0){
$verzendkosten = $verzend['kosten'];
}

else{
$query = "SELECT id, aantal, kosten FROM diba_verzend ORDER BY aantal DESC LIMIT 1";
$result = safe_query($db, $query);
$verzendkosten = $verzend['kosten'];
}

$bericht .= "De verzendkosten van uw bestelling bedragen: " ;
$bericht .= $verzendkosten;
$bericht .= "De totaalprijs van uw bestelling bedraagt: " ;
$bericht .= $_SESSION['cart']->getTotaal() + $verzendkosten . " Euro\n\n";
$bericht .= "U ontvangt uw bestelling na betaling op bankrekening 12.34.56.789\n\n";
$bericht .= "Met vriendelijke groet\nDiana Baron";

// mailtje naar de koper sturen
// let op: zelf uiteraard zorgen voor error handling.
mail($ontvanger, $onderwerp, $bericht);

// mailbericht opstellen voor de webmaster
$onderwerp = "DIBA: bestelling geplaatst";
$ontvanger = "[email protected]";

// nog enkele identificatie-gegevens toevoegen aan mailbericht
$bericht .= " ========================================== \n ";
$bericht .= "Bestelling van: " . $_SESSION['username'] ."\n";
$bericht .= "E-mail: " . $_SESSION['email'] ."\n";
$bericht .= "Adres: " . $_SESSION['adres'] ."\n";
$bericht .= "Postcode: " . $_SESSION['postcode'] ."\n";
$bericht .= "Woonplaats: " . $_SESSION['plaats'] ."\n";
$bericht .= " bestelling geplaatst op: " . date("d-m-Y G:i:s") ."\n";

// mailtje naar de webmaster sturen
mail($ontvanger, $onderwerp, $bericht);

} // einde functie checkout_cart()

NU krijg ik weer de volgende meldingen:

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /usr/home/deb1236n2/domains/diba13.nl/public_html/diba_functions.php on line 291

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /usr/home/deb1236n2/domains/diba13.nl/public_html/diba_functions.php on line

Dit is de betreffende regel:

$verzend = mysqli_fetch_array($result);


Wat doe ik fout?
 
- SanThe -

- SanThe -

15/04/2006 11:17:00
Quote Anchor link
Wat is het verschil tussen mysql_command en mysqli_command?
 
Arjan Kapteijn

Arjan Kapteijn

15/04/2006 11:18:00
Quote Anchor link
Je hebt de mysql en mysqli extensie. De i is zegmaar een iets uitgebreidere versie.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.