PHP、HTML和SQL:如何获取表行号并作为参数发送

PHP、HTML和SQL:如何获取表行号并作为参数发送,php,html,mysql,Php,Html,Mysql,我连接到数据库并获取表。我创建了一个HTML表来列出我所有的公司,并在每一行的末尾创建了一个“Read”、“Update”和“Delete”的锚标记。如果我单击其中一个公司旁边的“Read”,我如何获得该特定公司(或该特定行号),以便将其作为参数传递。我想在那一行显示那家公司的信息。谢谢 ` 试试看{ $sql=“从军团中选择公司”; $sql=$db->prepare($sql); $sql->execute(); $corps=$sql->fetchAll(PDO::FETCH_ASSOC)

我连接到数据库并获取表。我创建了一个HTML表来列出我所有的公司,并在每一行的末尾创建了一个“Read”、“Update”和“Delete”的锚标记。如果我单击其中一个公司旁边的“Read”,我如何获得该特定公司(或该特定行号),以便将其作为参数传递。我想在那一行显示那家公司的信息。谢谢 `

试试看{
$sql=“从军团中选择公司”;
$sql=$db->prepare($sql);
$sql->execute();
$corps=$sql->fetchAll(PDO::FETCH_ASSOC);
如果($sql->rowCount()>0){
$table=”“.PHP\u EOL;
foreach($corps作为$corp){
$table.='.$corp['corp'].'';
}
$table.=“.PHP\u EOL.”;
}否则{
$table=“没有公司。”.PHP\u EOL;
}
}捕获(PDO$e){
die(“获取公司时遇到问题”);
}`

根据以下代码生成所需的操作

首先检查(GET)数组是否为空且是否等于操作,并使用双引号(带转义双引号)正确回显
$corp
变量

请注意,我在
$表的末尾添加了
PHP\u EOL
。=''…
,以便生成干净的HTML,这有助于在查看HTML源代码时进行调试。相信我,这是一个很好的调试工具

让代码显示在一个长行中,是非常难处理的

旁注:我将保留“创建”链接,由您自行决定,因为这在问题中没有提及,并且可能是一个涵盖范围太广的主题

我还可以假设您的
Lab3
(文件夹)正在使用索引文件,并将用于执行所有这些操作

如果
。/Lab3?action
不适合您,那么您可能需要使用类似
。/Lab3/index.php?操作…
。/Lab3/your_file.php?操作…

$table = "<table>" . PHP_EOL;
foreach ($corps as $corp) {

    $table .= "<tr><td>" . $corp['corp'] . "</td><td>" . "<a href=\"../Lab3?action=read&corp=$corp\">Read</a>" . "</td><td>" . "<a href=\"../Lab3?action=update&corp=$corp\">Update</a>" . "</td><td>" . "<a href=\"../Lab3?action=delete&corp=$corp\">Delete</a>" . "</td></tr>" . PHP_EOL;
}
$table .= "</table>" . PHP_EOL . ' <a href="../Lab3">Create</a>';


if(!empty($_GET['action'])){

    if($_GET['action'] == 'read'){
        echo $read = "<br>Record to read: " . $_GET['corp'];
        // You can place your query here
    }

    if($_GET['action'] == 'update'){
        echo $update = "<br>Record to update: " . $_GET['corp'];
        // You can place your query here
    }

    if($_GET['action'] == 'delete'){
        echo $delete = "<br>Record to delete: " . $_GET['corp'];
        // You can place your query here
    }


}
$table=”“。PHP_EOL;
foreach($corps作为$corp){
$table.=.$corp['corp']...'.PHP\u EOL;
}
$table.=“”。PHP_EOL.';
如果(!empty($\u GET['action'])){
如果($_GET['action']=='read'){
echo$read=“
要读取的记录:”..$\u GET['corp']; //您可以将查询放在此处 } 如果($\u GET['action']=='update'){ echo$update=“
要更新的记录:”..$\u GET['corp']; //您可以将查询放在此处 } 如果($\u GET['action']=='delete'){ echo$delete=“
要删除的记录:”..$\u GET['corp']; //您可以将查询放在此处 } }
但是,我必须声明,这对SQL注入是开放的,您需要使用一个准备好的语句。您已经在使用PDO,这是一个好的开始

注意:使用
$var=(int)$\u GET['integer\u array'](例如),也有助于防止SQL注入,如果该值是整数。如果不是,则不能对字符串值使用
(int)

参考资料:


修改SQL以获取每个公司的id及其名称。然后在href中,添加所需的id作为$\u GET参数。然后,引用的页面可以读取该值,并使用它来查询数据库中的详细信息。这个问题和它的状态是怎么回事?如果它不起作用,你从来没有评论过。我不习惯花那么多时间来发布详细的答案。@JoeT我会告诉你你做错了什么,这个
和其他。
$corp
变量将显示为变量,而不是预期的记录id数字或字符串或其变量代表的任何内容。这就是为什么我否决了你的答案。我在这里对你说实话,我没有越轨或不礼貌。
$table = "<table>" . PHP_EOL;
foreach ($corps as $corp) {

    $table .= "<tr><td>" . $corp['corp'] . "</td><td>" . "<a href=\"../Lab3?action=read&corp=$corp\">Read</a>" . "</td><td>" . "<a href=\"../Lab3?action=update&corp=$corp\">Update</a>" . "</td><td>" . "<a href=\"../Lab3?action=delete&corp=$corp\">Delete</a>" . "</td></tr>" . PHP_EOL;
}
$table .= "</table>" . PHP_EOL . ' <a href="../Lab3">Create</a>';


if(!empty($_GET['action'])){

    if($_GET['action'] == 'read'){
        echo $read = "<br>Record to read: " . $_GET['corp'];
        // You can place your query here
    }

    if($_GET['action'] == 'update'){
        echo $update = "<br>Record to update: " . $_GET['corp'];
        // You can place your query here
    }

    if($_GET['action'] == 'delete'){
        echo $delete = "<br>Record to delete: " . $_GET['corp'];
        // You can place your query here
    }


}