Mysqli和PHP不发送数据

时间:2016-02-05 01:06:14

标签: php mysql

我正在建立一个招聘网站,需要将用户数据保存在我的数据库中,但我的表格并没有在phpmyadmin中发送任何内容(使用WAMP)。

我检查了PHP,MySQL和Apache的错误日志,但没有看到任何错误。我还添加了#34; if / echo" $ conn变量内的块来测试连接,返回true。代码如下。

<!-- index.html-->
<form action="process.php" method="post">

  <input type="text" name="first_name" placeholder="First Name" /><br/>
   <input type="text" name="last_name" placeholder="Last Name" /><br/>

      <button type="submit" name="submit"></button>
</form>

//database.php
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "xxxx";
$dberror1 = "Could not connect to the database!";
$dberror2 = "Could not find selected table!";

// Connection to the database, Already tried this with echo statement and works
$conn  = mysqli_connect($dbhost, $dbuser, $dbpass) or die ($dberror1);

// Selecting the database to connect to
$select_db = mysqli_select_db($conn, 'mainbase') or die ($dberror2);

//process.php
<?php include 'database.php'; 

 if(isset($_POST['submit'])) {
// Creating variables to store form values
$first_name= $_POST['first_name'];
$last_name=$_POST['last_name'];


//Executing the query
mysqli_query($conn, " INSERT INTO 'candidates'('first_name', 'last_name') //Values in 'candidates' table on phpmyadmin 
VALUES ('$first_name','$last_name')");/*variables from above*/
}

2 个答案:

答案 0 :(得分:0)

  
      
  1. 问题
  2.   

不要在撇号之间放置表名和列名。这导致您的查询失败的原因。撇号用于传递字符串。

mysqli_query($conn, " INSERT INTO 'candidates'('first_name', 'last_name')
VALUES ('$first_name','$last_name')");

应该是

mysqli_query($conn, " INSERT INTO candidates(first_name, last_name)
VALUES ('$first_name','$last_name')");

mysqli_query($conn, " INSERT INTO `candidates`(`first_name`, `last_name`)
VALUES ('$first_name','$last_name')");

如果你更喜欢它。

  
      
  1. 错误处理
  2.   

为了验证问题,您可以在查询失败时回显mysqli_error()函数结果,这是一个很好的做法,可能会帮助您找到解决方案,而不是在此处查询。

$query= mysqli_query($conn, " INSERT INTO `candidates`(`first_name`, `last_name`)
    VALUES ('$first_name','$last_name')");

if(!$query) //the query will return 0 if it fails
{
   echo mysqli_error($conn);
}
  
      
  1. 安全问题
  2.   

您将POST值直接添加到查询中,这很危险。

在这些方面:

$first_name= $_POST['first_name'];
$last_name=$_POST['last_name'];

你应该逃避用户输入。

这将转义任何可能导致mysql查询出现问题的特殊字符。

$first_name = mysqli_real_escape_string($conn, $_POST['first_name']);
$last_name  = mysqli_real_escape_string($conn, $_POST['last_name']);

答案 1 :(得分:0)

你错误地使用了myqli。但最重要的是,使用PDO连接到您的数据库。它在未来更安全,更容易扩展。以下是如何使用PDO连接数据库的示例。

<?php

$myUser = "XXXXXX";
$myPass = "XXXXXX";

try{

    $dbPDO = new PDO('mysql:host=localhost;dbname=xxxxxxxx', $myUser, $myPass);
    $dbPDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    echo "Connection was successful";

} catch(PDOException $e){

    print "Error!: " . $e->getMessage() . "<br />";
    die();

}

?>

只需将X更改为服务器的设置即可。

当您想要启动查询时,您可以这样做:

$query = $dbPDO->prepare("SELECT * FROM Table_Name");
$query->execute();

当然,您希望将变量传递给您的查询,以便您可以这样做:

$query = $dbPDO->prepare("SELECT * FROM Table_Name WHERE ID = :id");
$query->bindParam(':id', $id);
$query->execute();

这可以避免SQL注入。只需确保在将变量绑定到查询之前清理变量。

我想我会展示如何使用PDO将变量插入到表中。

$firstName = $_POST['first_name'];
$lastName = $_POST['last_name'];
$query = $dbPDO->prepare("INSERT INTO candidates first_name, last_name VALUES (:fname, :lname)");
$query->bindParam(':fname', $firstName);
$query->bindParam(':lname', $lastName);
$query->execute();

您还可以创建两个POST变量的数组并传递它,而不是一次绑定每个变量。

$candidateName = array('$_POST['first_name']', '$_POST['last_name']');
$query = $dbPDO->prepare("INSERT INTO candidates first_name, last_name VALUES (?, ?)");
$query->execute($candidateName);

我希望有所帮助!

快乐的编码!