<?php
require_once "dbcred.php";
$dbh = testdb_connect ();
/* Obliterate bad input */
$badpasses = $_POST['regpass'];
$salt = '~`!@#$%^&*()_-+=}]{[\|"><';
$secPass = md5($badpasses.$salt);
$newStudent = $dbh->exec ("INSERT INTO Student (uname, pass, fname, lname, email, currGrade) VALUES('$_POST[reguser]',$secPass,'$_POST[regfirst]','$_POST[reglast]','$_POST[regemail]','$_POST[regclassrank]')");
echo "Thanks for signing up!";
?>
为什么这不再提交给我的mysql数据库了? WAS提交下面的代码..
<?php
require_once "dbcred.php";
$dbh = testdb_connect ();
/* Obliterate bad input */
$newStudent = $dbh->exec ("INSERT INTO Student (uname, pass, fname, lname, email, currGrade) VALUES('$_POST[reguser]','$_POST[regpass]','$_POST[regfirst]','$_POST[reglast]','$_POST[regemail]','$_POST[regclassrank]')");
echo "Thanks for signing up!";
?>
答案 0 :(得分:4)
您需要在查询中放置$secpass
的引号:
$newStudent = $dbh->exec ("INSERT INTO Student (uname, pass, fname, lname, email, currGrade) VALUES('$_POST[reguser]','$secPass','$_POST[regfirst]','$_POST[reglast]','$_POST[regemail]','$_POST[regclassrank]')");
仅供参考,您的代码存在很多其他问题。最大的问题是盐应该是随机的。您可以将其存储在密码旁边的数据库中,但每个密码使用不同的随机盐会大大减少彩虹表的使用。
其次,这是一个更大的问题,您需要使用mysql_real_escape_string()
转义变量或将数据库访问转换为使用PDO。否则,你将以SQL注入攻击的形式向自己敞开心扉。
答案 1 :(得分:2)
排队
$newStudent = $dbh->exec ("INSERT INTO Student (uname, pass, fname, lname, email, currGrade) VALUES('$_POST[reguser]',$secPass,'$_POST[regfirst]','$_POST[reglast]','$_POST[regemail]','$_POST[regclassrank]')");
你忘记了$ secPass附近的报价。 试试这段代码:
$newStudent = $dbh->exec ("INSERT INTO Student (uname, pass, fname, lname, email, currGrade) VALUES('$_POST[reguser]','$secPass','$_POST[regfirst]','$_POST[reglast]','$_POST[regemail]','$_POST[regclassrank]')");
答案 2 :(得分:1)
您没有在查询中将$ secPass放在引号中。 md5只返回一个字符串,因此如果要将其存储在字符串字段中,则应将其放在引号中。