如何将数据添加到关联数组?使用jquery我想根据密钥检索数据。
if(isset($_POST["user_name"]))
{
$sql = "SELECT * FROM users WHERE user_name='".$_POST["user_name"]."' AND user_password='".$_POST["user_password"]."'";
$result = mysql_query($sql) or die(mysql_error());
$jsonresult = array();
while($row = mysql_fetch_array($result))
{
$jsonresult["user_auth"] = 1;
$jsonresult["user_id"] = $row['user_id'];
$jsonresult["user_name"] = $row['user_name'];
$_SESSION["user_auth"] = 1;
$_SESSION["user_id"] = $row['user_id'];
$_SESSION["user_name"] = $row['user_name'];
}
echo json_encode($jsonresult);
mysql_close();
}
我的问题在这里:
$jsonresult["user_auth"] = 1;
$jsonresult["user_id"] = $row['user_id'];
$jsonresult["user_name"] = $row['user_name'];
只剩下数据库的最后一行。为什么呢?
感谢您的建议。
答案 0 :(得分:3)
好吧,你要覆盖这个值而不是添加一个新值。相反,为每个结果构造一个数组,并将这些数组添加到$jsonresult
。
另外,请务必avoid SQL Injection vulnerabilities:
$sql = "SELECT * FROM users WHERE user_name='".
mysql_real_escape_string($_POST["user_name"]) . "' AND " .
"user_password='". mysql_real_escape_string($_POST["user_password"]) ."'";
$result = mysql_query($sql) or die(mysql_error());
// Or better yet, use PDO and prepared statements
$jsonresult = array();
while (($row = mysql_fetch_array($result)) !== false) {
$rowresult = array();
$rowresult["user_auth"] = 1;
$rowresult["user_id"] = $row['user_id'];
$rowresult["user_name"] = $row['user_name'];
$jsonresult[] = $rowresult; // Or array_push($jsonresult, $rowresult);
// $_SESSION stuff
}
答案 1 :(得分:2)
编辑首先,我认为您只期望一个结果,因此无需循环。
其次,您的数据库中有多少用户?你确定它每次都被设置,还是从前一次运行中残留下来?试试这个修改:
$jsonresult = array();
$_SESSION["user_auth"] = -1;
$_SESSION["user_id"] = "not";
$_SESSION["user_name"] = "set";
while($row = mysql_fetch_array($result))
{
$jsonresult["user_auth"] = 1;
$jsonresult["user_id"] = $row['user_id'];
$jsonresult["user_name"] = $row['user_name'];
$_SESSION["user_auth"] = 1;
$_SESSION["user_id"] = $row['user_id'];
$_SESSION["user_name"] = $row['user_name'];
}
看看你是否“不”和“设定”
答案 2 :(得分:1)
使用MYSQL_ASSOC标志
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$jsonresult[$row['user_id']]["user_auth"] = 1;
$jsonresult[$row['user_id']]["user_id"] = $row['user_id'];
$jsonresult[$row['user_id']]["user_name"] = $row['user_name'];
$_SESSION[$row['user_id']]["user_auth"] = 1;
$_SESSION[$row['user_id']]["user_id"] = $row['user_id'];
$_SESSION[$row['user_id']]["user_name"] = $row['user_name'];
}
甚至mysql_fetch_assoc
代替mysql_fetch_array
,没有任何标记。
$_SESSION["user_auth"] = 0;
$jsonresult = array('user_auth'=>0);
if(isset($_POST["user_name"]) && isset($_POST["user_password"])) {
$input = array(
'username'=>htmlspecialchars($_POST["user_name"], ENT_QUOTES),
'password'=>htmlspecialchars($_POST["user_password"], ENT_QUOTES)
);
$query = sprintf("SELECT * FROM users WHERE user_name='%s'", $input['username']);
$result = mysql_query($query);
if (mysql_num_rows($result) > 0) {
$data = mysql_fetch_assoc($result);
mysql_close();
if ($data['user_password'] == $input['password']) {
$jsonresult["user_auth"] = 1;
$jsonresult["user_id"] = $data['user_id'];
$jsonresult["user_name"] = $data['user_name'];
$_SESSION["user_auth"] = 1;
$_SESSION["user_id"] = $data['user_id'];
$_SESSION["user_name"] = $data['user_name'];
}
}
}
echo json_encode($jsonresult);
答案 3 :(得分:0)
您必须为每一行使用一个键:
$i = 0;
while($row = mysql_fetch_array($result))
{
$jsonresult[$i]["user_auth"] = 1;
$jsonresult[$i]["user_id"] = $row['user_id'];
$jsonresult[$i]["user_name"] = $row['user_name'];
$_SESSION[$i]["user_auth"] = 1;
$_SESSION[$i]["user_id"] = $row['user_id'];
$_SESSION[$i]["user_name"] = $row['user_name'];
$i++;
}
echo json_encode($jsonresult);
mysql_close();
}
答案 4 :(得分:0)
现在,您只有一维数组。这意味着每次循环执行时,数组中的那些位置都会被最新值覆盖。你需要一个二维数组(数组数组),在你的情况下它非常简单。
变化:
$jsonresult["user_auth"] = 1;
$jsonresult["user_id"] = $row['user_id'];
$jsonresult["user_name"] = $row['user_name'];
要:
$jsonresult[$i]["user_auth"] = 1;
$jsonresult[$i]["user_id"] = $row['user_id'];
$jsonresult[$i]["user_name"] = $row['user_name'];
答案 5 :(得分:0)
另一种方法是将您的查询更改为仅选择您需要的字段(确保您清理用户输入!):
SELECT 1 as user_auth, user_id, user_name FROM...
初始化数组:
$result = array();
然后使用mysql_fetch_assoc
:
while(($row = mysql_fetch_assoc($result))) {
$result[] = $row;
}
$_SESSION['users'] = $result;
echo json_encode($result);
更新:正如@Robert已经提到的那样,实际上你应该只得到一个结果,所以不需要循环。
答案 6 :(得分:0)
你的代码对我没用。
以下看似够了
if(isset($_POST["user_name"])) {
$name = mysql_real_escape_string($_POST["user_name"]);
$pass = mysql_real_escape_string($_POST["user_password"]);
$sql = "SELECT user_id,user_name FROM users WHERE user_name='$name' AND user_password='$pass'";
$res = mysql_query($sql) or trigger_error(mysql_error());
$row = mysql_fetch_assoc($result);
$_SESSION["user_id"] = $row['user_id'];
$_SESSION["user_name"] = $row['user_name'];
echo json_encode($row);
}
答案 7 :(得分:-1)
$i=0;
while($row = mysql_fetch_array($result))
{
$jsonresult[$i]["user_auth"] = 1;
$jsonresult[$i]["user_id"] = $row['user_id'];
$jsonresult[$i]["user_name"] = $row['user_name'];
$_SESSION[$i]["user_auth"] = 1;
$_SESSION[$i]["user_id"] = $row['user_id'];
$_SESSION[$i]["user_name"] = $row['user_name'];
$i++;
}