2015-11-21 4 views
1

Я пытаюсь создать окно поиска, но когда я запустил страницу, никаких результатов поиска не появится. Я использую поля имени и семьи для поиска. поэтому мой код находится здесь:Сделать поисковую ячейку

 <fieldset class="fdex" > 
      <legend><span class="style4">لیست خدمات انجام شده</span></legend> 

      <form name="form1" dir="rtl" method="post" action=""> 
<label for="search"> جستجو </label> <br> 
<input name="search" type="text" size="40" maxlength="50" placeholder="جستجو کنید"><br /> 
<input type="radio" name="search_type" value="family" checked="checked">جستجو بر اساس فامیل<br/> 
<input type="radio" name="search_type" value="name">جستجو بر اساس نام<br/> 
<input type="submit" name="search_user_hasjob" value="جستجو"/> 
</form> 

      <?php 
if(isset($_POST['search_user_job_hasjob'])) 
{ 
$db_hostname = 'localhost'; 
$db_database = 'site'; 
$db_username = 'root'; 
$db_password = ''; 

// Create connection 
$conn = new mysqli($db_hostname, $db_username, $db_password, $db_database); 
mysqli_set_charset($conn, "utf8"); 

$field = mysql_real_escape_string($_POST['search_type']); 
$value = mysql_real_escape_string($_POST['search']); 

// Check connection 
if ($conn->connect_error) 
    die("Connection failed: " . $conn->connect_error); 

// Statement to get all clients that have job and the comments belong to it 
$sql_clientName = " 
SELECT tablesite.id_user, 
      tablesite.name, 
      tablesite.family, 
      tablesite.phone_number, 
      tablesite.email, 
      relation.comments 
FROM tablesite 
    INNER JOIN relation 
    ON tablesite.id_user=relation.user_id 
    INNER JOIN job_list 
    ON relation.job_id=job_list.job_id 
    WHERE $field LIKE '%".$value."%' 
GROUP BY tablesite.name;"; 

// Statement to get specific client job info by User id 
$sql_clientJob = " 
SELECT job_list.job_name, relation.comments 
FROM tablesite 
    INNER JOIN relation 
    ON tablesite.id_user=relation.user_id 
    INNER JOIN job_list 
    ON relation.job_id=job_list.job_id 
WHERE $field LIKE '%".$value."%' AND id_user = ?;"; 

$stmt = $conn->prepare($sql_clientName); 
$stmt->execute(); 
$output = $stmt->get_result(); 
$stmt->close(); 

// Go through all clients and print them out 
echo " 
<table width='900px'> 
<tr> 
    <td>نام</td><td>نام خانوادگی</td><td>تلفن</td><td>مشاغل</td> 
</tr> 
"; 

while ($row = $output->fetch_array(MYSQLI_ASSOC)) 
{ 
    echo " 
    <tr> 
     <td>" . $row['name'] . "</td><td>" . $row['family'] . "</td><td>" . $row['phone_number'] . "</td> 
    "; 

    // We call statement once 
    $stmt1 = $conn->prepare($sql_clientJob); 
    $stmt1->bind_param("i", $row['id_user']); 
    $stmt1->execute(); 
    $output1 = $stmt1->get_result(); 

    // Fetch the job name belong to the client 
    echo "<td>"; 
    while ($row1 = $output1->fetch_array(MYSQLI_ASSOC)) 
    { 
     echo $row1['job_name'] . ", "; 
    } 
    echo "</td>"; 

    echo '</tr>'; 
} 
echo "</table>"; 
$stmt1->close(); 
} 
?> 

</fieldset> 

Поэтому, когда я пытаюсь получить информацию, страница дает мне null. Спасибо за вашу помощь.

+0

Что я предлагаю, это проверить тип сортировки DB (я полагаю, что ваши запросы на арабском языке должны быть либо utf8_general_ci, либо utf8mb4_general_ci) и DB Engine (должен быть InnoDB). Также, пожалуйста, напишите 'var_dump ($ _ POST);' вывод во время выполнения вашего запроса. – Timofey

ответ

3

Это потому, что ваше подать название кнопки и в вашем $_POST имеет другое название:

<input type="submit" name="search_user_hasjob" value="جستجو"/> 

$ _POST не имеет то же подать имя кнопки:

if (isset($_POST['search_user_job_hasjob'])) 

Это означает, что ваше состояние делает никогда не соглашайтесь с формой отправки и не будете возвращать результаты поиска, попробуйте исправить ее, так что оба имеют такое же имя, как

if (isset($_POST['search_user_hasjob'])) 

Он должен работать


Добавление
Относно проблему в комментариях от OP с Fatal error: Call to a member function close().

Это потому, что у вас есть $stmt1->close(); из в то время как петли фигурные скобки { }, что вам нужно сделать, это переместить $stmt1->close(); внутри во время цикла, как это:

.... 
$output1 = $stmt1->get_result(); 
$stmt1->close(); 
....etc 

Это должно помочь из копать глубоко в коде анализ.

+0

эй Maytham вы здесь, я рад :) есть еще одна проблема, когда я вставляю имя или семью, которые не выходят, я вижу эту ошибку: Примечание: неопределенная переменная: stmt1 в C: \ wamp \ www \ source \ users_has_job.php в строке 270 и эта ошибка: Неустранимая ошибка: вызовите функцию-член close() для не-объекта в C: \ wamp \ www \ source \ users_has_job.php в строке 270. Мне кажется, мне нужно удалить line $ stmt1-> close(); да? – sammy

+1

Уверен, что я всегда в СО, но сейчас я выхожу, посмотрю на него скоро. Я снова вернусь. –

+1

Я обновлю свой ответ. –

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