Archief - Probleem met zoekfunctie

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.

leteldingske

Legacy Member
Ik heb een basic website gemaakt en daarin zit een zoekfunctie.
De website is gekoppeld aan een databank en het zoeken haalt dus gegevens op uit de DB.

Om een of andere reden werkt enkel de eerste case van de switch. Terwijl alle query's apart wel correct werken.

Code:
<form action="gezocht.php" method="post">
<h1>Zoeken:</h1>
<p>U kunt zoeken op <br> rijksregisternummer, naam, voornaam, straatnaam en geboortedatum van de pati&eumlnt</p></td>
<td></td>
<td></td>
<td width="350" height="300">							
<input type="text" name="zoekopdracht" placeholder=""/><br>
<input type="radio" name="zoeken" value="rijksregisternummer" /> Rijksregisternummer <br>
<input type="radio" name="zoeken" value="naam" /> Naam <br>
<input type="radio" name="zoeken" value="voornaam" /> Voornaam <br>
<input type="radio" name="zoeken" value="straatnaam" /> Straatnaam <br>
<input type="radio" name="zoeken" value="geboortedatum" /> Geboortedatum <br><br>
<input type="image" src="image/zoeken.gif" alt="Submit">
</td>
</form>

PHP:
<?php
		$config = parse_ini_file("connect/divkey.ini.php", true);
		include("connect/connect_mysql.php");
		
	if (!empty($_POST["zoeken"])){
		//$query=mysql_query("SELECT * FROM persoon WHERE " . $_POST["zoeken"] . "");
		switch ($_POST["zoeken"]){
			case "rijksregisternummer":
			//$query .= " LIKE '%" . $_POST["zoekopdracht"] . "%' ";
			$query = mysql_query("SELECT * FROM persoon WHERE rijksregisternummer =" .$_POST['zoekopdracht']);
			break;
			
			case "naam":
			//$query .= " LIKE '%" . $_POST["zoekopdracht"] . "%' ";
			$query = mysql_query("SELECT * FROM persoon WHERE naam =" .$_POST['zoekopdracht']);
			break;
			
			case "voornaam":
			//$query .= " LIKE '%" . $_POST['zoekopdracht'] . "%' ";
			$query = mysql_query("SELECT * FROM persoon WHERE voornaam =" .$_POST['zoekopdracht']);
			break;
			
			case "straatnaam":
			//$query .= " LIKE '%" . $_POST['zoekopdracht'] . "%' ";
			$query = mysql_query("SELECT * FROM persoon WHERE straatnaam =" .$_POST['zoekopdracht']);
			break;
			
			case "geboortedatum":
			//$query .= " LIKE '%" . $_POST['zoekopdracht']. "%' ";
			$query = mysql_query("SELECT * FROM persoon WHERE geboortedatum =" .$_POST['zoekopdracht']);
			break;
			
			default:
			break;
		}
		$aantal = mysql_num_rows($query);
	}
?>

Kilghard

Legacy Member
Ik zie het zo meteen niet ,
Maar wel al meteen vermelden dat dit HEEL slechte bad practices zijn om je $_POST zo maar in je query gebruiken
leer dit zo NIET aan aub , beter goed beginnen dan je later te moeten corigeren
(zoek maar wat dingen op over sanitizing etc, is vrij uitgebreid , je kan ook altijd een framework gebruiken dat dit al voor je oplost)

dJeez

Legacy Member
Idd, blijkbaar heb je nog nooit gehoord van SQL injection. De eerste Bobby Tables die langskomt helpt je site wel om zeep... En doorgaans quote je strings die je gebruikt in een query, uw eerste use case werkt wellicht enkel omdat het rijksregisternummer een nummer is en MySQL zelf typecasting probeert toe te passen.

meuh

Legacy Member
Probeer dan eens de eerste case weg te halen en check dat dan eventueel de 2de werkt... en zo verder gaan om het probleem uit te sluiten.
Probeer ook in bepaalde delen van je code test echo's te zetten en check dat hem tot daar gaat.
In principe zou je dat in in query kunnen schrijven he


"SELECT * FROM tblPersoon WHERE naam =". $search . " OR " voornaam =". $search. " enz....


Lees zeker dit eens:
MySQL Tutorial - SQL Injection

meuh

Legacy Member
Probeer dan eens de eerste case weg te halen en check dat dan eventueel de 2de werkt... en zo verder gaan om het probleem uit te sluiten.
Probeer ook in bepaalde delen van je code test echo's te zetten en check dat hem tot daar gaat.
In principe zou je dat in in query kunnen schrijven he


"SELECT * FROM tblPersoon WHERE naam =". $search . " OR " voornaam =". $search. " enz....


Lees zeker dit eens:
MySQL Tutorial - SQL Injection

Fransz

Legacy Member
Respect dat er nog zulke mensen rondlopen. Ik maak al jaren gebruik van de out-of-the-box zoekfunctie van een CMS (die trouwens perfect werkt). Ik ben trouwens nooit een échte programmeur geweest, dat zal wel de reden zijn.

Kilghard

Legacy Member
Idd we zijn hier het wiel terug aan het uitvinden.
Dit is allemaal leuk om een beetje door te hebben hoe php in de kern werkt.
Maar na dit een maandje of 2 te bestuderen zou ik toch zo snel mogelijk overstappen naar een framework
CodeIgniter for fun (en te beginnen)
Voor werk
Cakephp, Zend of Symfony
Waarvan cakephp de makkelijkste is om in te springen

leteldingske

Legacy Member
dJeez zei:
uw eerste use case werkt wellicht enkel omdat het rijksregisternummer een nummer is en MySQL zelf typecasting probeert toe te passen.

Inderdaad, ik heb geprobeerd met telefoonnummer in de plaats van naam en dat vindt hij wel terug

leteldingske

Legacy Member
Is ondertussen opgelost met mysql_real_escape_string() nu zoekt hij wel naar de naam van mijn personen bedankt

Xenron

Legacy Member
Kilghard zei:
Idd we zijn hier het wiel terug aan het uitvinden.
Dit is allemaal leuk om een beetje door te hebben hoe php in de kern werkt.
Maar na dit een maandje of 2 te bestuderen zou ik toch zo snel mogelijk overstappen naar een framework
CodeIgniter for fun (en te beginnen)
Voor werk
Cakephp, Zend of Symfony
Waarvan cakephp de makkelijkste is om in te springen

geen je volledig gelijk! maar om te beginnen met een framework is cakePHP wel gemakkelijk, daarentegen de overstap van cakePHP naar bijvoorbeeld zend of tinyMVC is dan weer redelijk groot. :)
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