hallo,

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.

dit komt denk ik door de lege velden.

wat kan ik hier tegen doen???
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.
kan ik zoekwoord 4 en 5 niet ook met en mysql_real_escape_string($_POST['zoekwoord4'] doen? en zo ja hoe pas ik dat dan toe op de INTERVAL ??

ik krijg het echt nog niet werkend.
Wat ik zou doen:
<?php
$wheres = array();
if (!empty($_POST['zoekwoord1']) {
	$wheres[] = "id LIKE '%" . mysql_real_escape_string($_POST['zoekwoord1']) . "%'";
}
// hetzelfde voor 2 en 3

if(filter_input(INPUT_POST,'zoekwoord4', FILTER_VALIDATE_INT)
	 && filter_input(INPUT_POST,'zoekwoord5', FILTER_VALIDATE_INT)) {
	$wheres[] = "birthday BETWEEN (CURRENT_DATE - INTERVAL " .$_POST['zoekwoord5'] . " YEAR) AND (CURRENT_DATE - INTERVAL " . $_POST['zoekwoord4'] . " YEAR)";
}
$query = "SELECT id,
		 user_name,
		 birthday,
		 TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS age
	FROM users WHERE
	" . implode(" AND\n\t", $wheres);
?>



wow dat is even een hele andere opzet!

klinkt logisch alleen ik wist niet dat je een array in een query kon gebruiken!

even ter verduidelijking.
de
if(is_numeric
betekent als er een cijfer ingevuld is toch?

en dan nog een vraagje de implode is neem ik aan een soort include?

en de AND\n\t is dat hij het op een nieuwe regel moet weergeven?

ik ga dit even proberen werkend te krijgen.

[size=xsmall]Toevoeging op 30/03/2015 21:05:23:[/size]

dit werkt niet ....
het formulier staat op een andere pagina trouwens.

[code]
<?
$zoekwoord4 = trim($_POST['zoekwoord4']);
$zoekwoord5 = trim($_POST['zoekwoord5']);

if($_SERVER['REQUEST_METHOD'] == 'POST')
{

<?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);


?>
[\code]
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
Regel 2 en 3 moeten uiteraard na regel 6 staan.
Ik mis de sluiting } van regel 6 {.
Voer je de query wel uit?
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'])."%' )
																													
																													 ";  
?>
Regel 46 klopt niet.
Zie de vorige posts.
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:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
?>

Edit: ik had het net omgedraaid ;-(

Reageren