代码更新,仍然没有工作。 我知道我显然使用的mysql函数已经过时了。但是现在我想要的只是这个代码才能运行。我想知道我做错了什么:(
我是php和数据库的新手......我一直在努力让简单的html表单数据进入数据库表。我无法让它工作:(任何人都可以帮助,看看我的代码有什么问题吗?我刚刚在数据库中用字段ID,FIRSTNAME和SURNAME完成了一个简单的表。 这是代码:
<?php
//connect to database
$mysql_host = 'localhost';
$mysql_user = 'root';
$mysql_pass = '';
$mysql_db = 'test';
if (!mysql_connect ($mysql_host, $mysql_user, $mysql_pass)||!mysql_select_db ($mysql_db) ) {
die(mysql_error());
}
// Code
if (isset($_POST['firstname'])&&
isset($_POST['surname'])) {
$firstname = $_POST['firstname'];
$surname = $_POST['surname'];
if (!empty($username)&&!empty($password)) {
$query = "INSERT INTO `test`.`test_tabell`
VALUES ('', '" . mysql_real_escape_string($firstname) . "', '" . mysql_real_escape_string($surname) . "')";
/*$query = "INSERT INTO `test`.`test_tabell` VALUES (``, `.$firstname.`, `.$surname.`)"; */
$query_run = mysql_query($query);
if (!$query_run) echo mysql_error();
}
}
?>
<form action="add.php" method="POST">
Firstname:<br> <input type="text" name="firstname" value="<?php if (isset($firstname)) { echo $firstname; } ?>"><br><br>
Surname:<br> <input type="text" name="surname" value="<?php if (isset($surname)) { echo $surname; } ?>"><br><br>
<input type="submit" value="Submit">
</form>
谢谢!
答案 0 :(得分:2)
不要使用特定于mysql的语法,它已经过时了,当你需要做一些高级的东西时它开始变得烦人,而且你无法切换到sqlite或postgresql。
我建议使用PDO,您可以执行以下操作:
// Usage: $db = connectToDataBase($dbHost, $dbName, $dbUsername, $dbPassword);
// Pre: $dbHost is the database hostname,
// $dbName is the name of the database itself,
// $dbUsername is the username to access the database,
// $dbPassword is the password for the user of the database.
// Post: $db is an PDO connection to the database, based on the input parameters.
function connectToDataBase($dbHost, $dbName, $dbUsername, $dbPassword)
{
try
{
return new PDO("mysql:host=$dbHost;dbname=$dbName;charset=UTF-8", $dbUsername, $dbPassword);
}
catch(PDOException $PDOexception)
{
exit("<p>An error ocurred: Can't connect to database. </p><p>More preciesly: ". $PDOexception->getMessage(). "</p>");
}
}
然后初始化变量(我想你忘了定义数据库的名称);
$host = 'localhost';
$user = 'root';
$dataBaseName = 'databaseName';
$pass = '';
现在您可以通过
访问您的数据库了$GLOBALS['db'] = connectToDataBase($host , $databaseName, $user, $pass);
现在您有一个PDO数据库连接的实例。
我想指出的一件事是,你对sql注入是有见识的,你想在查询中使用预准备语句,如:
$query = "INSERT INTO test(first_name, sur_name) VALUES (:firstname, :surname);";
我们将在查询中执行两个变量$ firstName和$ surName,使它们替换:firstName和:surName的值,让我先创建一个简单的插入函数给你看:
function insertFunction($db, $query, $firstName, $surName)
{
$statement = $db->prepare($query);
return $statement->execute(array(":firstName" => $firstName, ":surName" => $surName));
}
所以你很容易做一些像
这样的事情$firstName = 'Smith';
$surName = 'John';
$db = $GLOBALS['db'];
$success = insertFunction($db, $query, $firstName, $surName);
现在,您可以通过检查$ success是true还是false来检查它是否成功。
如果你想看到PDO的更多高级用法(多行等),你可以在这里查看我的一条评论:Javascript function as php? (不是最高评论)。
我希望这会有所帮助。如果有什么奇怪的话,请评论。
答案 1 :(得分:1)
很难说没有看到你的架构,但试试这个:
$query = "INSERT INTO `test`.`test_tabell` VALUES ('', '$firstname', '$surname')";
$query_run = mysql_query($query);
你正在使用反引号而不是撇号。此外,您正在尝试在定义查询之前执行查询。
答案 2 :(得分:1)
您的插入查询错误并且还可以打开SQL注入。这是它应该如何:
$query = "INSERT INTO `test`.`test_tabell`
VALUES ('', '" . mysql_real_escape_string($firstname) . "', '" . mysql_real_escape_string($surname) . "')";
请注意将所有backticks
更改为apostrophe
。
此外,您在尝试查询之前尝试执行该查询。
根据您与表格定义相关的信息,您可以跳过表格中的id
字段。 INSERT查询将变为:
$query = "INSERT INTO `test`.`test_tabell` (`FIRSTNAME`, `SURNAME`)
VALUES ('" . mysql_real_escape_string($firstname) . "', '" . mysql_real_escape_string($surname) . "')";
$query_run = mysql_query( $query );
答案 3 :(得分:0)
正如评论中所发表的那样,你真的不应该使用/学习/练习任何以“mysql_”开头的函数,因为它不会在PHP更新后立即生效。这些功能正在逐渐消失。最好学习使用PHP和SQL数据库 - 只需确保您学习的东西将来会有用。请务必阅读与PHP相关的面向对象编程(OOP)以及PDO和mysqli_ *函数。