2013-09-02 2 views
0

У меня есть этот сценарий, который проверяет представленную форму.

Он проверяет, заполнены ли все поля и проверяет, отправил ли пользователь форму ранее. Он также проверяет, находятся ли введенные данные в базе данных или нет.

Когда я пытаюсь проверить, находятся ли введенные данные в базе данных, он всегда возвращает false.

Мой вопрос: Как я могу эффективно проверить, совпадают ли значения POST?PHP Сравнение переменных возвращает false каждый раз

Код:

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

О милость, что это 'else' бедствий. Я приведу пример того, как это исправить ... – m59

+1

Что это должно делать? '$ _POST! = $ _POST' –

+1

И вы не используете подготовленные заявления.Это очень опасный код !!! – m59

ответ

0

Ваше if заявление должно выглядеть

if($name != "" && $check != "") 
+0

Я не пытаюсь понять, не равны ли они им, пытаясь увидеть, равны ли они равны –

+0

Я попробовал демонстрационный скрипт с вашим сравнением, 'if ($ Name && $ Check! =" "' И он всегда возвращал false. Это было решение, которое я разработал. –

+0

Кстати, использование функции 'empty' лучше, чем сравнение с' '" ' –

0

Вот ошибка:

if($_POST != $_POST) 

Вы, вероятно, хотите, чтобы сравнить результат с БД с $ _POST.

$Row = $Result->fetch_assoc(); 
if($Row != $_POST) 
+0

im, сравнивая, что каждый $ _POST не соответствует друг другу –

+0

Нет,' if ($ _ POST! = $ _POST) 'сравнивает массив' $ _POST' с самим собой, который всегда является истинным. –

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 ...'); 
} 

Разделительные проблемы, как это поможет вам развить пошагово, получить что-то работает, а затем добавить несколько строк до прибытия в пункт назначения.

0

Вы не можете так легко проверить, действительно ли кто-то подавал форму.

Один из способов - добавить еще одно скрытое поле для формирования, если запрос пришел с POST.

Нечто подобное:

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

Затем вы можете проверить это во второй раз с:

if(isset($_POST['second_post'])) { 
    // Second time of form post; 
} else { 
    // First (or zero) time post. 
} 
0

Чтобы проверить, не два значения POST одинаковы:

array_diff($_POST, array_unique($_POST)); 
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) 
Смежные вопросы