1

代码已更新,仍然无法正常工作。我知道我显然正在使用将过时的 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> 

谢谢!

4

4 回答 4

3

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

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

我希望这有帮助。如果有什么奇怪的地方请评论。

于 2013-03-06T19:43:37.367 回答
1

很难在没有看到您的架构的情况下分辨,但试试这个:

$query = "INSERT INTO `test`.`test_tabell` VALUES ('', '$firstname', '$surname')";
$query_run = mysql_query($query);

您使用的是反引号而不是撇号。此外,您正在尝试在定义查询是什么之前执行查询。

于 2013-03-06T19:32:10.827 回答
1

您的插入查询是错误的,并且还对 SQL 注入开放。应该是这样的:

$query = "INSERT INTO `test`.`test_tabell` 
    VALUES ('', '" . mysql_real_escape_string($firstname) . "', '" . mysql_real_escape_string($surname) . "')";

注意 allbackticks变为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 );
于 2013-03-06T19:32:41.560 回答
0

正如评论中所发布的,你真的不应该使用/学习/练习使用任何以“mysql_”开头的函数,因为一旦 PHP 更新它就不会工作。这些功能即将推出。祝你学习使用 PHP 和 SQL 数据库好运——只要确保你正在学习一些对未来有用的东西。请务必阅读与 PHP 以及 PDO 和 mysqli_* 函数相关的面向对象编程 (OOP)。

于 2013-03-06T19:38:02.407 回答