PHP zoek functie

Status
Niet open voor verdere reacties.

kevinr1

Gebruiker
Lid geworden
7 okt 2010
Berichten
110
Hoi allemaal,

Zelf ben ik vrij slecht in het gebruik van php.
Hieronder mijn code en daarnaast een doel dat ik wil bereiken:


PHP:
<?php
require_once ('conf.php'); // alle inlog gegevens voor de server.
if ($_SERVER['REQUEST_METHOD'] == "POST") {
    $dierSoort = mysql_real_escape_string($_POST['diersoort']);
    $dierLeeftijd = mysql_real_escape_string($_POST['leeftijd']);
    $matchQuery = mysql_query("SELECT * FROM test1 AS d INNER JOIN test2 ORDER BY RAND() LIMIT 1"); 
										
	$resultData = mysql_fetch_assoc($matchQuery);
	
	
}
	
?>

Hier dan mijn zoekfunctie;

HTML:
<form action='zoekenverwerking.php' method='post'> 
<select value="diersoort">
<option value="hond">Hond</option>
<option value="kat">Kat</option>
<option value="konijn">Konijn</option>
<option value="paard">Paard</option>
</select>
<input type="submit" value="Match!">
</form>


Wat ik nu precies wil ik dat als je 1 van de dieren kiest, en daarna op match klikt er op de volgende pagina alleen de naam wordt weergegeven van het dier.
Op dit moment lukt mij dit niet met de huidige code.

De mySQL code klopt, heb alleen de helft eruit gehaald.
Wat is mijn volgende stap?
 
Laatst bewerkt:
Verander <select value="diersoort"> eens in <select name="diersoort">
Dus 'name' i.p.v. 'value'.

[edit]Overigens moet je ook nog ergens iets als
PHP:
echo $dierSoort;
neerzetten als je wilt dat de naam van het gekozen dier op het scherm verschijnt.[/edit]
 
Laatst bewerkt:
Supersnail, bedankt voor je reactie!
Ik heb gedaan wat je zei maar het werkt nog niet, ik krijg nog steeds geen naam naar voren. ( de database is wel gevuld!)
Hier dan mijn volledige code:

PHP:
<?php
require_once ('conf.php'); // alle inlog gegevens voor de server.
if ($_SERVER['REQUEST_METHOD'] == "POST") {
    $dierSoort = mysql_real_escape_string($_POST['diersoort']);
    $dierLeeftijd = mysql_real_escape_string($_POST['leeftijd']);
    $matchQuery = mysql_query("SELECT * FROM vd_dier AS d INNER JOIN vd_dier_eigenschap 
									AS de ON d.id = de.vd_dier_id INNER JOIN vd_eigenschap 
									AS e ON e.id = de.vd_eigenschap_id WHERE e.naam = 'leeftijd" .
									$dierSoort . "' AND de.waarde = '" . $dierLeeftijd . "' ORDER BY RAND() LIMIT 1"); 
									
    
	$resultData = mysql_fetch_assoc($matchQuery); 
    
	
	echo $dierSoort;
	//echo $resultData['naam']; werkt ook niet
	
	
}

?>

Zo iemand mij verder uit de brand kunnen helpen?
 
Zet onder de 'if' eens
PHP:
var_dump($_POST);
neer. Dan kan je zien wat er allemaal in $_POST zit.
 
geeft dit weer:
array(1) { ["diersoort"]=> string(4) "hond" }
 
Ik zou eerder benieuwd zijn naar de var_dump($resultData); :)

Maar ik vermoed eerder dat je query niet goed loopt.
PHP:
" WHERE e.naam = 'leeftijd" . $dierSoort . "' AND"
Levert namelijk dit op:
PHP:
" WHERE e.naam = 'leeftijdhond' AND"
 
Bedankt voor je reactie.
echo var_dump($resultData); geeft als resultaat; NULL


Maar wat is er dan nu precies mis met mijn query?
 
Laatst bewerkt door een moderator:
Het lijkt mij sterk dat er een waarde "leeftijdhond" in je kolom "naam" van tabel "vd_eigenschap" zit.

Maak van je code eens dit:
PHP:
$query = "
    SELECT
        *
    FROM
        vd_dier d
    INNER JOIN
        vd_dier_eigenschap de ON d.id = de.vd_dier_id
    INNER JOIN
        vd_eigenschap e ON e.id = de.vd_eigenschap_id
    WHERE
        e.naam = 'leeftijd" . $dierSoort . "'
    AND
        de.waarde = '" . $dierLeeftijd . "'
    ORDER BY
        RAND()
    LIMIT
        1";
echo $query;
$matchQuery = mysql_query($query) or die(mysql_error());
Nu krijg je de query ook als output, plak die eens in phpMyAdmin o.i.d. dan kun je van daaruit waarschijnlijk beter achterhalen wat er eventueel fout gaat.
 
Als ik jou code toepas op de site krijg ik het volgende ge-echo'ed:
Resource id #4

Bij MySQL met de volgende code:
PHP:
 SELECT *
FROM vd_dier d
INNER JOIN vd_dier_eigenschap de ON d.id = de.vd_dier_id
INNER JOIN vd_eigenschap e ON e.id = de.vd_eigenschap_id
WHERE e.naam = 'diersoort'
AND de.waarde = 'leeftijd'
ORDER BY RAND( )
LIMIT 1

Krijg ik "MySQL gaf een lege resultaat set terug (0 rijen). (Query duurde 0.0004 sec)"
 
Je kunt geen "Resource id #4" krijgen van echo $query;, dat is namelijk een string en geen resultaat van een mysql_query.

Wellicht kunnen we het beter opdraaien, welke query heb je nodig om de juiste gegevens te krijgen?
Dan kunnen we die wel dynamisch proberen te maken ;)
 
Ik heb dus een form gemaakt met daarin een paar diersoorten.
Vanuit die selectie wil ik een naam naar voren brengen en een afbeelding.

Bij een hond moet bijvoorbeeld een hondennaam naar voren komen en een hondenafbeelding.


Hieronder een afbeelding van de DB.
test1.png

Het gaat dan om een dummy database gevuld met 'onzin'.
 
Heb je al een query weten te maken in phpMyAdmin waarmee je de gegevens terugkrijgt die je wilt hebben?

Puur SQL dus, niets via een eigen formulier.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan