从关联数组创建的输入中保留提交/重新加载时的输入值(No Jquery/Javascript)


retain input value on submit/reload from input created from associative array (No Jquery/Javascript)

此处为学生。我在php中学习一个类,我必须使用php,而不是jQuery或javascript来完成所有工作(不要抱怨,只是我学习的这个类的情况如何——它非常酷,我非常喜欢它)。

我正在开发学生php应用程序,当我完成后,该应用程序将使用数据抓取来访问本周新发布的漫画书,并将它们存储在一个关联数组中,然后循环该数组以创建一系列输入(数字),允许用户指定他们想要订购的每本漫画的数量。然后我会做一些数学运算,向用户显示小计、税款和总额,并要求他们确认或修改订单。这是一个学生项目,我是一名学生。这不是一个真实世界的用例,而是一堂培训课。

我发现的问题是,在提交时,我无法填充输入值,这样人们就可以看到他们订购了什么/他们的订单值是什么,如果他们想"修改"它,并在确认之前重新提交订单。

var_dumps显示我有这个值,只是在进行post-back提交后,我无法在其相应的输入字段中重新填充/显示这个值。在我看来,问题似乎出在".$_POST['valueName']"上。由于每个输入都是从关联数组中生成的,所以我不知道名称是什么,所以我不能简单地执行"$_POST['valueName']",而是必须执行类似"$_POST['$var']"的操作,但这与通过串联执行的操作不同。希望有人知道我如何才能最好地解决这个问题。

再说一遍——我是一名学生,所以请假设我什么都不知道——谢谢大家的关注干杯

这是我的测试阵列:

<?php
    // My test array
    $newRelease = [
        'All-New Wolverine #7' => '3.99',
        'Captain America Omnibus Volume 1 HC (New Printing)' => '125.00',
        'Amazing Spider-Man #11' => '3.99',
        'Daredevil #6 (David Lopez Story Thus Far Variant Cover)' => 'AR',
        'Doctor Strange #7 (Chris Bachalo Regular Cover)' => '3.99',
    ];

    /*
     * Loop thru array, create inputs which populate
     * when submitted based on post values
     * PHP course - can't use javascript/jquery - must be PHP
    foreach ($newRelease as $title => $price) {
    echo $title . ' - ' . $price .  ' (ea.) <input type="text" name="' . $title . '" value="' . $_POST[$title] . '" > <br /> -- ' . $check . ' -- <br/><br />';
    }

问题:

我发现的问题是,在提交时,我无法填充输入值,这样人们就可以在看到总数后看到他们想要更改的顺序。

解决方案:

foreach循环的每次迭代中,检查是否设置了$_POST['YOUR_FIELD_NAME']。如果设置了,则显示用户提交的值,即$_POST['YOUR_FIELD_NAME'],否则显示预定义的数组值price

<?php
    $newRelease = [
        'All-New Wolverine #7' => '3.99',
        'Captain America Omnibus Volume 1 HC (New Printing)' => '125.00',
        'Amazing Spider-Man #11' => '3.99',
        'Daredevil #6 (David Lopez Story Thus Far Variant Cover)' => 'AR',
        'Doctor Strange #7 (Chris Bachalo Regular Cover)' => '3.99',
    ];
    ?>
    <form action="index.php" method="POST">
    <?php
    foreach ($newRelease as $title => $price){
        $title = str_replace(' ', '_', $title);
        ?>
        <input type="text" name="<?php echo $title; ?>" value="<?php if(isset($_POST[$title])){ echo $_POST[$title]; }else{ echo $price; } ?>" ><br />
        <?php
    }
    ?>
    <input type="submit" name="submit" value="submit" />
    </form>
    <?php
?>

为什么要使用str_replace()函数

在输入字段名称中不能使用点或空格。来自文件:

变量名中的点和空格将转换为下划线。例如,变为$_REQUEST["a_b"]。

因此,您必须使用str_replace()函数将所有空格替换为下划线,以便$_POST能够检测到用户提交的值。如果要查看$_POST超全局的内容,请执行var_dump($_POST);