我需要帮助!对于我的生活,我无法弄清楚我做错了什么......我试图建立一个简单的搜索脚本,从mysql数据库返回一些结果,并从我想要的那些结果能够点击每一个并将其传递到新页面,让我们说results.php,其中加载了该结果的详细信息,类似于我想的电子商务网站,其中显示了产品的结果,以及点击了一,该产品及其附加细节将加载到新页面中。我知道我需要将id传递给url,但我不断得到的问题是它只是将搜索结果中的最后一个id传递给url ...但是在搜索中收集所有正确的id#s结果...
我是非常新的php pdo等。我试图在网上找到一个解决方案,花了几天看,但我要么得到相同的结果,或者我得到和错误,这表明我没做对了..无论如何,这是我到目前为止所做的:
<?php
require('inc/connect/config.php');
$output = "";
if(!isset($_POST['search'])) {
$output = "";
}
if(isset($_POST['search'])) {
$search_query = $_POST['search'];
$search_query = preg_replace("#[^0-9a-z]#i", "", $search_query);
try {
$query = $db->prepare('SELECT * FROM clients WHERE name LIKE "%' . $search_query . '%" OR town LIKE "%' . $search_query . '%"');
$query->execute();
while($r = $query->fetch(PDO::FETCH_ASSOC)) {
$bname = $r['name'];
$btown = $r['town'];
$id = $r['id'];
$output .= $bname . '<br>' . $btown . '<br>' . $id . '<br><br>';
}
if($query->rowCount() < 1) {
$output = "no results found";
}
} catch (PDOException $e) {
echo "failed search";
}
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>search</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<div style="padding: 20%; text-align: center;">
<h3>search</h3>
<p>or search by <a href="categories.php">category</a></p><br>
<form method="post" action="search-test.php">
<label><3 </label><input type="text" name="search" id="search" placeholder="search by brand or town..." style="width: 40%;"><br><br>
<input type="submit" value="search">
</form>
<br>
<a href="results.php?id=<?php echo $id; ?>"><?php echo $output; ?></a>
</div>
</body>
</html>
执行搜索时,返回的结果如下:
业务1
镇
1
业务2
镇
2
business3
镇
3
但是对于url链接到results.php页面,它会为每个结果分配id为3 ...它只会将结果集中的最后一个id传递给url ...我做错了什么?请帮助!!
提前致谢
答案 0 :(得分:2)
$ id。所以,它的最终结果是你的最后一个id,这是真的。
您的第一选择是将SQL结果存储到数组中,然后在视图上循环它。您的第二选择如下:
替换:
$.ajax({
url: "/questions/" + _questionId + "/answers/" + answerId + "/edit",
method: "put",
headers: { "${_csrf.parameterName}": "${_csrf.token}" },
data: {
id : answerId,
body : body,
}
});
通过:
$output .= $bname . '<br>' . $btown . '<br>' . $id . '<br><br>';
并且:
$output .= "<a href=\"results.php?id=$id\">".$bname . '<br>' . $btown . '<br>' . $id . '</a><br><br>';
通过:
<a href="results.php?id=<?php echo $id; ?>"><?php echo $output; ?></a>
答案 1 :(得分:1)
首先,我建议您重构一下当前代码,即如何准备语句。您应该将这些参数抽象为params
方法,而不是将参数直接包含在prepare语句中;如果不这样做,就会失去准备语句的目的,并打开SQL注入!
$query = $db->prepare('SELECT * FROM clients WHERE name LIKE :query OR town LIKE :query');
$params = array(':query' => '%' . $search_query . '%');
$query->execute($params);
其次,PHP PDO有一个fetchAll
方法可以迭代,而不是多次调用fetch
。
$results = $query->fetchAll(PDO::FETCH_ASSOC);
if(count($results) < 1) {
$output = "no results found";
}
else {
for($results as $r) {
$bname = $r['name'];
$btown = $r['town'];
$id = $r['id'];
$output .= $bname . '<br>' . $btown . '<br>' . $id . '<br><br>';
}
}
最后,要回答您的错误:每次进行while循环时都会重置$id
,并以值3
退出。然后,您将内容直接输出到HTML,因此只需使用$id
的当前值(链接将包含所有内容,而不是单独包含每个结果)。相反,我建议您将链接标记添加到循环中,以便为每个结果创建单独的链接:
$output .= '<a href="results.php?id=' . $id . '">' . $bname . '<br>' . $btown . '<br>' . $id . '<br><br></a>';
然后只需通过<?php echo $output; ?>
答案 2 :(得分:0)
结果页面的链接为if(s != null){
if (s.length() > 0)
totalPriceEdit.setText(String.valueOf(qty * unitPrice));
}
}
,<a href="results.php?id=<?php echo $id; ?>">
具有存在$id
循环时的值。
在循环中,您应该为每个结果生成一个链接,或者将您传递给结果页面的while
参数中的所有ID连接起来,例如:ids
。