我注册了一个帐户EX:我的游戏 在我的SQL EX中: id name password 1我的游戏2我的游戏 但我只按提交一次,然后将它广告两次我的PHP下面和我的html它的形式lablel imput提交
<?php
define('DB_NAME', 'abcd');
define('DB_USER', 'abcd');
define('DB_PASSWORD', '******');
define('DB_HOST', 'localhost');
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if (!$link)
{
die('Could NOT Connect: rong pass ' . mysql_error(rong_pass));
}
$db_selected = mysql_select_db(DB_NAME, $link);
if (!$db_selected)
{
die ('Cant\'t use' . DB_NAME. 'abcd' . mysql_error());
}
echo 'log in succes';
$id = $_POST["id"];
$com_name = $_POST["com_name"]; // Since method=”post” in the form
$log_in = $_POST["log_in"];
$password = $_POST["password"];
$sql = "INSERT INTO members (com_name, log_in, password) VALUES
('$_POST[com_name]','$_POST[log_in]','$_POST[password]')";
$result = mysql_query($sql);
$result = mysql_query($sql) or die (" could not save record sorry ");
mysql_close();
?>
</ p><a href="demo.html">inapoi</a>
//tot odata ai fost adaugat in baza noastra de date
答案 0 :(得分:3)
原因是,您要拨打mysql_query()
两次。
$result = mysql_query($sql);
$result = mysql_query($sql) or die (" could not save record sorry ");
重要旁注:
您目前的代码向SQL injection开放。使用prepared statements或PDO with prepared statements,它们更安全。
另外,这个or die (" could not save record sorry ")
对您没有帮助。
启动后,使用or die(mysql_error())
获取真正的错误。
将error reporting添加到文件的顶部,这有助于查找错误,如果有任何错误的话。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告应仅在暂存时完成,而不是生产。
关于密码存储:
我注意到您可能以纯文本格式存储密码。如果是这种情况,则非常气馁。
我建议您使用CRYPT_BLOWFISH或PHP 5.5的password_hash()
功能。对于PHP&lt; 5.5使用password_hash() compatibility pack
。
编辑:似乎Q&amp; A已被删除,不明白为什么。
<击>
- 在https://stackoverflow.com/a/29778421/咨询ircmaxell的答案,他将PDO与预备语句和password_hash()
一起使用。
击>
从他的回答中拉出来:
只需使用图书馆。认真。它们存在是有原因的。
password_hash()
password-compat
(上面的兼容包不要自己动手。如果你正在创造自己的盐,你做错了。你应该使用一个为你处理这个问题的库。
$dbh = new PDO(...);
$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$hash = password_hash($password, PASSWORD_DEFAULT);
$stmt = $dbh->prepare("insert into users set username=?, email=?, password=?");
$stmt->execute([$username, $email, $hash]);
登录时:
$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $dbh->prepare($sql);
$result = $stmt->execute([$_POST['username']]);
$users = $result->fetchAll();
if (isset($users[0]) {
if (password_verify($_POST['password'], $users[0]->password) {
// valid login
} else {
// invalid password
}
} else {
// invalid username
}
答案 1 :(得分:0)
$sql = "INSERT INTO members (com_name, log_in, password) VALUES
('$_POST[com_name]','$_POST[log_in]','$_POST[password]')";
$result = mysql_query($sql);
$result = mysql_query($sql) or die (" could not save record sorry ");
您已经两次运行SQL插件。删除其中一个,一切都会好! :)
答案 2 :(得分:0)
看起来你正在运行查询两次....
$result = mysql_query($sql);
$result = mysql_query($sql) or die (" could not save record sorry ");