显示URL变量与数据库ID对应的每一行

时间:2013-12-06 09:58:29

标签: php mysql sql

我有一个动态生成的网址:

https://mywebsite.co.uk/report.php?taskid=25&rep=1&rep=2&rep=3

我可以检索任务ID的变量并代表:

if (isset($_GET['taskid'])) { $taskid = $_GET['taskid']; }
if (isset($_GET['rep'])) { $referenceID = $_GET['rep']; }

我要做的是在页面上创建一个SQL语句,根据URL中的代表编号选择一行。例如:

SELECT TASK_ID, ID, NAME FROM mytable WHERE TASK_ID = $taskid AND ID = $referenceID

然而,当我回显$ referenceID的结果时,它始终是最后一个rep,所以在这种情况下3.如何从数据库中选择ID = 1,2&的行。 3?

然后我想显示每一行,所以它会像:

<table>
$result = mysqli_query($con,"SELECT TASK_ID, ID, NAME FROM mytable WHERE TASK_ID = $taskid AND ID = $referenceID");
while($row = mysqli_fetch_array($result))
{
$ID = $row['ID'];
$NAME = $row['NAME'];
print "<tr><td>$ID</td><td>$NAME</td></tr>";
}
</table>

此查询应在表中返回3行,每行包含ID AND NAME。

我们将不胜感激。

3 个答案:

答案 0 :(得分:1)

首先,您需要将参数名称从rep更改为rep [] 这将导致PHP $ _GET ['rep']返回一个数组。

然后你需要内爆数组以获得带逗号的字符串:

if (isset($_GET['rep'])) { 
    $referenceID = implode(',',$_GET['rep']); 
}

您必须将SQL语法更改为:

SELECT TASK_ID, ID, NAME FROM mytable WHERE TASK_ID = $taskid AND ID IN ($referenceID)

答案 1 :(得分:-1)

尝试此查询

$result = mysqli_query($con,"SELECT TASK_ID, ID, NAME FROM mytable WHERE TASK_ID = $taskid AND (ID <= $referenceID and ID>= 1)");

答案 2 :(得分:-1)

您应该使用数组样式的URL参数,例如

https://mywebsite.co.uk/report.php?taskid=25&rep%5B%5D=1&rep%5B%5D=2&rep%5B%5D=3

然后$_GET['rep']将是一个数组,你可以这样做:

$referenceIDs = implode(',', array_map(array($con, 'real_escape_string'), $_GET['rep']));
$sql = "SELECT TASK_ID, ID, NAME
        FROM mytable 
        WHERE TASK_ID = $taskid 
        AND ID IN ($referenceIDs)";