2

フォームに問題があります。同じフォームを使用して (while ループを使用して) DB から 2 つの行を表示しています。問題は、表示される 2 番目または一番下の行が機能することです。結構ですが、たとえば、一番下の値1をクリックすると上のものは機能し、一番上のものは値1をクリックした場合にのみ機能し、その後は機能しなくなります。

私のウェブサイトはwww.albsocial.us/test/seria.phpで、自分でチェックしてください。

<?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

問題は、while ループを使用して HTML フォームを表示していることです。そのため、フォームが送信されてアクセスしようとすると$_POST['test']、HTML が値を上書きするため、最後の値しか受信しません。

testしたがって、フィールドの名前を からに変更するだけでtest[]、フォームを送信すると 、 などのエラーが発生し$_POST['test][0]$_POST['test'][1]インデックス 0 のすべての値が最初のフィールドの値になり、すべて 1 になります。 2 番目の形式などの値を持ちます。

私が理にかなっていることを願っています:)。

于 2013-06-15T07:00:30.523 に答える
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 に答える