我正在尝试自学如何使用php和mysql。为了练习,我创建了一个简单的测试网站,它使用了用户名和密码,以及一个使用phpmyadmin和mysql的数据库。我能够创建与我的数据库的成功连接,但现在我正在尝试从我的网站上的表单中获取数据并将其插入名为“account”的表中。帐户有三个字段:'用户名','密码'和'用户ID'(主键)。用户ID应该自动递增,因此该字段不需要输入数据。我编写的代码我认为会收集用户名和密码,并将其添加为帐户表中的新记录,但是收到错误消息:
内部服务器错误
服务器遇到内部错误或配置错误 无法完成您的请求。
此外,尝试时遇到404 Not Found错误 使用ErrorDocument来处理请求。
下面我已经包含了我的代码。我以前从未使用过PHP或者之前使用过数据库,所以我可能犯了很明显的错误。
<?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);
?>
<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>
答案 0 :(得分: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注入
答案 1 :(得分:1)
如果您自学PHP,首先应该学习PDO。因为,你使用mysql的方式,你是打开你的网站的SQL-Injection类型的黑客,任何人都可以做。由于您直接在数据库中提交$_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);
?>
答案 2 :(得分: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
通过一个很好的教程来了解更多信息