【问题标题】:Post not being recieved from checkbox form php未从复选框表单php收到帖子
【发布时间】:2014-01-27 20:49:27
【问题描述】:

我从这个 jsfiddle 中显示的 HTML 代码发布到下面代码的 PHP 页面。问题是没有收到数组$_POST['selectedpost']。那是包含勾选了哪些复选框的数组。在 js 小提琴中,我将示例行添加到包含复选框的表中,因为通常这些复选框是使用 PHP 和 SQL 生成的。

<?php
include "connect2.php";

if (isset($_POST['selectedpost'])) {
$postschecked = $_POST['selectedpost'];
$length = count($postschecked);
}
else{
returnpage();
}

if (isset($_POST['deleteposts'])) {
foreach($postschecked as $post_id){
    $sql = "DELETE FROM posts WHERE post_id='$post_id'";
    mysql_query($sql);
}
returnpage();
}

if (isset($_POST['passposts'])) {
foreach($postschecked as $post_id){
    $sql = "UPDATE posts SET moderation=1 WHERE post_id='$post_id'";
    mysql_query($sql);
}
returnpage();
}

if (isset($_POST['editpost'])) {
if ($lenght==1){
    foreach($postschecked as $post_id){
        header("location:editpost.php?post_id=$post_id");
    }
}
else{
    returnpage();
}
}

if (isset($_POST['returnpost'])) {
if (isset($_POST['reasonreturned'])) {

    foreach($postschecked as $post_id){

        $sql = "SELECT description FROM posts WHERE post_id='$post_id'";
        $query = mysql_query($sql);
        $array = array();
        while ($row = mysql_fetch_array($query, MYSQL_NUM)) {
        $array[] = $row; }
        $description = "".$array[0][0];

        $description = $description . "<br/><br/><span style='color:red;font-size:18px;'>" . $_POST['reasonreturned'] . "</span>";

        $sql = "UPDATE posts SET description='$description' WHERE post_id='$post_id'";
        $query = mysql_query($sql);
    }
}
foreach($postschecked as $post_id){
    $sql = "UPDATE posts SET moderation=3 WHERE post_id='$post_id'";
    $query = mysql_query($sql);
}
returnpage();
}

if ($length){
returnpage();
}

function returnpage(){
//header("location:moderate.php");
}
?>

http://jsfiddle.net/3A6az/2/

另外需要注意的是,我知道我的代码在某些地方效率很低,而且我也知道我应该放弃 mysql 并转移到 mysqli 之类的东西。感谢您提供的任何帮助

【问题讨论】:

  • 数组,什么数组?你正在使用输入 &lt;input type='checkbox' name='selectedpost' value='404'&gt;&lt;/input&gt; 加上你不需要 &lt;/input&gt; 如果有什么你不应该使用 value='404' 除非你想作为“值”传递。您可能打算使用多个复选框并使用name='selectedpost[]'
  • 值404是我输入的一个例子,都是正常自己生成的。关于/输入的好点,谢谢,我忘记了。此外,当复选框以表单形式发布时,我认为它们传递了一个数组?
  • 如果您的复选框被命名为 name='selectedpost[]'[] 就像在 &lt;input type='checkbox' name='selectedpost[]'&gt; 中一样,他们会这样做
  • 我想指出,切换到mysqli_* 函数将是最有益的。 mysql_* 函数已弃用。为了保护自己,使用准备好的语句或 PDO 会更好。以下是如何防止 SQL 注入的指南:stackoverflow.com/q/60174
  • 我发现一个错字可能会给你带来麻烦if ($lenght==1){ 你的代码中也有$length 这个词。将其更改为if ($length==1){

标签: php html forms post checkbox


【解决方案1】:

如果您有超过 1 个复选框,则需要使用

name='selectedpost[]'

然后您可以使用 $_POST['selectedpost']; 作为数组。

希望这会有所帮助!

【讨论】:

  • 谢谢,我完全没想到!我试试看
  • 谢谢,已经解决了 :) 我知道这将是一件非常简单的事情,我会在允许的时候勾选它
  • 很高兴我能帮上忙!我喜欢绿色箭头,所以请这样做! :)
  • 刚刚意识到不,不是。恐怕他先发了,你刚刚编辑了你的第一条评论
【解决方案2】:

您正在使用不带括号的输入 &lt;input type='checkbox' name='selectedpost' value='404'&gt;&lt;/input&gt; 加上您不需要 &lt;/input&gt;

如果有什么你不应该使用value='404' 除非你想作为“值”传递。

您可能打算使用多个复选框并使用name='selectedpost[]'

即:

<input type='checkbox' name='selectedpost[]'>

使用方括号[] 被视为一个数组。


脚注:

我想指出,切换到mysqli_* 函数将是最有益的。 mysql_* 函数已弃用。

mysqli_* 函数与prepared statementsPDO 一起使用会更好,以保护自己免受SQL 注入。

这里是如何防止 SQL 注入的指南:How can I prevent SQL injection in PHP?


注意:我还发现了一个错字,可能会给你带来麻烦if ($lenght==1){

您的代码中也有 $length 这个词。改成if ($length==1){

【讨论】:

  • 赞成指出 /input 但恐怕你被打败了
  • 没关系(公平就是公平);-)。我很感激你的支持,很高兴这个问题得到了解决。 @Shard
  • @Fred-ii- 为了公平起见,我也赞成你的回答 :)
  • @Fred-ii- 太棒了!我想知道人们是否真的在这里合作并整天为彼此的答案投票......哈哈
  • 好吧,我不会“整天投票”,哈哈!但是,应得的功劳是给予的,而你的功劳绝对值得:) @Yani
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多