2017-01-26 5 views
2

Как вы ищете имя или что-то вроде ключевого слова и ожидаете много результатов?Поиск имени в PHP

Мол, когда вы ищете Mark,
Вы ждете, чтобы, как это:
Марк Цукерберг
Марк Хамиль
Марк Fischbach
...

Но когда я делаю запрос, он отображает только один для меня.

Я попытался использовать множество различных предложений SQL и других вещей, но все же дает мне один результат из этого. Кстати, я использую PDO как мой обработчик базы данных.

Это мои коды:

<?php 
require_once '../../assets/conn.db.php'; 
require_once '../../assets/init.php'; 
require_once '../../assets/main.func.php'; 

if($_POST){ 
    $namesearch = $_POST['name']; 

    $sql = "SELECT * FROM `student_info` WHERE username LIKE ? OR username LIKE ?"; 
    $checkstmt = $conn->prepare($sql); 
    $checkstmt->execute(array("%{$namesearch}%","%{$namesearch}%")); 
    $result = $checkstmt->fetch(PDO::FETCH_ASSOC); 

    if($result){ 
    echo " 
    <table border='1' class='text-align: center'> 
     <tr> 
     <th>Name</th> 
     <th>Phone</th> 
     <th>Address</th> 
     <th>Username</th> 
     <th>Action</th> 
     </tr> 
     <tr> 
     <td>{$result['name']}</td> 
     <td>{$result['phone']}</td> 
     <td>{$result['address']}</td> 
     <td>{$result['username']}</td> 
     <td><a href='grades.php?user=".$result['StudentID']."'>+</a> Add Grades</td> 
     </tr> 
    </table> <br> 
    "; 
    } 
} 

?> 

<form method="post"> 
    <input type="text" name="name" placeholder="Search for a student"> 
    <input type="submit" value="Search!"> 
</form> 
+0

Вы только забираете одну («следующую») строку. Вам нужно будет зациклиться и извлечь их все. например 'while ($ result = $ checkstmt-> fetch (...) {...' – Jeff

ответ

2

Ваш запрос возвращает все необходимые результаты, но только получать одиночные данные. Г-н К. О. Роллинг дал вам общее представление о том, как перебирать результаты, давайте применим, что к вашим конкретным проблемам:

require_once '../../assets/conn.db.php'; 
require_once '../../assets/init.php'; 
require_once '../../assets/main.func.php'; 

if($_POST){ 
    $namesearch = $_POST['name']; 

    $sql = "SELECT * FROM `student_info` WHERE username LIKE ? OR username LIKE ?"; 
    $checkstmt = $conn->prepare($sql); 
    $checkstmt->execute(array("%{$namesearch}%","%{$namesearch}%")); 
    $result = $checkstmt->fetch(PDO::FETCH_ASSOC); 

    echo " 
    <table border='1' class='text-align: center'> 
     <tr> 
     <th>Name</th> 
     <th>Phone</th> 
     <th>Address</th> 
     <th>Username</th> 
     <th>Action</th> 
     </tr>"; 
    while($data = $checkstmt->fetch(PDO::FETCH_ASSOC)){ 
    echo " 
     <tr> 
     <td>{$result['name']}</td> 
     <td>{$result['phone']}</td> 
     <td>{$result['address']}</td> 
     <td>{$result['username']}</td> 
     <td><a href='grades.php?user=".$data['StudentID']."'>+</a> Add Grades</td> 
     </tr> 
    "; 
    } 
    echo "</table> <br>"; 
} 

код не тестировалось. В while на каждой итерации вы инициализируете $data текущим элементом и оцениваете его логически. Если элемента больше нет, тогда он будет ложным и цикл завершится. В противном случае он получит предмет и напишет tr.

Дальнейшее усовершенствование:

$sql = "SELECT * FROM `student_info` WHERE username LIKE ? OR username LIKE ?"; 
    $checkstmt = $conn->prepare($sql); 
    $checkstmt->execute(array("%{$namesearch}%","%{$namesearch}%")); 

Обратите внимание здесь, что вы проверяете то же самое в два раза, что не очень оптимально. Улучшение:

$sql = "SELECT * FROM `student_info` WHERE username LIKE ?"; 
    $checkstmt = $conn->prepare($sql); 
    $checkstmt->execute(array("%{$namesearch}%")); 

Также целесообразно использовать список столбцов вместо * в выборе.

+0

Является ли 'foreach' может быть заменой на некоторое время, и есть ли разница в производительности или производительности с' foreach' против 'while' loop? – astronomicalXoom

+1

Чтобы иметь возможность использовать foreach, вам нужно иметь набор для итерации. В этом случае у вас нет такого набора, но вы можете получить его с помощью fetchAll. Если вы это сделаете, вы будете способный итерировать результат, см. http://php.net/manual/ro/pdostatement.fetchall.php –

+1

@astronomicalXoom, в основном разница состоит из различий, выполняемых внутри цикла. В нашем случае foreach и while будет то же самое по существу, поэтому разница незначительна, если таковая имеется. –

4

Запрос SQL является правильным, чтобы вывести все элементы результата вы должны перебрать $ результата.

Пример:

while($data = $result->fetch_array()) 
{ 
    echo $result["name"]; 
}