2013-04-08 2 views
-2

У меня есть следующая форма, которая позволяет пользователю искать задания. Поиск работает нормально и возвращает результаты, за исключением того, что я не могу получить форму, чтобы возвращать ВСЕ результаты для определенного поля. 40 000 + вариант для зарплаты также не работает.Возврат данных SQL из формы

<form name="search" action="jobsearch.php" method="post"> 
    <table><tr><td class="value"><select id="JobType" name="JobType"><option value="*">Job Type</option><option value="Permanant">Permanant</option> 
                               <option value="Temporary">Temporary</option></select> 
                               <option value="*">Both</option></select></td></tr> 
    <tr><td class="value"><select id="Industry" name="Industry"><option value="*">Industry</option> 
<option value="Farming">Farming</option> 
<option value="Childcare">Childcare</option> 
<option value="Emergency Services">Emergency Services</option> 
<option value="Goverment">Goverment</option> 
<option value="Computing">Computing</option> 
<option value="*">All</option></select></td></tr> 
    <tr><td class="value"><select id="County" name="County"><option value="*" selected="selected">Location</option> 
<option value="North Yorkshire">North Yorkshire</option> 
<option value="East Yorkshire">East Yorkshire</option> 
<option value="South Yorkshire">South Yorkshire</option> 
<option value="West Yorkshire">West Yorkshire</option> 
<option value="*">All Areas</option></select></td></tr> 
    <tr><td class="value"><select id="Salary" name="Salary"><option value="">Salary</option> 
<option value="15000 <= 19999">£15,000 - £19,999</option> 
<option value="20000 <= 29999">£20,000 - £29,999</option> 
<option value="30000 <= 39999">£30,000 - £39,999</option> 
<option value="40000 <=">£40,000 +</option></select></td></tr> 
    <tr><td class="value submit-button"><input name="Submit" type="submit" class="button" value="Submit"></td></tr></table> 
</form> 

РНР выглядит следующим образом

<?php 
include_once('db.php'); 
$sql = "SELECT * FROM Job WHERE JobType='" . $_POST['JobType'] . "' AND Industry='" . $_POST['Industry'] . "' AND County='" . $_POST['County'] . "' AND Salary='" . $_POST['Salary'] . "' ORDER BY JobID"; 
$query = mysqli_query($con,$sql); 
$repeat = "Displaying jobs that are:<br /><strong> " . $_POST['JobType'] . " </strong>within<strong> " . $_POST['Industry'] . " </strong>in the county of<strong> " . $_POST['County'] . " </strong>with a salary of £<strong> " . $_POST['Salary'] . "</strong>."; 
echo "$repeat<hr>"; 
while ($row = mysqli_fetch_array($query)) { 
echo "<strong>Job ID</strong><li>$row[JobID]</li><br /> 
     <strong>Job Title</strong><li>$row[JobTitle]</li><br /> 
     <strong>Description</strong><li>$row[JobDescription]</li><br /> 
     <strong>Industry</strong><li>$row[Industry]</li><br /> 
     <strong>Full/Part time</strong><li>$row[JobType]</li><br /> 
     <strong>Salary £</strong><li>$row[Salary]</li><br /> 
     <strong>County</strong><li>$row[County]</li><br /> 
     <strong>Town</strong><li>$row[Town]</li><hr>"; 
} 

mysqli_close($con); 
?> 
+0

Добро пожаловать к SO. Вы должны уменьшить свой вопрос до одной, ответной и * конкретной * проблемы. Кроме того, покажите нам, что вы пробовали и что не сработали, и т. Д. Мы не можем сделать всю работу за вас. –

ответ

0

если вы используете Salary='" . $_POST['Salary'] то запрос становится Salary='40000 <=' и ваш запрос будет пытаться найти значение, где Salary='40000 <=' так же содержит ваша база данных такой записи

+0

В базе данных нет значения '40000 <='. Я пытаюсь найти код, который принесет результаты более 40000. Я попытался удалить «метки из кода, но это также не возвращает никаких результатов из базы данных. Любые советы будут очень признательны. –

+0

Какова ваша структура таблицы базы данных для нее – mukund

1

Вы не дезактивируют переменные $ _POST, прежде чем добавлять их в запрос.

Это утечка безопасности высокого риска.

1) Вы должны

mysqli_real_escape_string($_POST['your values']); 

: т.е.

$sql = "SELECT * FROM Job WHERE " 
     ."JobType='" .mysqli_real_escape_string($_POST['JobType']) ."' AND " 
     ."Industry='" .mysqli_real_escape_string($_POST['Industry'])."' AND " 
     ."County='" .mysqli_real_escape_string($_POST['County']) ."' AND " 
     ."Salary='" .mysqli_real_escape_string($_POST['Salary']) ."' " 
     ."ORDER BY JobID"; 

до или при добавлении их к вашему запросу. Если вы не можете добавить вредоносные команды sql в свой запрос через свои входные данные формы. Такие атаки называются SQL injection attacks ...

2) «40000 < =» проблема ... Обычно она должна работать ... Но лучше быть на безопасной стороне: Делая значения опций, как 15, 20, 30, 40 ... чем короче, тем меньше места они занимают в вашей базе данных.

Запись HTML будет как:

<select id="Salary" name="Salary"> 
<option value="">Salary</option> 
<option value="15">£15,000 - £19,999</option> 
<option value="20">£20,000 - £29,999</option> 
<option value="30">£30,000 - £39,999</option> 
<option value="40">£40,000 +  </option> 
</select> 

Поле зарплаты в таблице базы данных йор может быть 2 символа теперь ...

Для вывода записи построен таким образом:

while ($row = mysqli_fetch_array($query)) { 

    switch($row['Salary']){ 
    case '15': $sa = "£15,000 - £19,999"; break; 
    case '20': $sa = "£20,000 - £29,999"; break; 
    case '30': $sa = "£30,000 - £39,999"; break; 
    case '40': $sa = "£40,000 +"; break; 
    default : $sa = "Not indicated"; 
    } 

    echo "<strong>Job ID</strong><li>$row[JobID]</li><br /> 
     <strong>Job Title</strong><li>$row[JobTitle]</li><br /> 
     <strong>Description</strong><li>$row[JobDescription]</li><br /> 
     <strong>Industry</strong><li>$row[Industry]</li><br /> 
     <strong>Full/Part time</strong><li>$row[JobType]</li><br /> 
     <strong>Salary </strong><li>$sa</li><br /> 
     <strong>County</strong><li>$row[County]</li><br /> 
     <strong>Town</strong><li>$row[Town]</li><hr>"; 
} 

3) для того, чтобы получить результаты для определенных комбинаций поле или поля:

(я надеюсь, что я понимаю правильно, для пользователя экземпляра только дает зарплату и округ не другие данные, так что вы хотите, чтобы собрать их)

Вы должны автоматизировать построение вашего запроса, как это:

$sql = ''; 

foreach($_POST as $key => $val){   // here we build the query 
    $key = mysqli_real_escape_string(trim($key)); 
    $val = mysqli_real_escape_string(trim($val)); 
    if($val=="")continue;     // if empty skip it. 
    if($sql != '')$sql += " AND ";   // if more than one field add AND 
    $sql = "$key='$val'" 
} 

if($sql == ''){ 
    echo 'No input given to search for.'; 
    exit(0); 
} 

$sql = "SELECT * FROM Job WHERE ".$sql." ORDER BY JobID"; 
+0

Спасибо за ваш ответ. Это меня смутило, и я не уверен, что означает действительный компаратор для SQL. Будут оценены любые дополнительные рекомендации. –

+0

Отлично. Спасибо за вашу помощь. –

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