在PHP中的未定义索引

时间:2016-03-26 04:28:24

标签: php

我收到未定义索引的错误,原因是什么?

while ($row = mysqli_fetch_array($result)) {
        echo "<tr>";

        echo "<td>" . $row['CandidateName'] . "</td>";
        echo "<td>" . $row['Position'] . "</td>";
         echo "<td><input type='radio' name='candidateid' value='".$row['candidateID']."' >";
      echo "<td>" . $row['NumberofVotes'] . "</td>";
        $candidateid=$row['CandidateID'];

    }

这是错误

Array ( [0] => 1 [CandidateID] => 1 [1] => Jejomar Binay [CandidateName] => Jejomar Binay [2] => President [Position] => President [3] => [NumberofVotes] => ) Array ( [0] => 2 [CandidateID] => 2 [1] => Mar Roxas [CandidateName] => Mar Roxas [2] => President [Position] => President [3] => 1 [NumberofVotes] => 1 )

我现在将向您展示整个代码及其工作现在,我的输出是在单选按钮工作时添加1个投票数。它没有错误,但是当我选择第一个单选按钮时,它只更新第二个数据。

<html>
        <center>
        <font size="2" face = "century gothic">
        <?php
        $con=mysqli_connect("localhost","root","","election2016");
        // Check connection
        if (mysqli_connect_errno())
        {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }
        $result = mysqli_query($con,"SELECT * FROM candidate_info");
        echo "<table border='1'>
        <tr>
        <th>Candidate Name</th>
        <th>Position</th>
        <th>Vote</th>
        <th>Number of Votes</th>
        </tr>";
        while ($row = mysqli_fetch_array($result)) {
            echo "<tr>";

            echo "<td>" . $row['CandidateName'] . "</td>";
            echo "<td>" . $row['Position'] . "</td>";
             echo "<td><input type='radio' name='candidateid' value='".$row['CandidateID']."' >";
          echo "<td>" . $row['NumberofVotes'] . "</td>";
            $candidateID=$row['CandidateID'];

        }
        echo "</table>";
        mysqli_close($con);
        ?>

        <br>
        <br>
        <form method = "post" action = "<?php $_PHP_SELF ?>">
     <input type="text" name="candidateid" value="<?php echo $candidateID;?>">
         <input name = "update" type = "submit" id = "update" value = "update">
        </form>
        </center>
        </font>
        </html>
        <?php
                 if(isset($_POST['update'])) {
                    $dbhost = 'localhost';
                    $dbuser = 'root';
                    $dbpass = '';
 $candidateid = $_POST['candidateid'];
                    $conn = mysql_connect($dbhost, $dbuser, $dbpass);

                    if(! $conn ) {
                       die('Could not connect: ' . mysql_error());
                    }

                    $candidateid = $_POST['candidateid'];


                    $sql = "UPDATE candidate_info SET numberofvotes = 1 WHERE candidateid = '$candidateid'" ;
                    mysql_select_db('election2016');
                    $retval = mysql_query( $sql, $conn );

                    if(! $retval ) {
                       die('Could not update data: ' . mysql_error());
                    }
                    echo "Updated data successfully\n";

                    mysql_close($conn);
                 }
        ?>

3 个答案:

答案 0 :(得分:1)

您的数组$row中没有关键字'candidateid'var_dump($row);查看关键名称,或者这些名称与数据库表格中的列名称相同,检查它的名称。

答案 1 :(得分:1)

该字段&#34; candidateid&#34;应该是整数数据类型,但在更新查询中使用&#39;&#39;(单引号)包含此字段值?

$sql = "UPDATE candidate_info SET numberofvotes = 1 WHERE candidateid = '$candidateid'";

如果是整数数据类型,则应删除单引号

$sql = "UPDATE candidate_info SET numberofvotes = 1 WHERE candidateid = $candidateid";

并且在MySQL中,每个字段名称都区分大小写,因此您告诉字段名称是

  

候选人,候选人姓名,职位,号码投票

所以,你也应该在检索值时使用这些名称

    <?php
             if(isset($_POST['update'])) {
                $dbhost = 'localhost';
                $dbuser = 'root';
                $dbpass = '';
                $candidateid = $_POST['candidateid'];
                $conn = mysql_connect($dbhost, $dbuser, $dbpass);

                if(! $conn ) {
                   die('Could not connect: ' . mysql_error());
                }

                $candidateid = $_POST['candidateid'];


                $sql = "UPDATE candidate_info SET numberofvotes = numberofvotes + 1 WHERE candidateid = '$candidateid'" ;
                mysql_select_db('election2016');
                $retval = mysql_query( $sql, $conn );

                if(! $retval ) {
                   die('Could not update data: ' . mysql_error());
                }
                echo "Updated data successfully\n";

                mysql_close($conn);
             }
    ?>
<html>
    <center>
    <font size="2" face = "century gothic">
    <?php
    $con=mysqli_connect("localhost","root","","election2016");
    // Check connection
    if (mysqli_connect_errno())
    {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
    $result = mysqli_query($con,"SELECT * FROM candidate_info");
    ?>
    <form method = "post" action = "<?php $_PHP_SELF ?>">
    <?php
    echo "<table border='1'>
    <tr>
    <th>Candidate Name</th>
    <th>Position</th>
    <th>Vote</th>
    <th>Number of Votes</th>
    </tr>";
    while ($row = mysqli_fetch_array($result)) {
        echo "<tr>";
        echo "<td>" . $row['candidatename'] . "</td>";
        echo "<td>" . $row['position'] . "</td>";
        echo "<td><input type='radio' name='candidateid' value='".$row['candidateid']."' >";
        echo "<td>" . $row['numberofvotes'] . "</td>";
    }
    echo "</table>";
    mysqli_close($con);
    ?>

    <br>
    <br>
    <input name = "update" type = "submit" id = "update" value = "update">
    </form>
    </center>
    </font>
    </html>

答案 2 :(得分:1)

需要注意的要点:

  1. 无需创建单独的<form></form>来发送candidateid以更新numberofvotes
  2. 如果您在同一页面提交,请避免多个数据库连接。
  3. 您的数据库表candidate_info字段名称与您在<table><tr></tr></table>中写的内容不匹配。因此,请使用确切的列名称数据库表中的内容。
  4. 将完整的<table></table>放入<form></form>
  5. 由于您正在寻找单个候选值以获得更新,因此radio按钮非常有用。如果需要更新多个候选值,则必须使用名称为array类型的复选框。
  6. 更新代码:

    <html>
        <center>
            <font size="2" face = "century gothic">
            <?php
            $con=mysqli_connect("localhost","root","","election2016");
            if (mysqli_connect_errno()) {
                echo "Failed to connect to MySQL: " . mysqli_connect_error();
            }
            ?>
            <form method="post" action = "<?php $_PHP_SELF ?>">
                <?php
                $result = mysqli_query($con,"SELECT * FROM candidate_info");
                echo "<table border='1'>
                    <tr>
                        <th>Candidate Name</th>
                        <th>Position</th>
                        <th>Vote</th>
                        <th>Number of Votes</th>
                    </tr>";
                    while ($row = mysqli_fetch_array($result)) {
                        echo "<tr>";
                            echo "<td>" . $row['candidatename'] . "</td>";
                            echo "<td>" . $row['position'] . "</td>";
                            echo "<td><input type='radio' name='candidateid' value='".$row['candidateid']."' ></td>";
                            echo "<td>" . $row['numberofvotes'] . "</td>";
                            $candidateID=$row['candidateid'];
                        }
                echo "</table>";
                mysqli_close($con);
                ?>
                <br>
                <br>
                <input name = "update" type = "submit" id = "update" value = "update">
            </form>
        </center>
        </font>
    </html>
    
    <?php
    if(isset($_POST['update'])) {
    
        $dbhost = 'localhost';
        $dbuser = 'root';
        $dbpass = '';
        $candidateid = $_POST['candidateid'];
        $conn = mysql_connect($dbhost, $dbuser, $dbpass);
    
        if(! $conn ) {
             die('Could not connect: ' . mysql_error());
        }
    
        $candidateid = $_POST['candidateid'];
    
        $sql = "UPDATE candidate_info SET numberofvotes = 1 WHERE candidateid = '$candidateid'" ;
        mysql_select_db('election2016');
        $retval = mysql_query( $sql, $conn );
    
        if(! $retval ) {
             die('Could not update data: ' . mysql_error());
        }
        echo "Updated data successfully\n";
    
        mysql_close($conn);
    }
    ?>