SQL probleem
Deze foutmelding krijg ik bij de volgende code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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";
?>
$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?
Bijv. mysql_fetch_array() o.i.d.
safe_query() en safe_db_open eruit (Ze bestaan namelijk niet op php.net
$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()
* 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()
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?
Wat is het verschil tussen mysql_command en mysqli_command?
Je hebt de mysql en mysqli extensie. De i is zegmaar een iets uitgebreidere versie.