ik krijg deze foutmelding bij onderstaand script:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in....
er wordt verwezen naar de while regel in de foutmelding. De veroorzaker is de where regel in mijn select. als ik die regel weg haal, werkt het script normaal. weet iemand wat ik hier fout doe?
mijn bedoeling is dat alleen een record uit de database geselecteerd wordt als de einddatum over 60 dagen is.

<?PHP

$zestig_dagen_terug = mktime() - 60;
$result = mysql_query ( "SELECT
COALESCE( klant.klant_bedrijf,
klant.klant_achternaam ) AS naam,
product.prod_omschrijving AS omschrijving,
klant.klant_van AS van,
product.prod_ingang_datum AS ingangdatum,
product.prod_eind_datum AS einddatum
FROM producten AS product
JOIN klanten AS klant ON klant.klant_id = product.prod_klant_id
WHERE einddatum = '.$zestig_dagen_terug'");

include 'functions.php';

while ($row = mysql_fetch_assoc($result)) {
$naam = $row["naam"];
$omschrijving = $row["omschrijving"];
$ingangdate = date_create($row["ingangdatum"]);
$einddate = date_create($row["einddatum"]);
$ingangdatum = date_format($ingangdate, 'd-m-Y');
$einddatum = date_format($einddate, 'd-m-Y');

echo $naam . ' ' . $ingangdatum . ' t/m ' . $einddatum . '<BR/>';
?>
bedankt voor je reactie. alleen je link werkt niet.
ik vind het echt vreemd, want het hele script werkt, behalve als ik de WHERE regel toevoeg.
Wouter W op 03/09/2012 14:10:21

bedankt voor je reactie. alleen je link werkt niet.
ik vind het echt vreemd, want het hele script werkt, behalve als ik de WHERE regel toevoeg.

Niets vreemds aan, want die WHERE regel is waar het fout gaat. Die regel is namelijk fout en blaast je query op. Haal je die weg, dan werkt de query wel en gaat het goed.
<?php
WHERE einddatum = '.$zestig_dagen_terug'");
?>
Wat fout is, is die punt in de regel. Ofwel weghalen, ofwel (veel beter!) variabelen buiten quotes halen zoals hierboven al aangegeven.
Dan zou het zo zijn:
<?PHP
WHERE einddatum = $zestig_dagen_terug
?>
maar dat werkt ook niet.
<?php
$result = mysql_query ( "SELECT
COALESCE( klant.klant_bedrijf,
klant.klant_achternaam ) AS naam,
product.prod_omschrijving AS omschrijving,
klant.klant_van AS van,
product.prod_ingang_datum AS ingangdatum,
product.prod_eind_datum AS einddatum
FROM producten AS product
JOIN klanten AS klant ON klant.klant_id = product.prod_klant_id
WHERE einddatum = '" . $zestig_dagen_terug . "'");

?>
Wouter W op 03/09/2012 17:14:12

Dan zou het zo zijn:
<?PHP
WHERE einddatum = $zestig_dagen_terug
?>
maar dat werkt ook niet.

Wat zit er voor waarde in $zestig_dagen_terug dan?
Erwin H op 03/09/2012 17:24:59

[quote="Wouter W op 03/09/2012 17:14:12"]
Dan zou het zo zijn:
<?PHP
WHERE einddatum = $zestig_dagen_terug
?>
maar dat werkt ook niet.

Wat zit er voor waarde in $zestig_dagen_terug dan?

[/quote]

deze code:
<?PHP
$zestig_dagen_terug = mktime() - 60;
?>
dit om alleen de rijen te retourneren waarvan de einddatum over 60 dagen is.
En dat gaat er dus mis....
Een datum in SQL dien je als string in te voeren. Dus je moet de datum formateren in de vorm yyyy-mm-dd. En dan als string, dus tussen quotes. Een getal zal je een warning opleveren, wat je had kunnen zien als je correcte foutafhandeling had gehad....
Een andere tip, probeer je queries eens in phpmyadmin of de commandline tool van MySQL. Is een stuk makkelijker om te testen en fouten te ontdekken.
ok, maar ik wil graag het weergegeven hebben als dd-mm-yyyy.

Reageren