gpt4 book ai didi

php - 我无法让表单数据进入数据库。我究竟做错了什么?

转载 作者:搜寻专家 更新时间:2023-10-30 22:00:46 25 4
gpt4 key购买 nike

代码已更新,但仍然无法运行。我知道我显然使用的是过时的 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>

谢谢!

最佳答案

不要使用 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 注入(inject),你想在你的查询中使用准备好的语句,比如:

$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 是真还是假来检查它是否成功。

如果您想查看 PDO 的更高级用法(多行等),那么您可以在此处查看我的评论之一:Javascript function as php?(不是置顶评论)。

希望对您有所帮助。如果有任何奇怪的地方,请发表评论。

关于php - 我无法让表单数据进入数据库。我究竟做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15256247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com