gpt4 book ai didi

php - 向 URL 添加第二个 $_GET 标记会破坏 MySQL ORDER BY 子句

转载 作者:行者123 更新时间:2023-11-29 19:49:17 25 4
gpt4 key购买 nike

在学校数据库项目的第一次迭代中,我成功创建了一个页面,当使用 $_GET 标记单击每个表列的标题时,该页面将对 MySQL 表进行排序。第一次,我为我正在访问的数据库表中的每个主条目创建了一个单独的页面。

对于第二次迭代,我选择使用一个页面,该页面将显示与以前相同的信息,但会在使用 $_GET 标记链接到页面时从数据库中进行选择。

我试图找出为什么以下代码能够正确对我显示的表格进行排序:

    $query = "SELECT Review.username, Review.service_date, Review.review_date, 
Review.review_rating, Review.review_details, Review.service_id,
Plumber.company_name
FROM Review
INNER JOIN Plumber
ON Review.service_id = Plumber.service_id
WHERE Plumber.service_id='1'";

if ($_GET['sort'] == 'username') {
$query .= " ORDER BY username";
} else if ($_GET['sort'] == 'service_date') {
$query .= " ORDER BY service_date DESC";
} else if ($_GET['sort'] == 'review_date') {
$query .= " ORDER BY review_date DESC";
} else if ($_GET['sort'] == 'review_rating') {
$query .= " ORDER BY review_rating DESC";
} else {
$query .= " ORDER BY review_date";
}

$response = @mysqli_query($db, $query);

$plumber;

if($response){
echo '<table align="left" cellspacing="5" cellpadding="8" width="50%">
<td align="left"><b><a href="Plumber1.php?sort=username">Username</a></b></td>
<td align="left"><b><a href="Plumber1.php?sort=service_date">Service Date</a></b></td>
<td align="left"><b><a href="Plumber1.php?sort=review_date">Review Date</a></b></td>
<td align="left"><b><a href="Plumber1.php?sort=review_rating">Review Rating</a></b></td>
<td align="left"><b>Review Details</b></td>';

while($row = mysqli_fetch_array($response)) {
echo '<tr><td align="left">' .
$row['username'] . '</td>
<td align="left">' . $row['service_date'] . '</td>
<td align="left">' . $row['review_date'] . '</td>
<td align="left">' . $row['review_rating'] . '</td>
<td align="left">' . $row['review_details'] . '</td>';

echo '</tr>';

$plumber = $row['company_name'];
}

echo '</table>';
} else {
echo "Couldn't issue database query<br />";
echo mysqli_error($db);
}

当此代码不起作用时:

    $query2 = "SELECT Review.username, Review.service_date, Review.review_date, 
Review.review_rating, Review.review_details, Review.service_id,
Plumber.company_name
FROM Review
INNER JOIN Plumber
ON Review.service_id = Plumber.service_id
WHERE Plumber.service_id='$plumber_id'";

$response2 = @mysqli_query($db, $query2);

if ($_GET['sort'] == 'username') {
$query2 .= " ORDER BY username";
} else if ($_GET['sort'] == 'service_date') {
$query2 .= " ORDER BY service_date DESC";
} else if ($_GET['sort'] == 'review_date') {
$query2 .= " ORDER BY review_date DESC";
} else if ($_GET['sort'] == 'review_rating') {
$query2 .= " ORDER BY review_rating DESC";
} else {
$query2 .= " ORDER BY username";
}

if ($response2) {

echo '<table align="left" cellspacing="5" cellpadding="8" width="50%">
<td align="left"><b><a href="Plumber.php?id='.$plumber_id.'&sort=username">Username</a></b></td>
<td align="left"><b><a href="Plumber.php?id='.$plumber_id.'&sort=service_date">Service Date</a></b></td>
<td align="left"><b><a href="Plumber.php?id='.$plumber_id.'&sort=review_date">Review Date</a></b></td>
<td align="left"><b><a href="Plumber.php?id='.$plumber_id.'&sort=review_rating">Review Rating</a></b></td>
<td align="left"><b>Review Details</b></td>';

while($row = mysqli_fetch_array($response2)) {
echo '<tr><td align="left">' .
$row['username'] . '</td>
<td align="left">' . $row['service_date'] . '</td>
<td align="left">' . $row['review_date'] . '</td>
<td align="left">' . $row['review_rating'] . '</td>
<td align="left">' . $row['review_details'] . '</td>';

echo '</tr>';

$plumber = $row['company_name'];
}

echo '</table>';
} else {
echo "Couldn't issue database query<br />";
echo mysqli_error($db);
}

两个页面之间的唯一区别是,我没有在 SQL 查询的 WHERE 子句中静态定义变量,而是向其传递从 $_GET 标记中提取的值,并重命名了 View 变量.

在定义 $query2 之后立即添加 '$query2 .= "ORDER BY var";' 将成功地按我用于 var 的任何行对表进行排序。我在 if block 的每一行中使用了 header('location: url') 来确定 $_GET['sort'] 的值传入以确保到达每一行并成功重定向每一行。

有人发现我做错了什么吗?我的教授(因此我也是)并不担心使用准备好的语句等正确的做法 - 它只需要具有功能性即可。我只是想找出问题所在。

对这本小说感到抱歉,如果我违反了一些规则,这是我第一次在这里发帖

Here's what the table looks like for reference

最佳答案

我已经转义了你的变量。这将在大多数情况下解决查询问题。

$query2 = "SELECT Review.username, Review.service_date, Review.review_date, 
Review.review_rating, Review.review_details, Review.service_id,
Plumber.company_name
FROM Review
INNER JOIN Plumber
ON Review.service_id = Plumber.service_id
WHERE Plumber.service_id='".$plumber_id."'";



$response2 = @mysqli_query($db, $query2);

这只是一个很好的建议:

switch ($_GET['osrt']) {
case 'something':
$query = "";
break
case 'somethingelse':
$query = "";
break;
default:
$query = "";
break;
}

关于php - 向 URL 添加第二个 $_GET 标记会破坏 MySQL ORDER BY 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40861387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com