首页 > 解决方案 > 如何从while循环中获取唯一的按钮ID?(PHP)

问题描述

首先这是我的代码:

session_start();
require_once "config.php";
$email = $_SESSION["email"];
$result = mysqli_query($link,"SELECT * FROM cuponai WHERE gmail='$email' AND panaudoti=0");

echo "<table border='1'>
<tr>
<th>Cupono kodas</th>
<th>Apply code</th>
</tr>";

while($row = mysqli_fetch_array($result))
{
echo "<tr> ";
echo "<td>" . $row['cuponas'] . "</td>";
echo "<td> <form method='post'><input type='submit' name='". $row['cuponas'] ."' value='submit'></from></td>";
echo "</tr>";
}
echo "</table>";
if(isset($_POST['???????'])) {
$sql = "UPDATE cuponai SET panaudoti=1 WHERE cuponas='????????????' ";

if ($link->query($sql) === TRUE) {
  echo "YOU DID IT WOO";
} else {
  echo "Error updating record: " . $link->error;
    }
}
mysqli_close($link);
?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
</head>
<body>

</body>
</html>

问号中的部分是我苦苦挣扎的地方......基本上我正在制作这个网站,您可以在其中看到您购买的优惠券,每个优惠券附近都有一个应用按钮,因此您基本上有一个列表并需要应用它们应用它们后,我希望它也刷新页面,并且应用的优惠券消失并在数据库中标记为已使用。但是我一直在摸不着头脑,并试图用 javascirpt 使按钮独一无二,但无济于事,希望你们中的一些人能在这里找到解决方案?

- 对不起意大利面代码

标签: javascriptphphtmljquery

解决方案


对于您提供的代码,您可以在表单中添加隐藏的输入元素。

使用相同的名称并将值设置为您想要的唯一 ID。此输入的值和名称将被发送到文件的 PHP 部分,您可以$_POST像这样在数组中访问它;$_POST['name_of_input']

简而言之,您必须对代码进行以下调整以使其按预期工作;

改变这个

echo "<td> <form method='post'><input type='submit' name='". $row['cuponas'] ."' value='submit'></from></td>";

对此

echo "<td> <form method='post'><input type='hidden' name='couponid' value='". $row['cuponas'] ."'><input type='submit' name='". $row['cuponas'] ."' value='submit'></from></td>";

然后改变这个

if(isset($_POST['???????'])) {
$sql = "UPDATE cuponai SET panaudoti=1 WHERE cuponas='????????????' ";

对此

if(isset($_POST['couponid'])) {
$sql = "UPDATE cuponai SET panaudoti=1 WHERE cuponas='".$_POST['couponid']."' ";

您的$_POST['couponid']遗嘱将保存您的数据,$row['cuponas']并且您的代码应该按您的预期工作。

超出问题范围的一些额外说明;

1 . 您当前在<!DOCTYPE html>标记之前回显您在 PHP 中创建的 HTML。尽管浏览器会对此进行纠正,但这不是正确的 HTML 形式。

与其在文档顶部回显所有内容,您可能希望将其存储在一个变量中并在标签内回显它<body>

而不是这个;

echo "<table border='1'>
<tr>
<th>Cupono kodas</th>
<th>Apply code</th>
</tr>";

你可以使用;

$html_to_echo = "<table border='1'>
<tr>
<th>Cupono kodas</th>
<th>Apply code</th>
</tr>";

要添加到这个变量,你可以使用这样的东西;

$html_to_echo .= "<tr> ";

然后在页面的 HTML 部分;

<body>
    <?php echo $html_to_echo; ?>
</body>

像这样在 PHP 文档中交织 PHP 和 HTML 是可能的。

2 . 尽管在您的问题的评论中已经提到过,但这里有一个额外的 SQL 注入警告,供将来通过的人使用。

警告:您对SQL 注入非常开放,应该使用参数化的准备好的语句,而不是手动构建查询。它们由PDOMySQLi提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,您仍然有损坏数据的风险逃避是不够的


推荐阅读