我正在建立一个招聘网站,需要将用户数据保存在我的数据库中,但我的表格并没有在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*/
}
答案 0 :(得分:0)
- 问题
醇>
不要在撇号之间放置表名和列名。这导致您的查询失败的原因。撇号用于传递字符串。
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')");
如果你更喜欢它。
- 错误处理
醇>
为了验证问题,您可以在查询失败时回显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);
}
- 安全问题
醇>
您将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);
我希望有所帮助!
快乐的编码!