Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我无法将表单数据输入数据库。我做错了什么?_Php_Database_Forms - Fatal编程技术网

Php 我无法将表单数据输入数据库。我做错了什么?

Php 我无法将表单数据输入数据库。我做错了什么?,php,database,forms,Php,Database,Forms,代码已更新,仍不工作。 我知道我显然在使用mysql函数,这将是过时的。但现在我只想让这段代码起作用。我想知道我做错了什么: 我对php和数据库非常陌生。。。我一直在努力让简单的html表单数据进入数据库表。我就是不能让它工作:有人能帮我看看我的代码有什么问题吗?我刚刚在数据库中创建了一个简单的表,其中包含ID、FIRSTNAME和姓氏字段。 代码如下: <?php //connect to database $mysql_host = 'localhost';

代码已更新,仍不工作。 我知道我显然在使用mysql函数,这将是过时的。但现在我只想让这段代码起作用。我想知道我做错了什么:

我对php和数据库非常陌生。。。我一直在努力让简单的html表单数据进入数据库表。我就是不能让它工作:有人能帮我看看我的代码有什么问题吗?我刚刚在数据库中创建了一个简单的表,其中包含ID、FIRSTNAME和姓氏字段。 代码如下:

    <?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> 

谢谢大家!

如果看不到您的模式,很难判断,但请尝试以下方法:

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

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

如果不查看您的架构,很难判断,但请尝试以下操作:

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

您使用的是反勾号而不是撇号。此外,您试图在定义查询之前执行查询。

您的insert查询错误,并且可能会接受SQL注入。以下是它应该是什么样子:

$query = "INSERT INTO `test`.`test_tabell` 
    VALUES ('', '" . mysql_real_escape_string($firstname) . "', '" . mysql_real_escape_string($surname) . "')";
请注意,将所有反勾号更改为撇号

此外,您正在尝试在定义查询之前执行查询

编辑 根据与表定义相关的信息,可以从表中跳过id字段。插入查询将变为:

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

您的insert查询是错误的,并且还可以进行SQL注入。以下是它应该是什么样子:

$query = "INSERT INTO `test`.`test_tabell` 
    VALUES ('', '" . mysql_real_escape_string($firstname) . "', '" . mysql_real_escape_string($surname) . "')";
请注意,将所有反勾号更改为撇号

此外,您正在尝试在定义查询之前执行查询

编辑 根据与表定义相关的信息,可以从表中跳过id字段。插入查询将变为:

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

如评论中所述,您确实不应该使用/learn/practice使用任何以mysql_u开头的函数,因为一旦PHP更新,它就无法工作。这些功能即将退出。学习使用PHP和SQL数据库祝你好运——只要确保你正在学习将来有用的东西就行了。请务必阅读与PHP相关的面向对象编程OOP以及PDO和mysqli_*函数。

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

不要使用特定于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>");
    }
}
现在,您可以通过

$GLOBALS['db'] = connectToDataBase($host , $databaseName, $user, $pass);
现在您有了一个PDO数据库连接的实例

我想指出的一点是,您可以使用sql注入,您希望在查询中使用准备好的语句,如:

$query = "INSERT INTO test(first_name, sur_name) VALUES (:firstname, :surname);";
我们将在查询中执行两个变量$firstName和$LANSAME,使它们替换:firstName和:LANSAME的值,首先创建一个简单的插入函数:

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多行等的更高级使用,可以在此处查看我的一条评论: 不是最重要的评论


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

不要使用特定于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>");
    }
}
现在,您可以通过

$GLOBALS['db'] = connectToDataBase($host , $databaseName, $user, $pass);
现在您有了一个PDO数据库连接的实例

我想指出的一点是,您可以使用sql注入,您希望在查询中使用准备好的语句,如:

$query = "INSERT INTO test(first_name, sur_name) VALUES (:firstname, :surname);";
我们将在查询中执行两个变量$firstName和$LANSAME,使它们替换:firstName和:LANSAME的值,首先创建一个简单的插入函数:

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多行等的更高级使用,可以在此处查看我的一条评论: 不是最重要的评论


我希望这有帮助。如果有任何异常,请发表评论。

您会遇到哪些错误?运行$query后,您正在设置它。将其反转并回显$query,这样您就可以看到它在做什么。首先,您使用的是不推荐使用的mysql函数。您的数据库模式是什么?请检查引号。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助你做出决定

e其中。如果选择PDO,会出现什么错误?运行$query后,您正在设置它。将其反转并回显$query,这样您就可以看到它在做什么。首先,您使用的是不推荐使用的mysql函数。您的数据库模式是什么?请检查引号。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果您选择PDO,。对于-1'er,您愿意解释原因吗?我想知道为什么我的也是。@SeanWM两者都不是我的,但根据长期的经验,我猜您的-1是因为没有解决SQL注入问题,而DreamEater是因为忽略了在生成查询之前执行查询的事实。@MichaelBerkowski是的。“大概就是这样吧!”食梦者谢谢你的评论!我试着像你一样做这件事,但数据仍然无法进入数据库:对-1'er来说,想解释一下原因吗?我想知道为什么我的也是。@SeanWM都不是我的,但是根据长期的经验,我猜你的-1是因为没有处理SQL注入,而DreamEater是因为忽略了一个事实,即查询是在构建之前执行的。@MichaelBerkowski Yea。“大概就是这样吧!”食梦者谢谢你的评论!我试着像你那样做,但数据仍然不会进入数据库:不客气。祝你好运欢迎你再来找我。我指出的例子是专门为ajax设计的,但是数据库功能可以用于任何数据库查询。不客气。祝你好运欢迎你再来找我。我指出的例子是专门为ajax设计的,但是任何数据库查询都可以恢复数据库功能。谢谢!我一定会仔细阅读的。但现在我只想让这段代码做我想让它做的事情。但它就是不起作用:谢谢!我一定会仔细阅读的。但现在我只想让这段代码做我想让它做的事情。但它就是不起作用: