我的问题是,如果用户键入的值不在我的数据库中,页面将保持空白。我想显示一条信息,说明他们的邮政编码无效。我浏览了其他帖子,似乎无法将其与我的代码配合使用。
用户在文本框中搜索以找出其邮政编码的交货"价格",即搜索m6,并在表中返回m6-0.50。如果说他们键入了sk1,这不是交付区域的一部分,我想显示一条消息
我所做的如下:
index.php
<section id="post">
<p id="post"> postage calculator for manchester: </P>
<?PHP
session_start();
echo 'total cost £'. $_SESSION['postage'];
?>
<form action="shop.php" method="post">
<input class="text" type="text" name="postsub" min="0">
<input class="button" type="submit" name="postsub1" value="postsub" >
</form>
</section>
process.php:
function button6() {
$search_value = $_POST["postsub"];
$codequery = "SELECT * FROM postage WHERE postcode LIKE '%$search_value%'";
// connect to database
$dbh= new PDO('mysql:host='.$hostname.';dbname='.$dbname,$username,$password);
//generate SQL query
$result=$dbh->prepare($codequery);
//execute query
$result->execute();
// display result
echo '<table id="tab">';
while($row=$result->fetch()){
echo '<tr>';
echo '<td>'.$row['postcode'].'</td>';
echo '<td>'.$row['price'].'</td>';
echo '</tr>';
if (mysqli_num_rows($result)==0) { echo "no result"; }
}
echo '</table>';
}
这就是它在积极搜索中的返回方式,我只想要邮政编码和价格,然后当它不是任何一个时,只显示没有结果:
no resultno resultno resultno resultno resultno resultno result
m1 0.50
m2 0.50
m3 0.70
m4 0.70
m5 1
m6 1
m7 1.20
试试这个:
<?php
function button6() {
$search_value = $_POST["postsub"];
$codequery = "SELECT * FROM postage WHERE postcode LIKE '%$search_value%'";
// connect to database
$dbh= new PDO('mysql:host='.$hostname.';dbname='.$dbname,$username,$password);
//generate SQL query
$result=$dbh->prepare($codequery);
//execute query
$result->execute();
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo '<tr>';
echo '<td>'.$row['postcode'].'</td>';
echo '<td>'.$row['price'].'</td>';
echo '</tr>';
}
} else {
echo "No results";
}
}
?>
您的函数有很多问题。一个简单的修复方法是删除无效的mysqli_num_rows()
和if
语句并参数化SQL。您还应该在函数外部连接一次,然后将连接传递到函数中。
最好的选择通常是将所有行提取到一个数组中,然后根据该数据生成一个if
语句。如果$data
中没有值,则显示一些消息。
function button6(PDO $dbh) {
$search_value = $_POST["postsub"];
$codequery = "SELECT * FROM postage WHERE postcode LIKE ?";
//generate SQL query
$result = $dbh->prepare($codequery);
//execute query
$result->execute(["%$search_value%"]);
$data = $result->fetchAll(PDO::FETCH_ASSOC);
if ($data) {
// display result
echo '<table id="tab">';
foreach ($data as $row) {
echo '<tr>';
echo '<td>'.$row['postcode'].'</td>';
echo '<td>'.$row['price'].'</td>';
echo '</tr>';
}
echo '</table>';
} else {
echo 'No results!';
}
}
要连接PDO,只需将这段代码放在应用程序中的一个位置即可。
$pdo = new PDO("mysql:host=localhost;dbname=$dbname;charset=utf8mb4", $username,$password, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false
]);
然后,当您调用函数时,只需将其作为参数传递即可。
button6($pdo);