【问题标题】:PHP Error When Submited提交时出现 PHP 错误
【发布时间】:2013-06-14 00:02:16
【问题描述】:

我试图从我的数据库中显示 2 行,但我希望它是当我单击第一行单选按钮时,第一行更新.. 这没有发生……当我单击第一行时,第二行更新。 . 请自己现场查看 ---> http://albsocial.us/seria.php

  <?php

 include("connect.php");

    $query = "SELECT * FROM test ORDER BY `id` DESC LIMIT 2";
    $result = mysql_query($query);

    echo "<h2>Seria A</h2><hr/>";

    while($row = mysql_fetch_array($result)){
        $id = $row['id'];
        $home = $row['home'];
        $away = $row['away'];
        $win = $row['win'];
        $draw = $row['draw'];
        $lose = $row['lose'];


        echo $home, " - ", $away,"<br/>";

        echo "<form action='' method='post'>

        <input type='hidden' name='id' value='".$row['id']."'>

        <input type='radio' name='select' value='1'>1
        <input type='radio' name='select' value='X'>X
        <input type='radio' name='select' value='2'>2

        <input type='submit' name='submit' value='Submit'/>

        </form>
        ";

         echo $home, " -> ", $win;
         echo "<br/>Barazim  -> ", $draw,"<br/>";
         echo $away, " -> ", $lose,"<hr/>";
    }   

    $id = isset($_POST['id']) && is_numeric($_POST['id']) ? $_POST['id']:false;

    if (isset($_POST) && $_POST['select'] == 1){
        $select = $_POST['select'];
        $select = $win + $select;
        mysql_query("UPDATE test SET win='$select' WHERE id='$id'");
        header('Location: ../seria.php');
    }else if (isset($_POST) && $_POST['select'] == 'X'){
        $select = $_POST['select'];
        $select = '1';
        $select = $draw + $select;
        mysql_query("UPDATE test SET draw='$select' WHERE id='$id'");
        header('Location: ../seria.php');
    }else if (isset($_POST) && $_POST['select'] == 2){
        $select = $_POST['select'];
        $select = '1';
        $select = $lose + $select;
        mysql_query("UPDATE test SET lose='$select' WHERE id='$id'");
        header('Location: ../seria.php');
    } 

    ?>

【问题讨论】:

  • 用 id 的值输入隐藏的输入?

标签: php error-handling


【解决方案1】:

问题在于您的按钮名称。您应该为每个按钮名称提供一个彼此不同的名称,以便服务器知道正在提交哪个表单。您可以尝试根据 id 给您的按钮名称,如下所示:

<input type='submit' name='submit<?php echo $id; ?>' value='Submit'/>

然后您可以执行条件语句来查看单击了哪个按钮,如下所示:

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

【讨论】:

  • 这是另一种方法,但是解析按钮名称获取id值比较困难。相反,您必须为每个可能的按钮名称创建一个 if 语句,这似乎不太可扩展。
【解决方案2】:

您的 while 循环将始终将 $id 设置为数据集中最后一行的 id。

您需要通过某种方式为表单中的每一行提交一个 id。然后,在您检索 POST 变量时获取该值。

如果你的结构正确,你就不需要做标题重定向。

另外,我建议将 isset($_POST) 测试移到它自己的 if 语句中,这样如果没有发布任何代码,就不会执行任何代码。

这是我将如何重做它:

<?php

include("connect.php");


// if data is submitted, update database
if (!empty($_POST)) {

  $id = isset($_POST['id']) && is_numeric($_POST['id']) ? $_POST['id'] : false;
  $select = isset($_POST['select'])&&in_array($_POST['select'],array('win','lose','draw')) ? $_POST['select'] : false;

  if ($id && $select) {
    $sql="UPDATE `test` SET `$select`=`$select`+1 WHERE `id`='$id';";
    mysql_query($sql) or die(mysql_error());
  }

}


// get data from database
$query = "SELECT * FROM test ORDER BY `id` DESC LIMIT 2";
$result = mysql_query($query) or die(mysql_error());

// output
?><h2>Seria A</h2><hr/><?php

while($row = mysql_fetch_assoc($result)){

    ?><p><?=$row['home']?> - <?=$row['away']?></p>

    <form action="" method="post">
        <input type="hidden" name="id" value="<?=$row['id']?>">
        <input type="radio" name="select" value="win">1
        <input type="radio" name="select" value="draw">X
        <input type="radio" name="select" value="lose">2
        <input type="submit" name="submit" value="Submit">
    </form>

    <p><?=$row['home']?> -> <?=$row['win']?></p>
    <p>Barazim  -> <?=$row['draw']?></p>
    <p><?=$row['away']?> -> <?=$row['lose']?></p><?php

}   


?>

顺便问一下,你是如何处理“主场”和“客场”比赛的?

【讨论】:

  • 嘿,谢谢您的帮助。我应该在哪里包含 $id=isset($_POST['id'])&&is_numeric($_POST['id'])?$_POST['id']:false;在我拥有的每个提交 if 语句中?
  • 因为无论$_POST['select'] 的值如何,id 都是相同的,所以我认为您应该只添加一次,就在您的第一个 if 语句之前:if (isset($_POST) &amp;&amp; $_POST['select'] == 1){ 我已经编辑了我的答案相应地。
  • 我包含了我更新的代码.. 你也可以在 www.albsocial.us/seria.php 上单独查看@showdev
  • 在您的方法中,您需要在更新之前选择一行。我用更简化的方法更新了我的答案。我希望它有所帮助。
猜你喜欢
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 2011-07-28
  • 2014-02-25
  • 2018-11-24
相关资源
最近更新 更多