2016-02-18 2 views
1

Я делаю этот скрипт для сохранения данных из формы в удаленную базу данных, но по некоторому Wierd причины это экономии как пустое:Сохранение пустой строки в БД

Empty data

сценария:

#FORM SECTION 
$choice; 
$email; 
$checkbox; 
$success = FALSE; 

#SQL SECTION 
$host = '*******'; 
$user = '*******'; 
$pass = '*******'; 
$db = '********'; 

$connection = new mysqli($host, $user, $pass, $db); 
$sql = "INSERT INTO clients_and_choices (email,choice) VALUES ('$email','$choice')"; 
$query = mysqli_query($connection, $sql); 

if ($_SERVER["REQUEST_METHOD"] == "POST"){ 
    $email = $_POST['email']; 
    $choice = $_POST['choice']; 

     $email = $connection->real_escape_string($email); 
     $choice = $connection->real_escape_string($choice); 

    if (mysqli_connect_errno()) 
     trigger_error(mysqli_connect_errno()); 

    if (!filter_var($email, FILTER_VALIDATE_EMAIL) OR empty($choice)){ 
     http_response_code(400); 
     echo "Houston we got a problem!"; 
     exit; 
    } 

    if ($query){ 
     $success = TRUE; 
     http_response_code(200); 
     echo 'Thank you :D'; 
    } 
    else{ 
     http_response_code(500); 
     echo "Bummer! It seems something went wrong :< If you would be so kind to try again :D"; 
    } 

    mysqli_close($connection); 

    if (isset($_GET["ajax"])) 
     echo $success ? "success" : "error"; 
} 

Когда я первый написал, используя mysql вместо mysqli он работал ... может быть, я делаю что-то неправильно, но я не могу сказать, и я не знаю, как для отладки в PHP.

+1

Этот '$ sql =" INSERT INTO clients_and_choices (адрес электронной почты, выбор) VALUES ('$ email', '$ choice') ";' принадлежит *** после ***, вы подтвердили входные данные и убедились, что они не пусто. Изменить: и убедитесь, что ваша форма использует метод post и что входы имеют соответствующие им атрибуты. Возможно, вы используете HTML-форму и PHP/SQL внутри одного и того же файла, что и приведет к этому. –

+1

Просто, чтобы проверить: что @ Fred-ii- сказал * и *, вы можете проверить, установлены ли обе переменные. * Пояс и подтяжки Ralph! * –

+0

Итак, просто инициализируя переменную, я выполняю запрос? #mindblown – Onilol

ответ

2

Как я уже говорил в комментариях:

Этот $sql = "INSERT INTO clients_and_choices (email,choice) VALUES ('$email','$choice')"; принадлежит после вы проверены входы и убедились, что они не пусты. Также убедитесь, что ваша форма использует метод post и что входы имеют соответствующие атрибуты имени.

Возможно, вы используете HTML-форму и PHP/SQL внутри одного и того же файла, что приведет к тому, что пустые значения будут вставлены в вашу базу данных сразу после загрузки страницы.

Вы также должны удалить их, поскольку нет никакого смысла использовать их:

$choice; 
$email; 
$checkbox; 

, а затем проверить empty'ness для ваших входов.

Обязательно проверьте наличие ошибок.


Я заметил возможное использование Ajax здесь if (isset($_GET["ajax"])).

Если вы устанавливаете что-либо там в отношении данных, которые должны быть переданы в db, это также вызовет преждевременный ввод данных.

+1

Большое спасибо, м8! – Onilol

+0

@Onilol * Да, вас больше всего приветствуют. Ура! * –

0

Вставить перед объявлением, какое значение должно иметь значение $ email и $ choice. Потому что у вас есть пустые строки. Теперь ваш запрос и вставка находятся в правильном положении после объявления и проверки переменных.

#FORM SECTION 
$choice; 
$email; 
$checkbox; 
$success = FALSE; 

#SQL SECTION 
$host = '*******'; 
$user = '*******'; 
$pass = '*******'; 
$db = '********'; 

$connection = new mysqli($host, $user, $pass, $db); 

if ($_SERVER["REQUEST_METHOD"] == "POST"){ 
    $email = $_POST['email']; 
    $choice = $_POST['choice']; 

    $email = $connection->real_escape_string($email); 
    $choice = $connection->real_escape_string($choice); 

    if (mysqli_connect_errno()) 
     trigger_error(mysqli_connect_errno()); 

    if (!filter_var($email, FILTER_VALIDATE_EMAIL) OR empty($choice)){ 
     http_response_code(400); 
     echo "Houston we got a problem!"; 
     exit; 
    } 

    $sql = "INSERT INTO clients_and_choices (email,choice) VALUES ('$email','$choice')"; 
    $query = mysqli_query($connection, $sql); 

    if ($query){ 
     $success = TRUE; 
     http_response_code(200); 
     echo 'Thank you :D'; 
    } else { 
     http_response_code(500); 
     echo "Bummer! It seems something went wrong :< If you would be so kind to try again :D"; 
    } 

    mysqli_close($connection); 

    if (isset($_GET["ajax"])) 
     echo $success ? "success" : "error"; 
}