0

送信されたフォームをチェックするこのスクリプトがあります。

すべてのフィールドがすべて入力されているかどうかを確認し、ユーザーが以前にフォームを送信したことがあるかどうかを確認します。また、入力されたデータがすでにデータベースにあるかどうかもチェックします。

入力したデータがデータベースにあるかどうかを確認しようとすると、常にfalseが返されます。

私の質問は次のとおりです: POST 値が同じかどうかを効率的に確認するにはどうすればよいですか?

コード:

<?php
error_reporting(E_NOTICE ^ E_ALL);
$Name = $_POST['name'];
$ID = $_POST['id'];
$Topic_1 = $_POST['1'];
$Topic_2 = $_POST['2'];
$Topic_3 = $_POST['3'];
$Topic_4 = $_POST['4'];
$Topic_5 = $_POST['5'];
$Topic_6 = $_POST['6'];
$Topic_7 = $_POST['7'];
$Topic_8 = $_POST['8'];
$Topic_9 = $_POST['9'];
$Topic_10 = $_POST['10'];
$Topic_11 = $_POST['11'];
$Topic_12 = $_POST['12'];
$Topic_13 = $_POST['13'];
$Topic_14 = $_POST['14'];
$Topic_15 = $_POST['15'];
$IP = $_SERVER['REMOTE_ADDR'];

$Connect = new mysqli("127.0.0.1", "root", "", "Data");
$Check = 'SELECT * FROM Submissions WHERE School_ID = "'.$ID.'" AND IP = "'.$IP.'"';
$Insert = 'INSERT INTO Submissions (Name, School_ID, Topic_1, Topic_2, Topic_3, Topic_4, Topic_5, Topic_6, Topic_7, Topic_8, Topic_9, Topic_10, Topic_11, Topic_12, Topic_13, Topic_14, Topic_15, IP) VALUES ("'.$Name.'", "'.$ID.'", "'.$Topic_1.'", "'.$Topic_2.'", "'.$Topic_3.'", "'.$Topic_4.'", "'.$Topic_5.'", "'.$Topic_6.'", "'.$Topic_7.'", "'.$Topic_8.'", "'.$Topic_9.'", "'.$Topic_10.'", "'.$Topic_11.'", "'.$Topic_12.'", "'.$Topic_13.'", "'.$Topic_14.'", "'.$Topic_15.'", "'.$IP.'")';

if($Name && $ID != "")
{
    if($Result = $Connect->query($Check))
    {
        $Rows = $Result->num_rows;
        if($Rows == 0)
        {
            if($_POST != $_POST)
            {
                if($Go = $Connect->prepare($Insert))
                {
                    if($Go->execute())
                    {
                        echo 'Thanks';
                    }
                    else
                    {
                        echo 'There Was An Error';
                    }
                }
                else
                {
                    echo 'There Was An Error';
                }
            }
            else
            {
                echo 'No Two Values Can Match.';
            }
        }
        else
        {
            echo 'You Cant Vote Twice.';
        }
        $Result->close();
    }
    else
    {
        echo 'There Was An Error.';
    }
}
else
{
    echo 'Please Fill Out All Fields';
}
$Connect->close();
4

6 に答える 6

0

ステートメントifは次のようになります

if($name != "" && $check != "")
于 2013-09-02T20:28:48.870 に答える
0

あなたが探しているのは次のとおりです

$_POST['1'] = 'a';
$_POST['2'] = 'b';
$_POST['3'] = 'c';
$_POST['4'] = 'a';
$_POST['5'] = 'd';

$results = array_unique($_POST);
var_dump($results);

戻り値:

array
  1 => string 'a' (length=1)
  2 => string 'b' (length=1)
  3 => string 'c' (length=1)
  5 => string 'd' (length=1)
于 2013-09-02T21:35:29.030 に答える
0

2 つの POST 値が同じではないかどうかを確認するには:

array_diff($_POST, array_unique($_POST));
于 2013-09-02T20:57:25.573 に答える
0

エラーは次のとおりです。

if($_POST != $_POST)

代わりに、データベースからの結果を $_POST と比較したいでしょう。

$Row = $Result->fetch_assoc();
if($Row != $_POST)
于 2013-09-02T20:33:01.467 に答える
0

You can't really so easily check if a person did submit a form before.

One way is to add one more hidden field to form if the request came with POST.

Something like that:

    <form method="POST" action="">
        <?php 
        if(isset($_POST['submit'])) { 
            echo '<input type="hidden" name="second_post" value="1">'; 
        } ?>
        <!-- Other form items -->
        <input type="submit" name="submit" value="1">
    </form>

Then you can check is it a second time with:

if(isset($_POST['second_post'])) {
   // Second time of form post;
} else {
   // First (or zero) time post.
}
于 2013-09-02T20:48:17.007 に答える
0

比較を行う前に、変数に対して var_dump() を使用して、実際に何が含まれているかを確認してください。

var_dump($Name);
var_dump($ID);
exit();

次に、負または正の一致を確認します。

if( !empty($Name) && empty($ID) ){
exit('ah, name filled in but not id ...');
} 

別のファイルでそれを偽装することもできます。

<?php
$Name = 'Bob';
$ID = ''; // or use 0 or any test you want

var_dump($Name);
var_dump($ID);

if( !empty($Name) && empty($ID) ){
exit('ah, name filled in but not id ...');
} 

このように問題を分離することで、段階的に開発し、何かを機能させ、目的地に到着するまでさらに行を追加することができます。

于 2013-09-02T20:37:51.540 に答える