2016-07-23 79 views
-4

我使用PHP mysqli来访问和插入记录到数据库,也准备了语句,但某处有一个错误,我无法弄清楚..指出错误将是非常没什么太大的帮助麻烦插入记录到数据库使用PHP mysqli oops

mailer.php

<?php 

class Submit { 

    const DB = 'localhost', 
      USER = 'test', 
      PASS = '123456', 
      DB_NAME = 'testing'; 


    private $mysql; 


    public function __construct() { 

     $this->mysql = new mysqli(self::DB , self::USER , self::PASS , self::DB_NAME); 

     if ($this->mysql->connect_errno) { 
      echo "Error: " . $this->mysql->connect_error; 
      echo "<br>"; 
      echo "Error code: " . $this->mysql->connect_errno; 
     } 


    } 

    public function addRecord($record) { 

     $status = false; 

     $query = "INSERT INTO mytable (name,message) VALUES (?,?)"; 
     $stmt = $this->mysql->prepare($query); 

     if ($stmt) { 

      $stmt->bind_param('ss', $record->name , $record->message); 

      if ($stmt->execute()) { 
       $status = ($stmt->affected_rows == 1) ? true : false; 

       $stmt->fetch_object(); 
       $stmt->close(); 
      } 
     } 

     return $status; 
    } 

} 


$submit = new Submit(); 

$result = null; 

if (isset($_POST['submit'])) { 
    $name = isset($_POST['name']) ? trim($_POST['name']) : ''; 
    $message = isset($_POST['message']) ? trim($_POST['message']) : ''; 

    $result = $submit->addRecord($name,$message); 

    if ($result) { 
     echo "Message Saved"; 


    } 
} 

而且我使用来自外部文件,其中包含内的

的index.php

形式和脚本Ajax调用
<!DOCTYPE html> 
<html> 
     <head> 
      <title>Contact Form | PHP, AJAX and MySQL</title> 
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" /> 
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> 
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> 
     </head> 
     <body> 
      <br /><br /> 
      <div class="container" style="width:500px;"> 
       <form id="submit_form"> 
        <label for="name">Name</label> 
        <input type="text" name="name" id="name" class="form-control" /> 
        <br /> 
        <label for="message">Message</label> 
        <textarea name="message" id="message" class="form-control"></textarea> 
        <br /> 
        <input type="submit" name="submit" id="submit" class="btn btn-info" value="Submit" /> 
        <span id="error_message" class="text-danger"></span> 
        <span id="success_message" class="text-success"></span> 
       </form> 
      </div> 
     </body> 
</html> 
<script> 

jQuery(function($){ 

     $('form#submit_form').submit(function(e){ 
      e.preventDefault(); 
      var name = $(this).find('#name').val(), 
       message = $(this).find('#message').val(); 

      if(name == '' || message == '') { 
       $('#error_message').html("All Fields are required"); 
      } 

      else { 
       $('#error_message').html(''); 
       $.ajax({ 
        url:"mailer.php", 
        method:"POST", 
        data:{ 
         name: name, 
         message: message 
        }, 
        success:function(data){ 
          $("form").trigger("reset"); 
          $('#success_message').fadeIn().html(data).fadeOut(3000); 

        } 
       }); 
      } 
     }); 
}); 

</script> 
+0

“* ..但冥冥之中有一个错误。*” 好吧。什么错误?请在问题中粘贴错误。 –

+0

没有具体的错误..我其实意味着代码中的错误.....记录没有被插入到数据库中 –

回答

0

你给你的addRecord()方法提供了2个参数,但它只需要1个。但是,它似乎期望一个你没有初始化的对象,所以我调整了它,所以它需要你给出的两个参数它。

public function addRecord($name, $message) { 

    $status = false; 

    $query = "INSERT INTO mytable (name,message) VALUES (?,?)"; 
    $stmt = $this->mysql->prepare($query); 

    if ($stmt) { 

     $stmt->bind_param('ss', $name , $message); 

     if ($stmt->execute()) { 
      $status = $stmt->affected_rows === 1; 
     } 
    } 
    return $status; 
} 

此外,我除去的方法一些不必要的步骤:

$status = ($stmt->affected_rows == 1) ? true : false; 
$status = $stmt->affected_rows === 1; 

比较本身会返回一个布尔值,因此没有必要使用显式的结构。

$stmt->fetch_object(); 
$stmt->close(); 

从来没有使用过它来获取物体是一种浪费。 当离开方法的范围时,垃圾收集器将取消设置stmt。

代码来测试功能:

class Submit { 

const DB = 'localhost', 
     USER = 'test', 
     PASS = '123456', 
     DB_NAME = 'testing'; 
    private $mysql; 

    public function __construct() { 
     $this->mysql = new mysqli(self::DB , self::USER , self::PASS , self::DB_NAME); 
     if ($this->mysql->connect_errno) { 
      echo "Error: " . $this->mysql->connect_error; 
      echo "<br>"; 
      echo "Error code: " . $this->mysql->connect_errno; 
     } 
    } 

    public function addRecord($name, $message) { 
     $status = false; 
     $query = "INSERT INTO mytable (name,message) VALUES (?,?)"; 
     $stmt = $this->mysql->prepare($query); 
     if ($stmt) { 
      $stmt->bind_param('ss', $name , $message); 
      if ($stmt->execute()) { 
       $status = $stmt->affected_rows === 1; 
      } 
     } 
     return $status; 
    } 
} 


$submit = new Submit(); 

$result = null; 
$name = "dsfdsf"; 
$message = "message"; 
$result = $submit->addRecord($name,$message); 
var_dump($result); // bool(true) 
+0

我修复了它,但是记录仍然没有插入 –

+0

新的代码是正确的。你有没有检查你是否收到你的'$ _POST'值? – Philipp

+0

我修改了一下代码,你说addRecord方法期望一个对象,所以我铸造他们..请看看代码https://codeshare.io/CWu7L –