2

我的表单有问题,我正在显示数据库中的两行,它们使用相同的表单(使用 while 循环)将值放回数据库。问题在于显示的第二行或底行有效很好,但是例如,如果我单击底部的值 1,则顶部的一个有效,只有当我单击值 1 并且之后停止工作时,顶部的一个才有效。

我的网站是www.albsocial.us/test/seria.php自己检查一下,我在这种情况下包含了一个视频http://www.youtube.com/watch?v=xGwPd_P65oM

<?php
session_start();
include("connect.php");

$query = "SELECT * FROM test ORDER BY `id` ASC 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 "<br/>",$id,") " ,$home, " - ", $away;

    echo "

    <form action='seria.php' method='post' id='$id'>
    <select name='test'>        
        <option value=\"\">Parashiko</option>
        <option value='1'>1</option>
        <option value='X'>X</option>
        <option value='2'>2</option>            
        <input type='submit' name='submit' value='Submit'/>
        <input type='hidden' name='id' readonly value='".$row['id']."'/>

   </select>        

    <br/>

    </form>";        

    echo "Totali ", $sum = $win+$lose+$draw, "<br/><hr/>"; 

} 

if (!empty($_POST)) {

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

  $select = isset($_POST['test']) ? $_POST['test']:false;

  switch ($select) {
    case 1:
    $select = $win + $select;
    mysql_query("UPDATE test SET win='$select' WHERE id='$id'");
    break;

    case 'X':
    $select = '1';
    $select = $draw + $select;
    mysql_query("UPDATE test SET draw='$select' WHERE id='$id'");
    break;

    case 2:
    $select = '1';
    $select = $lose + $select;
    mysql_query("UPDATE test SET lose='$select' WHERE id='$id'");
    break;
    default:
  }
  header('Location: ../test/seria.php');
}

?>
4

2 回答 2

0

似乎您想通过在所选选项中添加 1 来更新获胜、失败、平局的值,作为建议,我已对代码进行了一些更改,希望它能起作用。

<?php

session_start();

include("connect.php");

$submit = @$_POST["submit"];
$tests = @$_POST["test"];

// If the user submitted the form.
// Do the updating on the database.
if (!empty($submit))
{
    if (count($tests) > 0)
    {
        foreach ($tests as $test_id => $test_value)
        {
            switch ($test_value)
            {
                case 1:
                    mysql_query("UPDATE test SET win = win + 1 WHERE id = '$test_id'");
                break;

                case 'X':
                    mysql_query("UPDATE test SET draw = draw + 1 WHERE id = '$test_id'");
                break;

                case 2:
                    mysql_query("UPDATE test SET lose = lose + 1 WHERE id = '$test_id'");
                break;

                default:
                    // DO NO THING.
            }
        }
    }

    // Redirect to seria page.
    header('Location: ../test/seria.php');
}

// Whenever this wiil be fetched it will be updated.
$query = "SELECT * FROM test ORDER BY `id` ASC 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 "<br/>",$id,") " ,$home, " - ", $away;

    echo "

    <form action='seria.php' method='post'>

    <select name='test[$id]'>        
        <option value=\"\">Parashiko</option>
        <option value='1'>1</option>
        <option value='X'>X</option>
        <option value='2'>2</option>
   </select>

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

    <br/>

    </form>";        

    echo "Totali ", $sum = $win+$lose+$draw, "<br/><hr/>"; 

} 

?>

最好的问候,胡萨姆。

于 2013-06-15T08:02:53.293 回答
0

问题是您正在使用 while 循环来显示 HTML 表单,因此当提交表单并尝试访问$_POST['test']它时,只会收到最后一个值,因为 HTML 会覆盖这些值。

所以你要做的就是把字段的名称从testto更改为test[],现在发生的事情是当你提交表单时,它会出现错误$_POST['test][0]$_POST['test'][1]等等。索引为 0 的所有值都将具有第一个字段的值,并且全部为 1具有第二种形式的价值,依此类推。

希望我有道理:)。

于 2013-06-15T07:00:30.523 回答