【问题标题】:how to pass a value from a form control to a variable in php html when submit is pressed按下提交时如何将表单控件中的值传递给php html中的变量
【发布时间】:2016-06-17 02:00:03
【问题描述】:

我要做的是根据用户按下的按钮将值传递给变量。我创建了一个带有 while 循环的表和删除按钮,但是,正因为如此,所有按钮都具有相同的名称和 ID。当按下相应的按钮时,如何将特定的 UserID 传递给变量??

这是我的嵌入 HTML 的 PHP

<?php
    $servername = "localhost";
    $username = "root";
    $password = "A1128857795!";

    // Create connection
    $conn = new mysqli($servername, $username, $password);

    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } else{
        echo "Connected successfully";}


    mysqli_select_db($conn,'test_schema');

    $sql = "SELECT * FROM userinfo;";

    $retvalues = mysqli_query($conn, $sql);

    if(!$retvalues)
        {
            die("could not get data: " . mysqli_error());
        }


    print("<br>");
    echo "<form action='delete.php' method='POST'>";
    echo"<table border='1'>";
    echo"<tr align='center'>";
    echo "<th>ID</th>";
    echo "<th>NAME</th>";
    echo "<th>GENDER</th>";
    echo "</tr>";
    while($row = mysqli_fetch_array($retvalues, MYSQL_ASSOC))
    {   
            print("<tr>");
            echo "<td><input type='text' name='id' value='{$row['UserID']}'/></td>". " " . "<td>{$row['FirstName']}" . " " . "{$row['LastName']}</td>" .
                " " . "<td align='center'>{$row['gender']}</td>"; 
            echo "<td><input  name='Delete' value='Delete' type='submit'></td>";
            print("</tr>");
    }

    echo "</table>";
    echo "</form>";

当我按下任何按钮时,它每次都会返回表最后一行的 ID,导致 DELETE 语句总是从我的数据库中删除最后一条记录。

if(isset($_POST['id']))
    {   

        $delUID = $_POST['id'];
        $sql="DELETE FROM userinfo WHERE UserID = $delUID";
        $query = mysqli_query($conn, $sql);
        echo "DELETE FROM userinfo WHERE UserID = $delUID;";
    }
    $conn->close();
?>

欢迎任何建议。谢谢。

【问题讨论】:

  • 使用 delete 让你变得更好
  • 实际上你提交的是所有同名的行,所以php取最后一个值并删除最后一行
  • 仍然有同样的问题,我真的不明白 if 语句如何区分按下了哪个按钮,因为它们都有相同的 id 和名称。有没有更好的方法来创建这个表??
  • btw.: 密码不错,你的 IP 是多少? :D

标签: php html


【解决方案1】:

您可以在老式输入按钮的名称中使用数组,也可以只使用 &lt;button&gt; 标记来获得不同的值和标题。

<form method="post">
  <?php for($id = 1; $id <= 3 ; $id++): ?>
    <input type="submit" name="delete_a[<?php echo $id; ?>]" value="Caption of delete button a">
    <button type="submit" name="delete_b" value="<?php echo $id; ?>">Caption of delete button b</button>
    <br>
  <?php endfor; ?>
</form>
<?php
var_dump($_POST);
?>

使用数组版本,您甚至可以使用复选框和任何提交按钮一次删除多行。然后,您对数组 $_POST['delete_a']keys 感兴趣。

【讨论】:

  • 我认为假设用户 ID 以连续顺序运行,这将解决我的问题。但是如果删除了 ID = 2 的用户,则表单控件 id 将与从数据库中检索到的 id 不对应。这是正确的吗?
  • @vhdz04 这只是一个示例代码伪造用于演示目的的“获取行循环”。当然,您使用当前记录集中的真实 ID。
【解决方案2】:

我会考虑做这样的事情

<?php
$servername = "localhost";
$username = "root";
$password = "A1128857795!";

// Create connection
$conn = new mysqli($servername, $username, $password);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} else{
    echo "Connected successfully";}


mysqli_select_db($conn,'test_schema');

$sql = "SELECT * FROM userinfo;";

$retvalues = mysqli_query($conn, $sql);

if(!$retvalues)
    {
        die("could not get data: " . mysqli_error());
    }


print("<br>");
echo "<form action='delete.php' method='POST'>";
echo"<table border='1'>";
echo"<tr align='center'>";
echo "<th>ID</th>";
echo "<th>NAME</th>";
echo "<th>GENDER</th>";
echo "</tr>";
while($row = mysqli_fetch_array($retvalues, MYSQL_ASSOC))
{   
        print("<tr>");// I don't think u need to give user a chance to edit their UserID.. so I kept it in hidden type
        echo "<td>{$row['UserID']}<input type='hidden' name='userid' value='{$row['UserID']}'/></td>". " " . "<td>{$row['FirstName']}" . " " . "{$row['LastName']}</td>" .
            " " . "<td align='center'>{$row['gender']}</td>"; 
        echo "<td><input  name='Delete' value='Delete' type='submit'></td>";
        print("</tr>");
}

echo "</table>";
echo "</form>";

接收方

if(isset($_POST['Delete']))
{   

    $delUID = $_POST['userid'];
    $sql="DELETE FROM userinfo WHERE UserID = $delUID";
    $query = mysqli_query($conn, $sql);
    echo "DELETE FROM userinfo WHERE UserID = $delUID;";
}
$conn->close();

【讨论】:

  • 我可以通过这种方式使名称不同,但我如何处理我的 if(isset),。这就是我卡住的地方。
  • 我想我也写过那个..对吧兄弟..?见编辑兄弟
【解决方案3】:

@f_anto 有正确的想法。

使用查询循环创建表,但在每一行附加一个唯一的链接或按钮。

while($row = mysqli_fetch_array($retvalues, MYSQL_ASSOC)) {   
        echo "<td><input type='text' name='id' value='{$row['UserID']}'/></td>"
        . "<td>{$row['FirstName']} " . "{$row['LastName']}</td>" .
        . "<td align='center'>{$row['gender']}</td>"
        . "<td><a href='' id='$row['UserID']' class='delete-button'></td>";
}

然后使用 AJAX 调用来完成脏活。

$(".delete-button").on('click', function(e){
    e.preventDefault();
    var $id = $(this).attr("id");
    $.ajax({
      type: "POST",
      url: "delete.php",
      data: ["id": $id]
  });
});

或者类似的东西。轻例:https://jsfiddle.net/mcmullen_greg/okvrbfnx/1/

【讨论】:

    猜你喜欢
    • 2013-07-04
    • 2019-09-14
    • 1970-01-01
    • 2022-01-24
    • 2021-10-05
    • 2019-09-13
    • 1970-01-01
    • 2015-06-07
    相关资源
    最近更新 更多