2016-07-22 6 views
0

Я пишу страницу PHP, которая работает на сервере и принимает несколько параметров POST и добавляет их на сервер после проверки их с помощью REGEX. По какой-то причине мой сервер (используя WAMP-сервер) показывает пустой набор результатов после успешного выполнения кода и после того, как я перенаправлен на страницу в конце.Тип данных mySQL сервера WAMP? База данных mySQL не обновляется в PHP?

Я думаю, что это может быть мой код, но может быть, возможно, это так, как настроен сервер, в настоящее время все мои столбцы имеют тип «int (11)», и я не знаю, какой тип выбрать.

<?php 
if(isset($_POST["name"]) && isset($_POST["email"]) && isset($_POST["pnumber"])){ 
    $name = $_POST["name"]; 
    $number = $_POST["pnumber"]; 
    $email = $_POST["email"]; 
    $db = new PDO("mysql:dbname=daythree", "root", ""); 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    if(preg_match("/^[0-9]{10}$/", $number) && 
     preg_match("/^[A-Za-z]{2,}[\sA-Za-z]*$/", $name) && 
     preg_match("/^[A-z0-9_\-]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z.]{2,4}$/", $email)){ 

     $sql = "INSERT INTO daythree ('name', 'email', 'number') VALUES ('. $name .', '. $email. ', '. $number .')"; 

     header("Location: evilmasterminds.php"); 
     die(); 
    } 

} 

Спасибо и приносим извинения за любые неприятности.

+0

'Int' не будет правильным выбором для' 'name' и email' и заявление SQL неправильно - возможно, следует больше как '$ sql =" INSERT INTO daythree ('name', 'email', 'number') VALUES ('{$ name}', '{$ email}', '{$ number}') ";' – RamRaider

+0

и почему, когда вы используете PDO, вы не используете подготовленные инструкции - вы отрицаете одно, что защищает от вредоносной SQL-инъекции, встраивая POST-переменные в sql? Кроме того, не используйте одиночные кавычки вокруг имен столбцов - вместо этого используйте обратную ссылку! – RamRaider

+0

Я изменил строку $ sql; Я занимаюсь только кодированием с нескольких месяцев, и это больше для меня эксперимент по редактированию баз данных для личного использования, поэтому я не беспокоюсь о его стороне безопасности. Также спасибо за помощь! :) Кстати, что я должен изменить Int? Есть немало вариантов, и я не уверен, что было бы правильно :( – JsDart

ответ

0

Не проверено, но поскольку вы используете PDO, возможно, что-то более похожее на следующее - оно должно по крайней мере указывать на вас в правильном направлении.

if(isset($_POST["name"],$_POST["email"],$_POST["pnumber"])){ 

    $name = $_POST["name"]; 
    $number = $_POST["pnumber"]; 
    $email = $_POST["email"]; 


    try{ 
     $db = new PDO("mysql:dbname=daythree", "root", ""); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     if(preg_match("/^[0-9]{10}$/", $number) && 
      preg_match("/^[A-Za-z]{2,}[\sA-Za-z]*$/", $name) && 
      preg_match("/^[A-z0-9_\-]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z.]{2,4}$/", $email)){ 


      $sql='insert into `daythree` (`name`,`email`,`number`) values (:name,:email,:number);'; 
      $stmt=$db->prepare($sql); 
      $stmt->execute(array(
       ':name'  => $name, 
       ':email' => $email, 
       ':number' => $number 
      )); 

      exit(header("Location: evilmasterminds.php")); 
     } 

    }catch(PDOException $e){ 
     exit('Error: '.$e->getMessage()); 
    } 
} 

Что касается типов столбцов name и email почти наверняка должно быть varchar в то время как number может быть int в зависимости от фактического формата, используемого в цифрах, которые вы получаете - снова столбец VARCHAR может быть более подходящим.

обновление: код изменен, чтобы учесть точки сделанные @riggsfolly относительно исключений

+0

Довольно точно, что строка подключения неверна, и она не проверена как правильно подключенная каким-либо образом – RiggsFolly

+0

Поскольку OP устанавливает MYSQL в throw execptions было бы неплохо поставить инструкции PDO в блок try/catch. – RiggsFolly

+0

Хорошая точка, хорошо сделанная @RiggsFolly – RamRaider

 Смежные вопросы

  • Нет связанных вопросов^_^