2015-01-19 3 views
1

Так что прошло некоторое время с тех пор, как я использовал PHP, поэтому я прошу о помощи. Я дал ему хороший снимок, но по какой-то причине моя форма не отправляется в мою базу данных. Я ударил submit и форма очистилась. Я не получаю никаких ошибок, но база данных остается пустой.PHP не отправляет в базу данных mysql

Любая помощь или предложения приветствуются.

Вот мой HTML

   <form id="contact-form" method="post"> 

      <div> 
      <label> <span>Name: *</span> 
      <input type="text" tabindex="1" name="postName" required autofocus /> 
      </label> 
      </div> 
      <div> 
      <label> <span>Email: *</span> 
      <input type="email" tabindex="2" name="postEmail" required /> 
      </label> 
      </div> 
      <div> 
      <label> <span>Telephone:</span> 
      <input type="tel" tabindex="3" name="postPhone"/> 
      </label> 
      </div> 
      <div> 
      <label> <span>Message: *</span> 
      <textarea placeholder="Include all the details you can" tabindex="5" name="postMessage" required></textarea> 
      </label> 
      </div> 
      <div> 
      <input name="formSubmit" type="submit" id="contact-submit" value="Submit" /> 
      </div> 
      </form> 

Вот мой PHP

<?php 
//show all possible errors. should be ALWAYS set to that level 
error_reporting(E_ALL); 
echo "landed at form handler<br>"; 

// sometimes buttons not being sent or gets misspelled 
if($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 
echo "here goes POST processing<br>"; 
$host = 'localhost'; 
$username = 'name'; 
$pass = 'password'; 
$dbname = 'dbname'; 

mysql_connect($host,$username,$pass); 
mysql_select_db($dbname); 

// all strings should be escaped 
// and it should be done after connecting to DB 
$name = mysql_real_escape_string($_POST['postName']); 
$email = mysql_real_escape_string($_POST['postEmail']); 
$phone = mysql_real_escape_string($_POST['postPhone']); 
$message  = mysql_real_escape_string($_POST['postMessage']); 

$query = "INSERT INTO ContactUs 
     (NAME, EMAIL, PHONE, MESSAGE) 
      VALUES ('$name','$email','$phone','$message')"; 

echo $query; 
// always run your queries this way to be notified in case of error 
$result = mysql_query($query) or trigger_error(mysql_error().".  Query: ".$query); 
var_dump($result); 
} 
?> 
+0

Какая у вас ошибка? Что такое ваш PHP version_ – Skatox

+1

Если ваша форма и SQL находятся в двух отдельных файлах, то это нормально, что ваша форма очищается и ничего не добавляется, так как у вас нет действий для файла в вашей форме. –

+0

PHP версия 5.4.36 – SteveMills04

ответ

2

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

$link = new MySQLi('localhost','username','password','database'); 

    if(isset($_POST['postName'],$_POST['postEmail'],$_POST['postPhone'],$_POST['postMessage'])&& $_POST['postName'] !="" && $_POST['postEmail'] !="" && $_POST['postPhone'] !="" && $_POST['message'] !=""){ 
     $name = $_POST['postName']; 
     $email = $_POST['postEmail']; 
     $phone = $_POST['postPhone']; 
     $message = $_POST['postMessage']; 
     if($query = $link->prepare("INSERT INTO ContactUs (name,email,phone,message) VALUES(?,?,?,?)")){ 
      $query->bind_param('ssss',$name,$email,$phone,$message); 
      $query->execute(); 
      $query->close(); 
      return true; 
     }else{ 
      return false; 
     } 
    }else{ 
     return false; 
    } 

Этот скрипт возвращает true, если он успешный.

Возвращает false, если неисправность.

Возвращает false, если какой-либо из входов оставлен пустым.

Вы можете изменить их return_true/false к echo 'Success';илиecho 'Failure';, если вы предпочитаете.

Надеюсь, это поможет.

+0

Это потрясающе, спасибо! Вопросы, что делает?,?,?,? делать и «ssss» необходимо? Я еще не получил этого, но я все еще работаю. Спасибо, что сделали это для меня. – SteveMills04

+0

Знаки вопросов являются заполнителями полей, в которые вы вставляете данные. Причина, по которой мы используем вопрос, заключается в том, чтобы предупредить риск инъекции. «Ssss», который вы видите, сообщает php, что ваша переменная является строковым типом. Поскольку мы передаем 4 столбчатых переменных, мы определяем там 4 типа строк. То же самое касается вопросительных знаков. Они должны соответствовать количеству переменных, которые вы вставляете в базу данных. @ user3758073 –

+0

Вы можете прочитать документацию по подготовленным операциям MySQLi здесь => [http://php.net/manual/en/mysqli.prepare.php](http://php.net/manual/en/mysqli. prepare.php) @ user3758073 –

2

MySQL устарел, используйте вместо MySQLi.

$servername = "localhost"; 
$username = "username"; 
$password = "password"; 
$dbname = "myDB"; 

$conn = new mysqli($servername, $username, $password, $dbname); 

$sql = "INSERT INTO ContactUs(NAME, EMAIL, PHONE, MESSAGE) 
VALUES ('".$name."','".$email."','".$phone."','".$message."')"; 

$conn->query($sql) 

$conn->close(); 

Подробнее о вставке с MySQLi .

Примечание: Существует также процедурный MySQLi, более похожий на то, к чему вы привыкли, вместо объектно-ориентированного аналога в моем примере.

Примечание2: Кроме того, как fred-ii отметил, если у вас нет action атрибута в вашем <form> РНР должен быть в той же странице, однако, судя по тому, что у вас есть эта строка:

if($_SERVER['REQUEST_METHOD'] == 'POST') 

в начале файла я просто предположил, что это так.

Note3: Также, как указано Spencer, mysql устарел, но он все еще может работать. Во всяком случае, я бы настоятельно рекомендовал вам обновить MySQLi или PDO.

Надеюсь, это поможет!

+0

Да 'mysqli' - хорошая идея для использования, но это не отвечает на вопрос пользователей. –

+0

@Spencer Wieczorek Да, извините, но объяснение было бы в том, что если mysql устарел, он не сработает. Вот почему он должен использовать MySQLi или PDO и попробовать! Это первый подход к исправлению кода без видимых ошибок :) – undefined

+0

'mysql' все еще работает, да, это устарело, это не значит, что он не работает. –

0

лучше использовать

if(isset($_POST['formSubmit']) 
{ 
//your code goes here 
} 

это будет убедиться, что ваш код будет работать, как только Yout Представлять кнопка была нажата и данные формы были представлены на странице

убедитесь, что все на том же страница с вашим не имея какой-либо атрибут действия на форме

дальше, вы должны ознакомиться с помощью mysqli_ * так mysql_ * является deppreciated

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