2015-07-14 2 views
1

У меня есть форму, где люди могут искать базу данных для четырех значений: Местонахождение, период, день и обслуживание. Я всегда не получаю результаты, которые я хочу.SQL-запрос не дает правильного результата

Если я использую И, людям нужно заполнить все. Если я использую ИЛИ, я получаю полную базу данных. Я хочу, чтобы иметь возможность искать базу данных для этих 1-4 вещей. Есть ли способ, как я могу это сделать?

Возможно ли проверить, какие поля заполнены, и что запрос автоматически изменяется с заполненными полями?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"  "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<title>Zoeken</title> 

</head> 
<body> 
<p><a href="new.php"><img src="add.png" width="20px" height="20px"/></a> | <a href="search.php"><img src="search.png" width="20px" height="20px"/></a> | <a href="search_lijnen.php"><img src="number.png" width="20px" height="20px"/></a> </p> 
<form action="" method="post"> 
<div> 
<table> 
<tr><td><strong>Locatie: </strong></td><td><input type="text" name="Locatie" value="" /></td> </tr> 
<tr><td><strong>Periode: </strong></td><td><input type="text" name="Periode" value="" /></td> </tr> 
<tr><td><strong>Dag: </strong></td><td><input type="text" name="Dag" value="" /></td> </tr> 
<tr><td><strong>Dienst: </strong></td> <td><input type="text" name="Dienst" value="" /></td></tr> 
<tr><td></td><td><input type="submit" name="zoeken" value="Zoeken"></td></tr> 
</table> 

</div> 

</form> 
<p><a href="new.php"><img src="add.png" width="20px" height="20px"/></a> | <a href="search.php"><img src="search.png" width="20px" height="20px"/></a> | <a href="search_lijnen.php"><img src="number.png" width="20px" height="20px"/></a> </p> 
</body> 
</html> 
<?php 


if (isset($_POST['zoeken'])) 
{ 
include('connect-db.php'); 
$Locatie = $_POST['Locatie']; 
$Periode = $_POST['Periode']; 
$Dag = $_POST['Dag']; 
$Dienst = $_POST['Dienst']; 

// get results from database 
$result = mysql_query("SELECT * FROM WMC_DeLijn WHERE Locatie='$Locatie' ANY Periode='$Periode' ANY Dag='$Dag'ANY Dienst='$Dienst' ") 
    or die(mysql_error()); 
// display data in table 
echo "<h2>Resultaten:</h2><p>"; 
echo "<table border='1' cellpadding='10'>"; 
echo "<table><tr><th>ID</th><th>Locatie</th><th>Periode</th><th>Dag</th><th>Dienst</th><th>Delen</th><th>Geleed</th><th>Start 1</th><th>Eind 1</th><th>Start 2</th><th>Eind 2</th><th>Lijnen</th></tr>"; 


// loop through results of database query, displaying them in the table 
while($row = mysql_fetch_array($result)) { 

    // echo out the contents of each row into a table 
    echo "<tr>"; 
    echo '<td align="center">' . $row['id'] . '</td>'; 
    echo '<td align="center">' . $row['Locatie'] . '</td>'; 
    echo '<td align="center">' . $row['Periode'] . '</td>'; 
    echo '<td align="center">' . $row['Dag'] . '</td>'; 
    echo '<td align="center">' . $row['Dienst'] . '</td>'; 
    echo '<td align="center">' . $row['Delen'] . '</td>'; 
    echo '<td align="center">' . $row['Geleed'] . '</td>'; 
    echo '<td align="center">' . $row['Start1'] . '</td>'; 
    echo '<td align="center">' . $row['Eind1'] . '</td>'; 
    echo '<td align="center">' . $row['Start2'] . '</td>'; 
    echo '<td align="center">' . $row['Eind2'] . '</td>'; 
    echo '<td align="center">' . $row['Lijnen'] . '</td>'; 
    //Link to edit record 
    echo '<td align="center"><a href="edit.php?id=' . $row['id'] . '"><img src="edit.png" width="20px" height="20px"/></a></td>'; 
    // Link to delete record 
    echo '<td align="center"><a href="delete.php?id=' . $row['id'] . '"><img src="delete.png" width="20px" height="20px"/></a></td>'; 
    //Link to Add Event to Google Calendar 
    echo '<td align="center"><a href="Add_Event.php?id=' . $row['id'] . '"><img src="proceed.png" width="20px" height="20px"/></a></td>'; 
    echo "</tr>"; 
}} 
// close table> 
echo "</table>"; 

?> 
+0

Вы, кажется, имеют уязвимости SQL-инъекции здесь - не идут жить без фиксации эти. – halfer

+0

Вы, кажется, используете 'ANY' в синтаксисе SQL. Это должно быть «И», я предполагаю? В одном из предложений также нет предыдущего пространства, что может вызвать проблемы с парсером запросов. – halfer

ответ

0

Вы можете построить строку запроса динамически, только добавляя WHERE заявления предложение, если параметр не falsy, или добавить условия в самом SQL так: WHERE (col = ? OR '' = ?) AND (col2 = ? OR '' = ?).

+0

Как это можно сделать динамически? Кажется, китайский на данный момент для меня. –

+0

'$ query =" ... "; if ($ foo) {$ query + = "col =?"; } 'и т. д. Просто если инструкции, которые создают строку. – Anonymous

+0

Мой плохой, забыл, что это был PHP. Используйте точку для конкатенации вместо плюса. – Anonymous

0

Изменить запрос, чтобы иметь либо условие AND или OR состояние как

SELECT * FROM WMC_DeLijn 
WHERE Locatie='$Locatie' 
AND Periode='$Periode' 
AND Dag='$Dag' 
AND ienst='$Dienst'; 

(ИЛИ)

SELECT * FROM WMC_DeLijn 
WHERE Locatie='$Locatie' 
OR Periode='$Periode' 
OR Dag='$Dag' 
OR ienst='$Dienst'; 
+0

С условием И все поля должны быть заполнены, с условием ИЛИ я получаю много результатов. в базе данных содержится около 6000 записей. –

Смежные вопросы