这个PHP代码有什么问题?

时间:2015-10-02 13:25:31

标签: php

我正在做一个投票系统。在显示我的数据库中的所有候选人之后,用户将点击候选人的图像进行投票。 我正在尝试使用GET来获取候选人的matric数字以便回显文本。 错误是这样的:加载页面后,即使没有点击任何图像,也会出现错误信息,如下所示 -

注意:未定义的索引:第74行的C:\ xampp \ htdocs \ projects \ onlinevoting \ vote.php中的用户

投票

可能出现什么问题?

if (isset($_POST['display'])) {
    $position_selected = $_POST['position_selected'];
    $sql = "SELECT * FROM candidate WHERE position='$position_selected'";
    $run_query = mysqli_query($db_conn, $sql);
    if (mysqli_num_rows($run_query) > 0) {

        $nr = mysqli_num_rows($run_query);
        echo '<h3 style="font-size:2em;text-align:center">('.$nr.') ASPIRANTS FOR <span style="color:maroon;text-decoration:underline"> '.$position_selected.'</span></h3>';

        while ($row = mysqli_fetch_array($run_query)) {
            echo '<div class="asp">
            <a class="votelink" href="?user='.$row["matno"].'"><img title="Click Image to Vote" height="300" width="300" src="data:image;base64,'.$row[6].' "></a><br><p style="font-weight:bolder;font-size:1.5em;width:300px;text-align:center;margin-bottom:0px;">'.$row[1].'<br><b><p style="font-size:1em;font-weight:bold;width:300px;text-align:center;margin-bottom:0px;">'.$row[2].'/'.$row[3].'</p><b><br>
            </div>';

        }     
        if ($_GET['user'] == $row["matno"]) {
            echo 'Voted';
        }
    } else {
        echo '<p style="color:darkred;font-weight:bolder;font-size:1.6em;text-align:center;">No candidate for this Position</p>';
    }
}
?>

3 个答案:

答案 0 :(得分:1)

根据您发布的内容,我猜测您并未检查$_GET变量user是否已设置。

更改此行

if ($_GET['user'] == $row["matno"]) {

if ((isset($_GET['user'])) && ($_GET['user'] == $row["matno"])) {

答案 1 :(得分:1)

将此作为答案而不是评论发布。

您正在“尝试使用GET获取候选人的主编号”,但是,在您的代码顶部,您正在测试是否

(isset($_POST['display'])) {

使用POST超级全局,并嵌套在其中

if ($_GET['user'] == $row["matno"]) {

虽然实际上有可能出现这种情况,但我相信这就是问题所在。您的表单使用什么方法:GET或POST?如果是GET,为什么isset($_POST)测试。如果POST,表单的action属性是否在其查询字符串中包含用户变量?您可以从这里开始解决问题。

基本上,PHP报告未设置'user'数组成员,这很可能意味着表单的操作页面在其查询字符串中不包含user变量。

我提出了两种可能的解决方案。

首先,最优选地,在表单中使用隐藏的输入字段,并将其值设置为用户的id。然后,测试$_GET['user'],而不是测试$_POST['user']。隐藏输入字段的HTML代码段如下:

<input type="hidden" name="user" value="Whatever_user_id_is"/>

然后替换

if ($_GET['user'] == $row["matno"]) {

if ($_POST['user'] == $row["matno"]) {

如果您希望坚持使用if ($_GET['user'] == $row["matno"]) {语法/模式,另一种方法是将user变量包含在表单的action属性中:

<form method="post" action="YOUR_FORMS_ACTION_PAGE?user=what_ever_user_is">

这样,当您提交表单时,user变量将出现在GET超级全局数组中。

答案 2 :(得分:0)

那应该更好

if (isset($_POST['user'])) {
    if ($_POST['user'] == $row["matno"])) {
    }
}