【问题标题】:trying to get PHP and database to work together试图让 PHP 和数据库一起工作
【发布时间】:2012-12-28 21:25:37
【问题描述】:

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

内部服务器错误

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

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

下面我已经包含了我的代码。我以前从未使用过 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>

【问题讨论】:

  • 有一点是肯定的,您的网站很容易受到 SQL 注入的攻击
  • 删除 @ 你正在抑制错误,你几乎不应该这样做!
  • 如果你只是在学习,那么你真的应该学习 MySQLi 或 PDO,而不是过时和弃用的 MySQL
  • "$db_host" 这样的变量周围使用引号是完全多余和浪费的。只需删除引号并自行使用变量即可。
  • 这听起来像是网络服务器配置问题,与 PHP 或 MySQL 无关。

标签: php mysql


【解决方案1】:

试试这个

$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注入

【讨论】:

    【解决方案2】:

    如果您正在自学 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);
    
    ?>
    

    【讨论】:

    • 酷。感谢您的详尽回答。我会看看那个教程。我确实了解到主机通常是本地主机,这次它实际上应该是不同的东西。再次感谢您的帮助。
    【解决方案3】:

    首先,您不应该使用 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

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

    【讨论】:

      猜你喜欢
      • 2019-07-23
      • 1970-01-01
      • 1970-01-01
      • 2013-09-23
      • 2017-09-18
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多