0

我正在尝试使用 html 和 php 制作一个表单来更新 mysql 数据库。数据库更新(自动增量)键,但它不会将任何字符串添加到值中。我搜索过有类似问题的人,但因为他们的代码与我的不同,我无法理解(我是 php 和 mysql 的菜鸟)我认为我的问题在于我使用 html 获取值的方式,但我可能是错误的

<form action=submitform.php method=GET> 
     Name:<input type="text" name="cuName" size=20 maxlength=20><br>    
     Password:<input type="password" name="password" size=20 maxlength=45><br>
     Account:<input type="text" name="account" size=20 maxlength=45><br>
     Phone:<input type="tel" name="phone" size=10 maxlength=10><br>
     Email:<input type="text" name="email" size=20 maxlength=45><br>
<input type=submit>
</form>

我的 php 是

<?php
        mysql_connect(localhost,  myUsername, "myPassword");
        mysql_select_db(myDatabaseName);
        mysql_query("INSERT INTO Customer (cuName, password, 
                        account, phone, email)
                    Values('$cuName', '$password', '$account',
                            '$phone', '$email')");
        echo $cuName ." thank you for reserving!";
        print ($cuName);
    ?>

提前感谢您的帮助

4

3 回答 3

1

您的代码依赖于REGISTER_GLOBALS被打开;出于安全原因,它通常被关闭。

您应该替换$cuName$_GET['cuName']以获取从表单发送的值。

此外,您应该转义任何进入数据库的值,否则您可能会将自己暴露在 SQL 注入漏洞中。

清理这两种情况的代码,结果如下:

<?php
        if (!mysql_connect(localhost,  myUsername, "myPassword")) {
              print 'There was an error connecting to the database'.mysql_error();
              exit(); 
        }
        if (!mysql_select_db(myDatabaseName)) { 
              print 'Could not select db. The error was: '.mysql_error();
              exit();
        }
        $query = "INSERT INTO Customer (`cuName`, `password`, `account`,`phone`,`email`)";
        $query .= "VALUES (";
        $query .= "'".mysql_real_escape_string($_GET['cuName'])."','";
        $query .= mysql_real_escape_string($_GET['password'])."','";
        $query .= mysql_real_escape_string($_GET['phone'])."','";
        $query .= mysql_real_escape_string($_GET['email'])."'";

        if (!mysql_query($query)) {
            print 'There was an error inserting '.$query.'. Error was '.mysql_error();
        } else {
            echo $_GET['cuName']." thank you for reserving!";
        }
        print $_GET['cuName'];
    ?>

我还添加了一些错误检查。您应该始终检查依赖外部系统(例如数据库)的函数的结果,因为您永远不知道数据库的状态是什么(它可能已关闭、不工作等)因此您应该始终检查并打印任何错误消息.

于 2012-08-07T23:02:05.447 回答
0

您不会在任何地方定义任何 GET 值。$cuName 等未定义。

每个值都需要与 $_GET 相关联。IE,

$cuName = $_GET['cuName']

但是你还需要确保你没有插入没有被清理的数据以防止 SQL 注入。这方面的一个例子是:

$cuName = mysql_real_escape_string($_GET['cuName']);

所以,试试这个:

<?php
        mysql_connect(localhost,  myUsername, "myPassword");
        mysql_select_db(myDatabaseName);

        //Define Variables
        $cuName = mysql_real_escape_string($_GET['cuName']);
        $password = mysql_real_escape_string($_GET['password']);
        $account = mysql_real_escape_string($_GET['account']);
        $phone = mysql_real_escape_string($_GET['phone']);
        $email = mysql_real_escape_string($_GET['email']);

        mysql_query("INSERT INTO Customer (cuName, password, 
                        account, phone, email)
                    Values('$cuName', '$password', '$account',
                            '$phone', '$email')") or die (mysql_error());
        echo $cuName ." thank you for reserving!";
        print ($cuName);
    ?>
于 2012-08-07T22:56:28.133 回答
0

更好地使用:

$cuname = $_GET['cuname'];

像这样......因为你的表单方法是在“GET”上,我的建议是发布数据而不是 GET。

于 2012-08-20T09:14:03.623 回答