我有一个搜索页面,工作正常。搜索结果显示在带有tr hover和window.location的表中,以便将用户带到另一个页面。
我想要实现的是基于数组数据的window.location的动态链接。数据库中的所有数据属于4个不同的类别, testkat ,我想根据testkat的值将用户引导到正确的页面,然后使用' testid&# 39;填写数据。
我一直在尝试多种方法来实现我的目标,并搜索了SE,Google等,但没有运气。我对PHP很陌生,所以使用正确的搜索词可能与它有关。
从我的角度来看,我认为我必须将 testkat 的值存储在一个变量中,让我们说$ link。从那里做一个IF声明,如:
if ($results('testkat') == 'something') {
$link = "something.php?id='$testid'";
}
if ($results('testkat') == 'something_else') {
$link = "something_else.php?id='$testid'";
}
这是我的代码:
<?php
$conn = mysql_connect("localhost", "root", "") or die("Couldn't do it: ".mysql_error());
mysql_select_db("db") or die(mysql_error());
mysql_set_charset('utf8',$conn);
$query = $_POST['query'];
$query = htmlspecialchars($query);
$query = mysql_real_escape_string($query);
$raw_results = mysql_query("SELECT * FROM db WHERE (`id` LIKE '%".$query."%') OR (`name` LIKE '%".$query."%') OR (`age` LIKE '%".$query."%')") or die(mysql_error());
$count = mysql_num_rows($raw_results);
if(isset($_POST['query'])) {
echo "<br>";
echo "Your search for <span class=\"bold\">" .$query. "</span> returned " . $count . " hits";
echo "<br>";
if(mysql_num_rows($raw_results) > 0){
echo "<br>";
echo "<table class=\"tbl-text\">";
echo "<tr class=\"tablelist\"><th>Heading 1</th><th>Heading 2</th><th>#</th><th>Heading 3</th><th>Heading 4</th><th>Heading 5</th>";
while($results = mysql_fetch_array($raw_results)){
echo "<tr onclick=\"window.location='#'\" style=\"cursor:pointer\" class=\"tr-hover\">";
echo "<td class=\"bordered\">" .$results['testid'] . "</td>";
echo "<td class=\"bordered\">" .$results['testkat'] . "</td>";
echo "<td class=\"bordered\">" .$results['intnr'] . "</td>";
echo "<td class=\"bordered\">" .$results['pro'] . "</td>";
}
echo "</table>";
}
else{
}
}
?>
更新: 忘了告诉错误。当我按照我认为应该这样做的方式进行时,我在IF语句中收到一条错误消息:致命错误:函数名必须是字符串。
参考这个:
if ($results('testkat') == 'something') {
$link = "something.php?id='$testid'";
}
我了解MySQLi和PDO,正在研究它。 渴望学习,所以任何提示和技巧都非常感激:)
克里斯
答案 0 :(得分:0)
该方法看起来很好。你不需要在$ testid附近单引号
$link = "something_else.php?id=$testid";
正如你所提到的,你应该停止使用mysql,学习:)
答案 1 :(得分:0)
管理修复它,并在其他人遇到同样问题时发布。 首先,将整个内容重写为MySQLi。 然后我在WHILE LOOP之后放了一个IF语句,如下所示:
连接到数据库 - &gt;
if(isset($_POST['query'])) {
$query = $_POST['query'];
$query = htmlspecialchars($query);
$sql = $db->query("SELECT * FROM db WHERE (`?` LIKE '%".$query."%') OR (`?` LIKE '%".$query."%') OR (`?` LIKE '%".$query."%')");
$result = mysqli_query($db, sql);
$hits = $sql->num_rows;
echo "<br>";
echo "Your search for <span class=\"bold\">" .$query. "</span> returned " . $hits . " results";
echo "<br>";
if($sql->num_rows > 0){
echo "<br>";
echo "<table class=\"tbl-text\">";
while ($row = mysqli_fetch_array($sql)) {
if ($row['category'] == 'cat01'){
$link = 'cat01.php?id=' . $row['testid'] . '';
}
if ($row['category'] == 'cat02'){
$link = 'cat02.php?id=' . $row['testid'] . '';
}
if ($row['category'] == 'cat03'){
$link = 'cat03.php?id=' . $row['testid'] . '';
}
if ($row['category'] == 'cat04'){
$link = 'cat04.php?id=' . $row['testid'] . '';
}
echo "<tr onclick=\"window.location='$link'\" style=\"cursor:pointer\" class=\"tr-hover\">";
echo "<td class=\"bordered\">" .$row['testid'] . "</td>";
>>> more echo
}
可能有更有效的方法来做到这一点,但至少我得到了我所追求的结果,现在使用MySQLi脚本也更安全