【问题标题】:Generate buttons in loop using php使用 php 在循环中生成按钮
【发布时间】:2014-09-10 20:39:31
【问题描述】:

我目前正在编写一个用于捕获联系人数据的网络应用程序。

它可以显示来自 mysql 数据库的表(参见 SELECT 语句)。 现在我想动态生成用于从数据库中删除特定行的按钮。 它可以显示按钮,但它们不起作用。

我使用变量 $id 来命名不同的按钮“rowButton1”、“rowButton2”等等。 在下一步中,如果单击按钮,我想删除该行。

如何在下面的 if 语句中处理特定行中的按钮?

            $res = mysql_query("SELECT id, type_id, title, visible FROM field ORDER BY step, pos");
            echo '<table border="1">';
            while ($row = mysql_fetch_assoc($res)) {
                $id = $row['id'];
                echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['type_id'] . "</td>";
                echo "<td>" . $row['title'] . "</td>";
                echo "<td>" . $row['visible'] . "</td>";
                echo('<td><input type="submit" name="rowButton'.$id.'" value="Delete"/> </td>');
            }
            echo "</table>";

            if(post('rowButton'.$id) =="Delete"){
                    $del = mysql_query("DELETE FROM field WHERE id=$id");
                    echo'<p>Entry was succesfully deleted</p>';
            }

【问题讨论】:

  • post() 是做什么的?
  • 如果你只想要 PHP,你也必须在循环中创建一个表单。
  • 您应该使用 PHP 来生成按钮。但是使用 JavaScript 来处理点击时发生的事情。
  • 对不起,这里是post函数:function post($key){ return(isset($_POST[$key]) ? htmlspecialchars($_POST[$key]) : ""); }

标签: php sql loops button dynamically-generated


【解决方案1】:

基本上,您必须通过 javascript 指定触发按钮时会发生什么(即获取按钮的 id,然后 ajax 调用您的 php 脚本),然后在单独的脚本中处理删除。现在我认为您正在混合您网站的前端和后端。 A brief explanation of frontend vs backend

【讨论】:

    【解决方案2】:

    您需要将您的if 移动到您的while 中,并进行一些其他调整...

            $res = mysql_query("SELECT id, type_id, title, visible FROM field ORDER BY step, pos");
            echo '<table border="1">';
            while ($row = mysql_fetch_assoc($res)) {
                if(post('rowButton'.$row['id']) =="Delete"){
                    $del = mysql_query("DELETE FROM field WHERE id=" . $row['id']);
                    $deleted = '<p>Entry ' . $row['id'] . ' was succesfully deleted</p>';
                } else {
                    echo "<tr>";
                    echo "<td>" . $row['id'] . "</td>";
                    echo "<td>" . $row['type_id'] . "</td>";
                    echo "<td>" . $row['title'] . "</td>";
                    echo "<td>" . $row['visible'] . "</td>";
                    echo '<td><input type="submit" name="rowButton'. $row['id'] .'" value="Delete"/> </td>';
                    echo "</tr>";
                }
            }
            echo "</table>";
            echo $deleted;
    

    【讨论】:

      【解决方案3】:

      要点:

      1 )您发布的代码有一个开始的&lt;tr&gt; 标签,但它永远不会结束

      2) 如果您使用按钮生成行和列,那么按钮应该执行的操作应该由 JavaScript、jQuery 处理。

      3) 您没有提及您的 post() 正在做什么,因此不清楚它为什么或如何返回字符串“Delete”

      你应该怎么做?

      1 ) 在创建按钮时为每个按钮提供一个唯一的 ID,在您的情况下为 id 您从 mysql 获取

      2) 在你的按钮标签中插入onmousedown = "some_function(this.id)"

      3) 在函数中获取要删除的行的id

      4) 通过 jQuery $.post() 将其发送到 php

      5) 获取 php 中的 id 将其插入 sql 查询以删除行

      你完成了! 希望你明白了

      【讨论】:

        【解决方案4】:

        在 PHP 中提交输入类型将执行一个带有 &lt;form&gt; 标签的 php 文件。 See

        并且您要发送到将执行的 php 文件的所有数据必须在表单标记之间。 例如:

        <html>
        <body>
        
        <form action="extraction.php" method="post">
            Number 1: <input type="text" name="en1"><br>
            Number 2: <input type="text" name="en2"><br>
            <input type="submit">
        </form>
        
        <form action="sum.php" method="post">
            Number 1: <input type="text" name="sn1"><br>
            Number 2: <input type="text" name="sn2"><br>
            <input type="submit">
        </form>
        
        
        </body>
        </html>
        

        在第一个 from 块中,表单标签将执行 extract.php 文件并传递 en1 和 en2。 在第二种形式块中,标签将执行 sum.php 文件并传递 sn1 和 sn2。

        您不能将 en1 或 en2 值传递给 sum.php,同样也不能将 sn1 和 sn2 传递给 extract.php。

        所以基本上你需要为每一行添加一个表单标签或使用 JavaScript onclick 触发器。

        【讨论】:

          【解决方案5】:

          你为什么不使用

           if(isset($_POST['rowButton'.$id]))
           {    }
          

          代替

          if(post('rowButton'.$id) =="Delete")
          {   }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-01-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多