简体   繁体   中英

how to solve Undefined offset: error in php

I have a html code where I create a table and two radio button on each row. for giving different name to radio button on each row I used while loop and I++ way. that is

<form action = "submit_varification.php" method = "POST" onclick = "return validate()">

                        <div style="position: absolute; left: 50px; top: 90px;">
                        <label class="right"><font color="white">Date:</font></label>
                        <input type="text" id = "frmDate"  /><br>
                        <p id="date"></p>
                        </div>
                        <div style="position: absolute; left: 250px; top: 91px;">
                        <label class="right"><font color="white">V-ID:</font></label>
                        <input type="text" id = "myText" name = "reviewer" value = ""/><br>
                        </div>
                        <div style="position: absolute; left: 900px; top: 91px;">
                        <button type="button" name="show" id="show" onclick = "" >History</button>
                        </div>
                        <div style="position: absolute; left: 900px;">
                        <input type="submit" name="test" id="test" value="Submit"  /><br/>
                        </div>

                    <script>
                    var date = new Date();

                    document.getElementById("frmDate").value = (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear();

                    </script>
                </body>
                <table style="position: absolute; width:95%; left: 20px; top: 150px;" id = "table1">
                    <?php
                    $myDate = date('m/d/Y');
                    ?>
                        <tr>
                        <th>Date</th>
                        <th>Time</th> 
                        <th>Alias</th>
                        <th>Machine_Name</th>
                        <th>Build_Name</th>
                        <th>Build_version</th>
                        <th>WinDBG</th>
                        <th>.Net_Framework</th>
                        <th>Status</th>
                        </tr>
                        <?php
                            //get records from database
                            $sql3 = "SELECT * FROM data WHERE `Date` = '".$myDate."' ORDER BY id DESC";
                            $query = $conn->query($sql3);
                            if($query->num_rows > 0){
                            $i = 0 ;
                            while($row = $query->fetch_assoc()){ ?>
                            <tr> 
                            <td><?php echo $row['Date']; ?></td>
                            <td><?php echo $row['Time']; ?></td>
                            <td><?php echo $row['Alias']; ?></td>
                            <td><?php echo $row['Machine_Name']; ?></td>
                            <td><?php echo $row['Build_Name']; ?></td>
                            <td><?php echo $row['Build_Version']; ?></td>
                            <td><?php echo $row['WinDBG']; ?></td>
                            <td><?php echo $row['.NET_Framework']; ?></td> 
                            <td style='white-space: nowrap'><form><label class = "ready"><input type="radio" name="[<?php $i ?>]" value = "Ready">Ready</label><label class = "notready"><input type="radio" name="[<?php $i ?>]" value = "Not Ready" >Not Ready</label></form></td>
                            </tr> 

                            <?php $i++ ; } } ?>


                        </table>


                        </form>

and I want to store the value of each row to a database. so I used POST method on the form. and I am trying to take the value of radio button to database but I am facing a error like

 Notice: Undefined offset: 0 in C:\wamp64\www\submit_varification.php on line 33
Notice: Undefined offset: 1 in C:\wamp64\www\submit_varification.php on line 33
Notice: Undefined offset: 2 in C:\wamp64\www\submit_varification.php on line 33

and the PHP code:

$query = $conn->query($sql4);
                        if($query->num_rows > 0){
                        $i = 0 ;    
                        while($row = $query->fetch_assoc()){


                            //...insert into your DB.
                        $row1 = $row["Date"];
                        $row2 = $row["Time"];
                        $row3 = $row["Alias"];
                        $row4 = $row["Machine_Name"];
                        $row5 = $row["Build_Name"];
                        $row6 = $row['Build_Version'];
                        $row7 = $row["WinDBG"];
                        $row8 = $row[".NET_Framework"];

                        $status = $_POST["$i"]; // this is the error


                        $sql5 = "INSERT INTO history (`Date`, `Time`, `Alias`, `Machine_Name`, `Build_Name`, `Build_version`, `WinDBG`, `.NET_Framework`, `Status`, `Reviewed_By`) 
                        VALUES ('".$row1."','".$row2."','".$row3."','".$row4."','".$row5."','".$row6."','".$row7."','".$row8."', '".$status."', '".$reviewer."') ";
                        if ($conn->query($sql5) === TRUE) {
                        //echo "New record created successfully";
                        //echo nl2br("\n");
                        echo "";

                        } else {
                        echo "Error: " . $sql5 . "<br>" . $conn->error;
                        }

                        $i++ ; 
                        }
                        }   

is anyone have any solution for this?

Dump the array that populates $i for each loop. I would wager the array does not have the array key that the name="[<?php $i?>]" is expecting.

Can you remove the brackets in the name attribute and see if its working correct. Below is the code:

<td style='white-space: nowrap'>
<form><label class = "ready">
    <input type="radio" name="<?php $i ?>" value = "Ready">Ready</label>
    <label class = "notready"><input type="radio" name="<?php $i ?>" value = "Not Ready" >Not Ready</label>
</form>

Plus it would be better if you have some static text appended to the name column and in server side, you can loop it:

<td style='white-space: nowrap'>
<form><label class = "ready">
    <input type="radio" name="status_<?php $i ?>" value = "Ready">Ready</label>
    <label class = "notready"><input type="radio" name="status_<?php $i ?>" value = "Not Ready" >Not Ready</label>
</form>

Let me know if this helps..

You make nested forms. replace the line

<td style='white-space: nowrap'><form><label class = "ready"><input type="radio" name="[<?php $i ?>]" value = "Ready">Ready</label><label class = "notready"><input type="radio" name="[<?php $i ?>]" value = "Not Ready" >Not Ready</label></form></td>

with this:

<td style='white-space: nowrap'><label class = "ready"><input type="radio" name="<?php $i ?>" value = "Ready">Ready</label><label class = "notready"><input type="radio" name="<?php $i ?>" value = "Not Ready" >Not Ready</label></td>

Also remove the brackets, like gopal panadi mentioned.
Furthermore I am not sure if you can have input tags inside labels. shouldn't they be next to each other?

Edit: after that if it fails, dump the $_POST array and see how/if the radio values are in $_POST. var_dump($_POST);die();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM