1

我正在尝试自学如何使用 php 和 mysql。为了练习,我做了一个简单的测试网站,它需要一个用户名和一个密码,以及一个使用 phpmyadmin 和 mysql 的数据库。我能够成功连接到我的数据库,但现在我正试图从我网站上的表单中获取数据并将其插入一个名为“帐户”的表中。帐户具有三个字段:“用户名”、“密码”和“用户 ID”(主键)。用户 ID 应该自动递增,因此该字段不需要输入数据。我编写了我认为会收集用户名和密码并将其作为新记录添加到帐户表中的代码,但我收到一条错误消息:

内部服务器错误

服务器遇到内部错误或配置错误,无法完成您的请求。

此外,在尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误。

下面我已经包含了我的代码。我以前从未使用过 PHP 或做过数据库,所以我可能犯了非常明显的错误。

php_script

 <?PHP

    $db_host = "stevie.heliohost.org";
    $db_username = "secret";
    $db_pass = "secret";
    $db_name = "secret";

    $connection = @mysql_connect ("$db_host","$db_username", "$db_pass") 
    or die ("could not connect to mySQL");


    @mysql_select_db("$db_name") or die ("No database");

    $sql="INSERT INTO account(username, password)
    VALUES('$_POST[user]','$_POST[password]')";
    if (!mysql_query($sql,$connection ))
      {die('Error: ' . mysql_error());}
    echo "1 record added";

    mysql_close($con);

?>

HTML 表格

 <form name="LOGIN" action="php_script.php" method="post">

     Username: <input id="username" type="text" name="user">   
     password: <input  id="password" type="text" name="password">
        <input id="submit" type="submit" value="Submit">

  </form>
4

3 回答 3

3

试试这个

$db_host = 'stevie.heliohost.org';
$db_username = "secret";
$db_pass = "secret";
$db_name = "secret";

$connection = mysql_connect($db_host,$db_username, $db_pass) 
or die ("could not connect to mySQL");


mysql_select_db($db_name) or die ("No database");

$sql="INSERT INTO account(username, password)
VALUES('".$_POST[user]."','".$_POST[password]."')";
if (!mysql_query($sql,$connection ))
  {die('Error: ' . mysql_error());}
echo "1 record added";

mysql_close($con);

OBS:你应该使用 mysqli 或 PDO ,你的代码很容易进行 sql 注入

于 2012-12-28T21:29:55.820 回答
1

如果您正在自学 PHP,那么您应该做的第一件事就是学习 PDO。因为,您使用 mysql 的方式是让您的网站对 SQL 注入类型的黑客开放,任何人都可以这样做。由于您直接提交$_POST[''];数据库中的值。今天开始学习 PDO,它更安全。你可以在这里找到一个很好的教程:http ://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

此外,请检查此代码,因为我已对其进行了一些修改。和主机名,几乎总是localhost

 <?PHP

    $db_host = "localhost";
    $db_username = "secret";
    $db_pass = "secret";
    $db_name = "secret";

    $connection = mysql_connect ("$db_host","$db_username", "$db_pass") 
    or die ("could not connect to mySQL");


    mysql_select_db("$db_name") or die ("No database");

    $sql="INSERT INTO account(username, password)
    VALUES('$_POST[user]','$_POST[password]')";
    if (!mysql_query($sql,$connection ))
      {die('Error: ' . mysql_error());}
    echo "1 record added";

    mysql_close($con);

?>
于 2012-12-28T21:32:29.163 回答
1

首先,您不应该使用 mysql_ 函数,因为它们已被弃用。尝试使用 PDO 或喜欢。

第二次试试这个

 $db_host = 'stevie.heliohost.org';
 $db_username = "secret";
 $db_pass = "secret";
 $db_name = "secret";

 $connection = mysql_connect($db_host,$db_username, $db_pass) 
  or die ("could not connect to mySQL");


 mysql_select_db($db_name) or die ("No database");

$sql="INSERT INTO account(username, password)
  VALUES('".mysql_escape_string($_POST[user])."','".mysql_escape_string($_POST[password])."')";
if (!mysql_query($sql,$connection ))
   {die('Error: ' . mysql_error());}
 echo "1 record added";

 mysql_close($con);

您也应该在查询中转义您的值,因此它不适合 SQL 注入

我不适合使用 mysql_escape_string 或者你应该使用至少 mysqli

所以通过一个很好的教程来了解更多关于它的信息

于 2012-12-28T21:32:51.170 回答