ik heb weer een vraagje.
ik ben op zoek naar een manier om mijn database uit te lezen dermate van zoek kriteria.
nu heb ik 1 input veld en dit werpt top!
full textsearch heb ik ook naar gekeken maar naar zo iets ben ik niet op zoek.
ik wil dus bijvoorbeeld 3 input velden onder elkaar :
1 voor zoeken op username
2 voor zoeken op id
3 voor zoeken op mail adres
nu heb ik bij de input name verschillende namen gemaakt dus bv.
zoek1
zoek2
zoek3
en bij mijn query heb ik dit ingevuld :
$query = "SELECT * FROM `user` WHERE (`username` LIKE '%".$zoek1."%' OR `id` LIKE '%".$zoek2."%'OR `usermail` LIKE '%".$zoek3."%'";
maar als ik nu 3 zoekvelden heb maakt het niet uit wat ik invul maar ik krijg altijd alle gegevens te zien uit de database.
hier doet hij het nog steeds niet als ik dit heb.....
hij doet dan alleen tussen leeftijden zoeken en de andere niet.
als ik de birthday regel verwijder werken de andere weer...
<?
$zoekwoord4 = $_POST['zoekwoord4'];
$zoekwoord5 = $_POST['zoekwoord5'];
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$query = "SELECT id, user_name, birthday, TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS age FROM users WHERE
(`id` LIKE '%".mysql_real_escape_string($_POST['zoekwoord'])."%' )
AND (`user_name` LIKE '%".mysql_real_escape_string($_POST['zoekwoord1'])."%' )
AND (`country` LIKE '%".mysql_real_escape_string($_POST['zoekwoord2'])."%' )
AND (`birthday` BETWEEN (CURRENT_DATE - INTERVAL '$zoekwoord5' YEAR) AND (CURRENT_DATE - INTERVAL '$zoekwoord4' YEAR)) ";
?>
EDIT: zou dit aan de variable kunnen liggen? de ene $zoekwoord5 en de ander$_POST['zoekwoord2'] ??
Ja dat kan, je moet controleren of zoekwoord4 en zoekwoord5 niet leeg zijn.
In bovenstaande query levert dat een SQL-foutmelding op (waarop je overigens altijd moet controleren).
Ik zou overigens alle voor velden kijken of ze ingevuld zijn, is dat niet het geval weglaten uit de where.
Ik heb de code even wat aangepast want is_numeric dekt niet helemaal de lading. Dan kan je bv ook 20.5 invullen en dat zou ook wel eens een SQL fout op kunnen leveren.
Met "Het werkt niet" kunnen we weinig. Wat werkt er niet? en anders echo $query eens, daar kunnen we in ieder geval iets uit opmaken
ik bedoel ik krijg nu een wit scherm als ik de zoek opdracht geef via het form.
ik ben al aan het zoeken of er ergens een punt of comma vergeten is maar ben er nog niet achter.
moet er trouwens geen " teken na de $wheres komen?
EDIT: Santhe, in mijn script staat het sluit teken wel.
[size=xsmall]Toevoeging op 30/03/2015 22:18:40:[/size]
het laatste voorbeeld
<?
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$zoekwoord4 = trim($_POST['zoekwoord4']);
$zoekwoord5 = trim($_POST['zoekwoord5']);
[code]<?php
$wheres = array();
if (!empty($_POST['zoekwoord']) {
$wheres[] = "id LIKE '%" . mysql_real_escape_string($_POST['zoekwoord']) . "%'";
}
if (!empty($_POST['zoekwoord1']) {
$wheres[] = "user_name LIKE '%" . mysql_real_escape_string($_POST['zoekwoord1']) . "%'";
}
if(is_numeric($zoekwoord4) && is_numeric($zoekwoord5)) {
$wheres[] = "birthday BETWEEN (CURRENT_DATE - INTERVAL $zoekwoord5 YEAR) AND (CURRENT_DATE - INTERVAL $zoekwoord4 YEAR)";
}
$query = "SELECT id,
user_name,
birthday,
TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS age
FROM users WHERE
" . implode(" AND\n\t", $wheres);
?>
krijg ik niet aan de praat ik blijf een wit scherm krijgen zelfs echo's krijg ik niet te zien.
toch snap ik niet waarom ondertsaande het niet doet :
<?
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$zoekwoord4 = $_POST['zoekwoord4'];
$zoekwoord5 = $_POST['zoekwoord5'];
$query = "SELECT id, user_name, birthday, TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS age FROM users WHERE (`id` LIKE '%".mysql_real_escape_string($_POST['zoekwoord'])."%' )
AND (`user_name` LIKE '%".mysql_real_escape_string($_POST['zoekwoord1'])."%' )
AND (`birthday` TIMESTAMPDIFF(YEAR, birth_date, CURRENT_DATE) BETWEEN '$zoekwoord5' AND '$zoekwoord4')
";
?>
en dit onderstaande wel.
dan zit er toch iets in de regel birthday niet goed?
<?
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$zoekwoord4 = $_POST['zoekwoord4'];
$zoekwoord5 = $_POST['zoekwoord5'];
$query = "SELECT id, user_name, birthday, TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS age FROM users WHERE (`id` LIKE '%".mysql_real_escape_string($_POST['zoekwoord'])."%' )
AND (`user_name` LIKE '%".mysql_real_escape_string($_POST['zoekwoord1'])."%' )
";
?>
Om te beginnen moet je als je aan het ontwikkelen bent altijd ervoor zorgen dat je error reporting aan staat (in PHP). Dit kan je per script regelen of in php.ini als je een eigen test omgeving hebt.
In het script zelf bovenaan: