我试图将用户名/密码发布到PHP文件,因此我可以使用inner join
使用这些详细信息从用户表中获取uid -(用户id)。我在INSERT
命令的WHERE
子句中用作payid表的标识符。这行不通。有人能告诉我哪里错了吗?
if(isset($_POST['password']) && isset($_POST['username']) && isset($_POST['rates'])) {
$con = mysql_connect("localhost","root","");
if (!$con) {
die ("Could not connect: " . mysql_error());
} else{
mysql_select_db("council", $con);
$result = mysql_query('SELECT pid FROM payid INNER JOIN user ON user.uid = payid.uid WHERE user.username = " $_POST[username]" AND user.password =" $_POST[password] "');
$pid = $result['pid'];
if(isset($pid))
$result = mysql_query("INSERT INTO fees (rates, pid) VALUES ('$rates', '$pid')");
if(!$row = mysql_fetch_array($result)) {
echo "<div id='t'>Invalid details please try again - use back arrow to return to form. </div>";
header ("Location: domRates.html");
}
if($row = mysql_fetch_array($result)) {
header ("Location: services.html");
}
}
mysql_close($con);
$username = mysql_real_escape_string($_POST['username']);
$pass = mysql_real_escape_string($_POST['password']);
$query = "SELECT `pid` FROM `payid` INNER JOIN `user` ON `user`.`uid` = `payid`.`uid` WHERE `user`.`username` = '".$username."' AND `user`.`password` = '".$pass."'";
$result = mysql_query($query);
将列名用反引号括起来是个好主意。当将PHP变量放入查询中时,打开单引号,然后用双引号连接。
我认为你的查询语句写得不好。
试试这个:
$result = mysql_query('SELECT pid FROM payid INNER JOIN user ON user.uid = payid.uid WHERE user.username = '$_POST["username"]' AND user.password ='$_POST["password"]'');
或:
$result = mysql_query("SELECT pid FROM payid INNER JOIN user ON user.uid = payid.uid WHERE user.username = '". $_POST["username"]. "' AND user.password ='" . $_POST["password"]. "'");
还必须通过删除单引号来修改第二个查询(INSERT)。因为字段"rates"one_answers"pid"不是varchar或文本。它们应该是number (int或double):
$result = mysql_query("INSERT INTO fees (rates, pid) VALUES ($rates, $pid)");
即使这两个查询工作,他们是脆弱的SQL注入。
由于这个问题可能与您有关,这里是如何工作的-正如我所说,我的问题被其他人确定主要是由于_post信息没有通过$_post变量传输,编码没有错误,所以我将其更改为$_REQUEST,他们presto - works - simple:-)
<?php
$username = sanitizeMySQL($_REQUEST['username']);
$pass = sanitizeMySQL($_REQUEST['password']);
$rates = sanitizeMySQL($_REQUEST['rates']);
function sanitizeString($var){
$var = htmlentities($var);
$var = strip_tags($var);
return $var;
}
function sanitizeMySQL($var) {
$var = mysql_real_escape_string($var);
$var = sanitizeString($var);
return $var;
}
$con = mysql_connect("localhost","root","");
if (!$con) {
die ("Could not connect: " . mysql_error());
} else{
mysql_select_db("council", $con);
$query = "SELECT * FROM `payid` INNER JOIN `user` ON `user`.`uid` = `payid`.`uid` WHERE `user`.`username` = '". $username . "' AND `user`.`password` = '" . $pass ."'";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result) or die(mysql_error());
$pid = $row['pid'];
if (isset($result)) {
$result = mysql_query("INSERT INTO `fees` (rates, pid) VALUES ($rates, $pid)");
header ("Location: acc.html");
}