Я пытаюсь запросить базу данных и отобразить результаты. Запрос основан на информации из html-формы. Однако, когда я ввожу имя, такое как john, в форму, для которой таблица имеет 2 записи с этим именем, я получаю 0 результатов. Я не знаю, в чем проблема.
Вот html-форма:
<form action="cust_details_search.php" method="post">
Name :
<input type="text" name="name_search" id="name_search" >
Email :
<input type="email" name="email_search" id ="email_search" >
Phone no. :
<input type="phone" name="phone_search" id="phone_search" >
Address :
<input type="text" name="address_search" id="address_search" >
City :
<input type="text" name="city_search" id="city_search" >
State :
<input type="text" name="state_search" id="state_search" >
<br> <br>
Country :
<input type="text" name="country_search" id="country_search">
Product Enquired for :
<input type="text" name="prod_search" id="prod_search">
<input type="submit" value="Submit">
</form>
И файл php:
<?php
$server = "127.0.0.1";
$dbUsername = "root";
$dbPassword = "";
//create connection
$dbconn = new mysqli($server, $dbUsername, $dbPassword, $dbname);
$name_search = $_POST['name_search'];
$email_search = $_POST['email_search'];
$phone_search = $_POST['phone_search'];
$address_search = $_POST['address_search'];
$city_search = $_POST['city_search'];
$state_search = $_POST['state_search'];
$country_search = $_POST['country_search'];
$prod_search = $_POST['prod_search'];
$run_query = mysqli_query($dbconn,
"SELECT *
FROM CustomerDetails
WHERE (Name LIKE '%.$name_search.%')
OR ('Phone no.' LIKE '%.$phone_search.%')
OR ('Address' LIKE '%.$address_search.%')
OR ('City' LIKE '%.$city_search.%')
OR ('State' LIKE '%.$state_search.%')
OR ('Country' LIKE '%.$country_search.%')
OR ('Product Enq. For' LIKE '%.$prod_search.%')
OR ('Email' LIKE '%.$email_search.%')");
?>
<html>
<head>
<title>Search Resutls</title>
<style>
body {
background-color: rgb(131,41,54);
}
h1 { color:#FFFFFF
}
h2 { color:#FFFFFF
}
p { color:#FFFFFF
}
</style>
</head>
<body>
<center>
<h2> Customer Details </h2>
<table style="width:100%">
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Phone no. </th>
<th>Address </th>
<th>City </th>
<th>State </th>
<th>Country</th>
<th>Product Enquired for </th>
<th>Follow up details </th>
</tr>
</thead>
<tbody>
<?php
while($result = mysqli_fetch_assoc($run_query)) {
?>
<tr>
<td><?php echo $result['Name'] ?> </td>
<td><?php echo $result['Email'] ?></td>
<td><?php echo $result['Phone no.'] ?></td>
<td><?php echo $result['Address'] ?></td>
<td><?php echo $result['City'] ?></td>
<td><?php echo $result['State'] ?></td>
<td><?php echo $result['Country'] ?></td>
<td><?php echo $result['Product Enq. For'] ?></td>
<td><?php echo $result['Follow Up'] ?></td>
</tr>
<?php } ?>
</tbody>
</table>
</center>
</body>
</html>
Любая помощь приветствуется. Заранее спасибо!
Вы используете конкатенатор PHP .
но вам не нужно использовать строку с двойными кавычками. $variables
автоматически расширяются в строке с двойными кавычками, поэтому попробуйте
$run_query = mysqli_query($dbconn,
"SELECT *
FROM CustomerDetails
WHERE (Name LIKE '%$name_search%')
OR ('Phone no' LIKE '%$phone_search%')
OR ('Address' LIKE '%$address_search%')
OR ('City' LIKE '%$city_search%')
OR ('State' LIKE '%$state_search%')
OR ('Country' LIKE '%$country_search%')
OR ('Product Enq For' LIKE '%$prod_search%')
OR ('Email' LIKE '%$email_search%')");
Также некоторые из ваших имен столбцов имели .
в них? Я предполагаю, что эти имена столбцов фактически не содержат точек. Однако, если это так, я предлагаю удалить их, отредактировав свою схему.
Ваш скрипт широко открыт для атаки SQL Injection Даже если вы избегаете ввода, это небезопасно! Используйте подготовленные параметризованные операторы в
MYSQLI_
илиPDO
API.
"...LIKE '%".$name_search."%')..."
LIKE '%.$name_search.%')
Удалить точки, например, так:LIKE '%$name_search%')