-2

ユーザーがアイテムをクリックできるプロジェクトに取り組んでいます。ユーザーが以前にクリックした場合、もう一度クリックしようとすると、機能しないか、DB に値を挿入する必要があります。最初のアイテムをクリックすると(データベースからIDで直接アイテムを表示しています)、DBに挿入され、もう一度クリックすると機能します(エラーコードが表示されます)DBに挿入されません。他のすべての項目をクリックすると、2 回目、3 回目、4 回目をクリックしてもすべてが DB に挿入されます。みんな助けてください。ありがとう

<?php

session_start();
$date = date("Y-m-d H:i:s");

include("php/connect.php");

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

if (isset($_SESSION['username'])) {

    $username = $_SESSION['username'];

    $submit = mysql_real_escape_string($_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) {
                $match = "SELECT user_id, match_id FROM match_select";
                $row1 = mysql_query($match)or die(mysql_error());
                while ($row2 = mysql_fetch_assoc($row1)) {
                    $user_match = $row2["user_id"];
                    $match = $row2['match_id'];
                }
                if ($match == $test_id) {
                    echo "You have already bet.";
                } else {
                    switch ($test_value) {
                        case 1:
                            mysql_query("UPDATE test SET win = win + 1 WHERE id = '$test_id'");
                            mysql_query("INSERT INTO match_select (user_id, match_id) VALUES ('1','$test_id')");
                        break;
                        case 'X':
                            mysql_query("UPDATE test SET draw = draw + 1 WHERE id = '$test_id'");
                            mysql_query("INSERT INTO match_select (user_id, match_id) VALUES ('1','$test_id')");
                        break;

                        case 2:
                            mysql_query("UPDATE test SET lose = lose + 1 WHERE id = '$test_id'");
                            mysql_query("INSERT INTO match_select (user_id, match_id) VALUES ('1','$test_id')"); 
                        break;
                        default:

                    }
                }
            }
        }
    }

    echo "<h2>Seria A</h2><hr/>
        <br/>Welcome,".$username."! <a href='php/logout.php'><b>LogOut</b></a><br/>";

    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>
            <br/>";        

        echo "Totali ", $sum = $win+$lose+$draw, "<br/><hr/>";
    }
} else {
  $error = "<div id='hello'>Duhet te besh Log In qe te vendosesh parashikime ndeshjesh<br/><a href='php/login.php'>Kycu Ketu</a></div>";
}

?>
4

3 に答える 3

1

あなたの問題はここにあります:

$match = "SELECT user_id, match_id FROM match_select";
$row1 = mysql_query($match)or die(mysql_error());
while ($row2 = mysql_fetch_assoc($row1)) {
    $user_match = $row2["user_id"];
    $match = $row2['match_id'];
}

正しくチェックしていません。関連する のエントリがmatch_select存在するかどうかを確認する必要がuser_idありmatch_idます。それ以外の場合は、データベースに最後に挿入された行$matchのフィールドと常に等しくなりmatch_idます。

$match = "SELECT * 
    FROM `match_select` 
    WHERE `user_id` = '<your_id>'
    AND `match_id` = '$test_id'";
$matchResult = mysql_query($match)or die(mysql_error());
if(mysql_num_rows($matchResult)) {
    echo "You have already bet.";
}

ところで、データベースの操作にPDOorを使用することを検討してください。関数は非推奨です:mysqlimysql_

http://www.php.net/manual/fr/function.mysql-query.php

于 2013-06-18T09:56:34.833 に答える
0

あなたが持っているフォーム<select name='test[$id]'>(アイテムごとに1つ)で、取得しているフォームを送信するときに$tests = $_POST["test"];、フォームでインデックスを指定する必要はなく、単に行う<select name='test[]'>ことができます<input type="hidden" value="$id"/>. 2番目の部分は、現時点ではうまくいかない検証です。クエリを使用して、アイテムがデータベースに既に存在するかどうかを簡単に確認できます

于 2013-06-18T09:51:04.107 に答える