Archief - QUERY geeft error. imo klein foutje ergens.

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

KingOfWoods

Legacy Member
PHP:
if(isset($_GET["id"])) 
	{
	$query = "select *,DATE_FORMAT(verdwijndate, '%d-%m-%Y') as belgdate from tbl_kind where idkind = %d limit 1", $_GET["id"];
	$r = mysql_query($query);
	if(!$r) { die("db error"); }
	$row = mysql_fetch_assoc($r);		
	}

PHP:
echo "<a href='?id=".$row['idkind']."' class='font1'>".$row['vnaam']." ".$row['anaam']."</a></p>";

Ik heb dus een link die mijn $_GET triggert en dat werkt. Ik krijg enkel een enorme foutmelding van MySQL en dit imo omdat bovenste $query commando fouten bevat. Weet iemand welke want ik ben er al 2 uur op aan het zoeken door van alles te prberen, maar ik blijf steeds andere errors krijgen. Kben nog niet zo lang met php en mysql bezig vandaar waarschijnlijk dit basic foutje dat ik over het hoofd zie.


PHP:
<div id="affiche">
										<div id="affiche_foto"><img src="<?php echo $row['url']; ?>"/></div>
										<div id="affiche_naam"><h2><?php echo $row['vnaam']." <span>".$row['anaam']."</span>"; ?></h2></div>
										<div id="affiche_datum"><h2><?php echo $row['belgdate']; ?></h2></div>
										<div id="affiche_provincie"><h2><?php echo $row['provincie']; ?></h2></div>
									</div>

Het moet dit als resultaat geven, maar query gaf fouten.
Ik moet er wel bij vertellen dat wanneer ik in query en FORMAT_DATE gedeelte wegdeed hij wel werkte, maar dan kreeg ik natuurlijk de error dat hij index belgdate niet kon vinden, waardoor ik ook foute uitkomst kreeg.

Iemand enig idee waar de fout zich bevindt. Merci alvast voor de hulp

Sick-Boy

Legacy Member
In het vervolg ook best de fout meegeven :).

Het probleem zit hier:
idkind = %d

Ik vermoed dat je een variabele verwacht maar dat is het dus niet.
De query zou wel moeten werken met een kleine aanpassing:

idkind = DATE_FORMAT( verdwijndate, '%d' )
of
idkind = DATE_FORMAT( NOW( ) , '%d' )
voor de huidige dag.


Ook heel erg belangrijk om problemen te vermijden is dat je niet zomaar $_GET variabelen in je queries plakt. Je kan in dit geval de functie is_int() gebruiken of type casten (het type van de variabele meegeven) om te kijken dat de variabele een getal is.

Type casten:
PHP:
$gID = (int) $_GET['id'];

is_int():

PHP:
$gID = is_int($_GET['id']) ? $_GET['id'] : 0;

Dit laatste is de korte if-then-else structuur van deze code:

PHP:
if(is_int($_GET['id'])){
    $gID = $_GET['id'];
}else
{
    $gID = 0;
}

Zero Grav

Legacy Member
Ook wel even vermelden dat deze manier van data meegeven naar MySQL iedereen met een beetje kennis van zaken de mogelijkheid geeft uw database te wissen. Ge geeft gewoon uw $id mee die rechtstreeks uit de url komt en waar de gebruiker dus mee kan doen wat hij wil.

KingOfWoods

Legacy Member
Zero Grav zei:
Ook wel even vermelden dat deze manier van data meegeven naar MySQL iedereen met een beetje kennis van zaken de mogelijkheid geeft uw database te wissen. Ge geeft gewoon uw $id mee die rechtstreeks uit de url komt en waar de gebruiker dus mee kan doen wat hij wil.

Ja ik had al gehoord dat het allemaal niet super veilig zat, maar het is voor de back-end en daar komt normaal alleen een bevoegd persoon achter. Het is ook een schoolwerk dus fouten mogen, maar zijn inderdaad liefst te vermijden. Wij hebben ook niet echt een programmeer richting dus verwachten ze ook geen pro niveau. Ik sta nog in de kinderschoentjes met PHP en vind wat ik nu allemaal maak al zwaar over mijn kunnen. Kben gemiddeld 3 uur bezig naar het zoeken van kleine stomme dingetjes. Als ik dan er nog eens al die beveiligingen bij moet nemen ben ik binnen 2 maand nog bezig :)

Toch heel hard bedankt al voor de goede raad. Ik ga deze proberen toe te passen bij een volgend project als ik terug wat meer tijd heb. Dit moet gewoon zo snel mogelijk afgeraken want eind april dient het ingediend te worden.

Ik wil mezelf hierbij dus ook niet goed praten. ik zou het graag ook van de eerste keer goed leren, het probleem zit meer in de lessen die we krijgen. Wij krijgen enkel de basis zoals wat een GET en POST doet en hoe je deze gegevens naar je DB schrijft. Al de andere beveiligingszaken worden niet in onze richting behandeld. En om daar nu zelf achter te gaan zoeken...

ZE willen gewoon op het einde een mooi design zien (ik zit in design richting) en een website dat functioneel marcheert. Kvraag mij zelf af of ze wel de moeite gaan doen om naar alle code te kijken als alles er werkend uitziet :doh:

KingOfWoods

Legacy Member
UPDATE:

Ik denk dat ik het niet helemaal goed begrepen heb. Dit is wat ik heb ingegeven:
PHP:
$query = "select *,DATE_FORMAT(verdwijndate, '%d-%m-%Y') as belgdate from tbl_kind where idkind = DATE_FORMAT( verdwijndate, '%d' ) limit 1", $_GET["id"];

en nu krijg ik deze error:
Parse error: syntax error, unexpected ',' in C:\xampp\htdocs\vermist\index.php on line 94
dus er zit ergens een comma niet goed. Ofwel begrijp ik het niet helemaal goed.

idkind is geen date field ter verduidelijking. Want ik begrijp niet goed waarom idkind = DATE_FORMAT moet worden :s
Nog zoveel te leren :sad:
Ik zie ook dat je van Merchtem bent :) waar ergens?

Zero Grav

Legacy Member
't Is niet zo duidelijk wat ge wilt bereiken, ik denk dat ge u gewoon vergist met uw query en dat die id terugslaat op idkind. Want gelijk ge het nu aan't doen zijt (en als uw syntax correct zou zijn) gebruikt ge uw id nu voor het aantal resultaten te bepalen.

Als ik u juist begrijp en met een beetje pseudo-beveiliging:

Code:
if(is_numeric($_GET['id'])) {
	$query = "select *, DATE_FORMAT(verdwijndate, '%d-%m-%Y') as belgdate from tbl_kind where idkind = " . $_GET['id'] . " LIMIT 1";
}

Senn0

Legacy Member
Streaker zei:
UPDATE:

Ik denk dat ik het niet helemaal goed begrepen heb. Dit is wat ik heb ingegeven:
PHP:
$query = "select *,DATE_FORMAT(verdwijndate, '%d-%m-%Y') as belgdate from tbl_kind where idkind = DATE_FORMAT( verdwijndate, '%d' ) limit 1", $_GET["id"];

en nu krijg ik deze error:
Parse error: syntax error, unexpected ',' in C:\xampp\htdocs\vermist\index.php on line 94
dus er zit ergens een comma niet goed. Ofwel begrijp ik het niet helemaal goed.

idkind is geen date field ter verduidelijking. Want ik begrijp niet goed waarom idkind = DATE_FORMAT moet worden :s
Nog zoveel te leren :sad:
Ik zie ook dat je van Merchtem bent :) waar ergens?

Probeer eens :

PHP:
$gID = (int) $_GET['id'];
$query = "select *,DATE_FORMAT(verdwijndate, '%d-%m-%Y') as belgdate from tbl_kind where idkind = ". $gID ."limit 1";

of zoals hierboven ..

KingOfWoods

Legacy Member
Merci aan beide. Het is gelukt.

Ik had het ook gevonden, maar zonder beveiliging en met een simpeler commando. Ik was die " . . " vergeten. dus ik had mijn $_get['id'] al in een var gestoken en zo lukte het wel.

Anyway, dikke merci. Weeral iets bijgeleerd.

EN ik kan begrijpen dat de eindbedoeling wat onduidelijk voor jullie is. Het was gewoon de bedoeling dat ik door op een link te duwen iets veranderde op mijn main page.
Op mijn main is een affiche opgebouwd uit gegevens uit de DB. Zoals de naam en geb.datum van een kind + foto. In de zijkolom heb ik ook nog een slider met al de andere personennen in de DB. Als ik in die zijkolom op een ventje duwde moest deze op de hoofdpagina met al zijn gegevens komen. Vandaar die $_GET[id] die dan idkind moet voorstellen in mijn DB.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan