2012-08-07 111 views
0

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

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

在此先感谢您的帮助

回答

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']; 
    ?> 

我还添加了一些错误检查。你应该总是检查依赖外部系统(比如数据库)的函数的结果,因为你永远不知道数据库的状态是什么(它可能是down,not working等等)。所以你应该总是检查并打印任何错误消息。

+0

非常感谢,我也会试试。 – aldito2 2012-08-07 23:04:06

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); 
    ?> 
+2

不要忘记强制性使用mysqli_ *评论。 – gcochard 2012-08-07 22:57:31

+0

我只是试着告诉我,但由于某种原因,我的数据库正在获取更新,但没有名称,密码等,它只是增加了我的自动增量键。 – aldito2 2012-08-07 23:02:29

+0

你试过我更新的代码吗? – 2012-08-07 23:03:34

0

最好使用:

$cuname = $_GET['cuname']; 

这样.... 因为你的形式方法是 “GET”,我的建议是POST比GET数据。