【问题标题】:echo does not work, but the table is successfully updatedecho 不起作用,但是表格更新成功
【发布时间】:2015-03-03 19:24:21
【问题描述】:

更新我的表格时,它工作正常。但唯一的问题是我似乎无法回显输入中的字段。 并显示错误,未定义的索引。我不明白,我什么都试过了。但它不会回显。

例如:

未定义索引:第 80 行 /Applications/XAMPP/xamppfiles/htdocs/finalproject/admin/records/activities_update.php 中的 fam_name

我在获取 ID 回显方面没有问题。但其他变量 fam_name 、 fam_add、nochild、aid 等等......我无法检索它。我希望你明白我想说什么

我尝试使用 $_POST 、 $_GET 和行,但不起作用 =\

需要帮助几天来试图解决这个问题。

 <?php 
if(isset($_GET['success']) === true && empty($_GET['success']) === true){
    echo ' Your details have been updated';
} else {

if (empty($_POST) === false && empty($errors) === true) {
    $fam_data = array(
            'fam_name'                  => $_POST['fam_name'],
            'fam_add'                   => $_POST['fam_add'],
            'nochild'                   => $_POST['nochild'],
            'aid'                       => $_POST['aid'],
            'date_visited'              => $_POST['date_visited'],
            'visited_since'                 =>  $_POST['visited_since'],
            );

        edit_family($fam_data);
        header('Location: rec_act1.php?success');
        exit();
        //exit();

} else if (empty($errors) === false) {
    echo output_errors($errors);
}

?>

<div id="insert_form">
<form name="update" action = "" method ="post">
<table border = "0" align = "center">
<tr> 
    <th colspan = "2"> </th>
</tr>
<tr>

    <td><input type = "hidden" name = "id" maxlength = "9" value="<?php echo $id = $_GET['id'];?>"></td> Editing: <?php echo $id = $_GET['id'];?>
</tr>
<tr>
    <td>Family Name: </td>
    <td><input type = "text" name = "fam_name" maxlength = "9"  value="<?php echo $_POST['fam_name']; ?>"></td>
</tr>
<tr>
    <td>No. Of Family: </td>
    <td><input type = "text" name = "nochild" maxlength = "30"  value="<?php echo $row['nochild'];?>"></td>
</tr>
<tr>
    <td>Family Address: </td>
    <td><input type = "text" name = "fam_add" maxlength = "30"  value="<?php echo $row['fam_add'];?>"></td>
</tr>

<tr>
    <td>Types of Aid received: </td>
    <td><input type = "float" name = "aid" step = 'any' min = 1 max = 99999999  value="<?php echo $row['aid'];?>"></td>
</tr>

<tr>
    <td>Date Visited</td>
    <td><input type = "date" name = "date_visited"  value="<?php echo $row['date_visited'];?>"></td>
</tr>

<tr>
    <td>Visited Since </td>
    <td><input type = "date" name = "visited_since" value="<?php echo $row['visited_since'];?>"></td>
</tr>


    <td><input type ="submit" name = "submit" value = "Update"></td></table>
</form></div><? } ?>

【问题讨论】:

    标签: php echo undefined-index


    【解决方案1】:

    表单中使用的$row不存在。

    在表单之前,您需要从表中选择当前数据,然后将该数据保存到$row

    $row = $mysqli->fetch_assoc($mysqli->query($conn, "SELECT ...")); // select family data
    

    在 $mysqli 中当然是 MySQLi 实例。

    由于更新行,我希望您的数据库中有数据。如果您不知道并且不想看到undefined index 通知,则表单中的值必须是isset,例如。

    value="<? echo isset($row['fam_name']) ? $row['fam_name'] : ''; ?>"
    

    【讨论】:

      【解决方案2】:

      在这里猜测,因为不清楚您在哪里使用 echo,但我猜测在标头重定向后数据会丢失,因为信息肯定不会在 rec_act1.php 中可用。尝试重写脚本以不重定向,或者如果必须,在会话中传递数据。

      【讨论】:

        【解决方案3】:

        要在$_GET 中获取数据,您需要在查询字符串中发送所有变量,例如

        if (empty($_POST) === false && empty($errors) === true) {
           $fam_name = $_POST['fam_name'];
           // set your all vars
        
            <------rest of code ---->
        
           header('Location: rec_act1.php?id=$id&fam_name=$fam_name');
        

        并获取您的查询字符串 var 的值,例如:-

        value="<?php echo $_GET['id'];?>"
        value="<?php echo $_GET['fam_name'];?>"
        // and so on
        

        【讨论】:

        • 不,我认为这不是问题 =\ 我的意思是说输入中的回声字段。它不会回声。
        • 您是否尝试过在查询字符串中发送所有变量
        【解决方案4】:

        不要直接回显$_POST变量,它允许XSS攻击的可能性,总是先清理。我还在您的代码中注意到,您正在创建 $fam_data 数组,然后直接重定向而不创建 $_SESSION,因此除非您的 edit_family 函数启动会话,否则该数组将丢失。对我来说,问题似乎是您没有从表单中收到您的 $_POST['fam_name'] 变量,或者它在页面刷新时丢失了。

        尝试添加...

        //start session before any output to browser
        session_start();
        
        if (isset($_POST['fam_name'])) {
            //only process the request if expected values are found
            if (ctype_alpha($_POST['fam_name'])) {
                $_SESSION['fam_name'] = $_POST['fam_name'];
            }
        } else {
            //this alert will let you know if the value was empty
            echo "no family name received";
            exit;
        }
        

        然后在您的表单输入中,使用...

        value="<?php echo $_SESSION['fam_name']; ?>">
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-11
          • 1970-01-01
          • 1970-01-01
          • 2015-08-06
          相关资源
          最近更新 更多