2016-04-13 2 views
0

Это мой код.PHP-форма не отправляет данные в MySQL при вводе

Я хочу, чтобы форма была отправлена ​​для отправки данных в таблицу с именем «контакты» в базе данных MySQL, которую я создал.

В таблице четыре поля; Название, имя, адрес электронной почты, запрос.

Это код, который я скопировал и отредактировал в соответствии с моим сайтом. Я новичок в .PHP!

 <?php 
    if(isset($_POST['add'])) { 
     $dbhost = 'localhost'; 
     $dbuser = 'root'; 
     $dbpass = ''; 
     $conn = mysql_connect($dbhost, $dbuser, $dbpass); 

     if(! $conn) { 
      die('Could not connect: ' . mysql_error()); 
     } 

     if(! get_magic_quotes_gpc()) { 
      $p_title = addslashes ($_POST['p_title']); 
      $p_name = addslashes ($_POST['p_name']); 
      $p_email = addslashes ($_POST['p_email']); 
     }else { 
      $p_name = $_POST['p_name']; 
      $p_email = $_POST['p_email']; 
     } 

     $p_enquiry = $_POST['p_enquiry']; 

     $sql = "INSERT INTO contacts ". "(p_name,p_email, p_enquiry, p_title 
      join_date) ". "VALUES('$p_name','$p_email',$p_enquiry,$p_title NOW())"; 

     mysql_select_db('test_db'); 
     $retval = mysql_query($sql, $conn); 

     if(! $retval) { 
      die('Could not enter data: ' . mysql_error()); 
     } 

     echo "Entered data successfully\n"; 

     mysql_close($conn); 
    }else { 
     ?> 

      <form method = "post" action = "<?php $_PHP_SELF ?>"> 
       <table width = "400" border = "0" cellspacing = "1" 
       cellpadding = "2"> 

       <tr> 
        <td width = "100"><p>Title:</p></td> 
        <td><input name = "p_title" type = "text" 
         id = "p_title"></td> 
       </tr> 

       <tr> 
        <td width = "100"><p>Name:</p></td> 
        <td><input name = "p_name" type = "text" 
         id = "p_name"></td> 
       </tr> 

       <tr> 
        <td width = "100"><p>Email:</p></td> 
        <td><input name = "p_email" type = "text" 
         id = "p_email"></td> 
       </tr> 

       <tr> 
        <td width = "100"><p>Enquiry:</p></td> 
        <td><input name = "p_enquiry" type = "text" 
         id = "p_enquiry"></td> 
       </tr> 


       <tr> 
        <td width = "100"> </td> 
        <td> </td> 
       </tr> 

       <tr> 
        <td width = "100"> </td> 
        <td> 
         <input name = "add" type = "submit" id = "add" 
          value = "Add Employee"> 
        </td> 
       </tr> 

       </table> 
      </form> 

     <?php 
    } 
    ?> 
+0

НЕ использовать 'mysql_ *' он был удален, и он больше не будет работать, используйте 'PDO' [ссылка] (http://php.net/manual/en/book.pdo.php) или' mysqli '[link] (http://php.net/manual/en/book.mysqli.php). – Tom

+1

[Little Bobby] (http://bobby-tables.com/) говорит, что [ваш сценарий подвержен риску инъекций SQL.] (Http://stackoverflow.com/questions/60174/how-can-i-prevent -SQL-инъекция-в-РНР). Даже [избегая строки] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) небезопасно! –

+1

Пожалуйста, [прекратите использование 'mysql_ *' функций] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php). [Эти расширения] (http://php.net/manual/en/migration70.removed-exts-sapis.php) были удалены в PHP 7. Узнайте о [подготовленном] (http://en.wikipedia.org/ wiki/Prepared_statement) для [PDO] (http://php.net/manual/en/pdo.prepared-statements.php) и [MySQLi] (http://php.net/manual/en/mysqli.quickstart .prepared-statements.php) и подумайте над использованием PDO, [это действительно довольно легко] (http://jayblanchard.net/demystifying_php_pdo.html). –

ответ

0

** EDIT для 4 колонок/полей **

Если OP хочет только 4 колонки (название, имя, электронная почта запрос, ака. P_title, p_name, p_email, p_enquiry), то Ниже будет работать из-за удаления join_date и соответствующего значения NOW() из запроса:

$sql = "INSERT INTO contacts (p_name, p_email, p_enquiry, p_title) VALUES ('$p_name', '$p_email', '$p_enquiry', '$p_title')"; 

** ORIGINAL **

Не зная об ошибке точной вы принимающую, я вижу, что ваш запрос неверен:

$sql = "INSERT INTO contacts ". "(p_name,p_email, p_enquiry, p_title 
     join_date) ". "VALUES('$p_name','$p_email',$p_enquiry,$p_title NOW())"; 

У вас не хватает (и требуют) запятая между $p_title и NOW(), а также их колонны идентификаторы соответственно:

$sql = "INSERT INTO contacts (p_name, p_email, p_enquiry, p_title, 
     join_date) VALUES('$p_name', '$p_email', $p_enquiry, $p_title, NOW())"; 

Я также удалил конкатенацию, поскольку это не было необходимо. И мне очень интересно, что $p_enquiry и $p_title являются строками (звучит, как они могли бы быть), так что я был бы соблазн обернуть эти значения в одинарные кавычки, а также, как и так (но только если это применимо):

$sql = "INSERT INTO contacts (p_name, p_email, p_enquiry, p_title, 
     join_date) VALUES('$p_name', '$p_email', '$p_enquiry', '$p_title', NOW())"; 

Этот будет работать без проблем, с синтаксисом. Являются ли их значения строками? Или они основаны на цифрах на определение столбцов?

+0

OP сказал, что есть 4 столбца, а не 5. ¯ \\ _ (ツ) _/¯ –

+0

Ах да, я вижу это сейчас. Я прошу различать с OP тогда! лол. Я вижу 5. – Marcus

+1

Я тоже, и прокомментировал как таковой. Я удалил комментарий, основываясь на повторном чтении сообщения. Боюсь, что здесь больше, чем кажется на первый взгляд. –

0

Прежде всего, как говорят другие, используйте PDO, это очень важно и облегчает жизнь. Я думаю, что проблема, с которой вы сталкиваетесь, связана с p_title, который может быть установлен или не установлен при выполнении инструкции insert. Кроме того, похоже, что это будет строка, но она не заключена в кавычки. Это вызовет проблемы с оператором SQL.

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