0

这是我的代码

if(isset($_POST['select'])){
$studId = $_REQUEST['studid'];
foreach ($studId as $ch){
echo $ch."<br>";
}
}
//the result of this is like this
c-1111
c-1112
c-1113
// but i want to know their names

我有一个函数来获取下面显示的 studinfo。我将如何在上面的代码中应用/插入它以获取那些 stuid 的名称..请帮助

function getuserinfo($ch){
$info_select = "SELECT `$ch` FROM `tbl_student` WHERE `studId`='$ch'";
if ($query_get = mysql_query($info_select)) { 
if ($result = mysql_result($query_get, 0, $ch)) {
return $result;
}
}
}
$fname = getuserinfo('fname');
$lname = getuserinfo('lname');
$mname = getuserinfo('mname');
4

1 回答 1

0

这是非常危险的,但这是基本思想:您当前的查询莫名其妙地获取了学生 id 等于传递值的学生 id。所以看起来它只是试图验证,但它是不必要的。您想返回所有信息,然后将第一个 $ch 替换为 * 以获取所有信息...

function getuserinfo($ch){
    $info_select = "SELECT * FROM `tbl_student` WHERE `studId`='$ch'";
    if ($query_get = mysql_query($info_select)) { 
        if ($result = mysql_result($query_get, 0, $ch)) {
            return $result;
        }
    }
}

您通过传递 id 来调用它:

getuserinfo($ch);

然后,您可以访问该行的所有学生信息。如果这没有意义,请尝试var_dump(getuserinfo($ch))查看返回的内容。

但是您只是从 $_REQUEST 中获取 RAW,完全没有清理。你很容易以这种方式攻击。

切换到 PDO 或 mysqli 并使用准备好的语句。这个答案只是为了解释如何获取信息。我绝不容忍使用这些已弃用的方法。

编辑

根据您的评论,您需要访问结果以执行类似的操作...

if(isset($_POST['select'])){
    $studId = $_REQUEST['studid'];
    $where = "";
    foreach ($studId as $ch){
        $where .= "studId = '$ch' OR";
    }
    if(strlen($where) > 0)
    {
        $where = substr($where, 0, -2);
        $result = $mysqli->query("SELECT studId, CONCAT(fname, " ", mname, " ",lname) AS name FROM tbl_student WHERE $where");
        while ($row = $result->fetch_assoc()) {
            echo $row['name'].'<br>';
        }
    }
}

...再次,清理输入。在这个例子中没有这样做。这只是提供一个想法

于 2013-02-06T02:02:53.597 回答