数组只显示一条记录

时间:2017-02-21 02:29:45

标签: php arrays

我提前道歉再次发布这个问题。

我得到了Barmar的大力帮助,解决了我向用户显示数组结果时遇到的问题。

错误问题已解决,结果正在显示。

问题是数组显示一条记录。

当我们插入多行记录时,只显示一条记录。

有谁知道可能出现什么问题?

基本上,默认情况下,会向用户显示一行文本框。

如果用户需要添加其他记录,则用户单击“添加”按钮以动态添加另一行文本框,

以下代码来自名为preview.php的页面。它应该捕获用户在标记页面中输入的所有记录并显示它们,以便用户可以选择查看记录并在需要时返回进行更改,或者如果一切正常则提交记录。

到目前为止,无论用户是创建了一行还是多行,它都只显示一条记录。

我们希望捕获所有行。

下面的代码我可能会遗漏什么想法?

我提前道歉。我明天必须在工作中展示这一点,并且它已经占据了整个周末。

<?php
//echo "DEBUG POST DATA: <pre>".print_r($_POST, 1)."</pre>";
if(isset($_POST['employeename']))
    $employeename = $_POST['employeename'];
if(isset($_POST['ttitle']))
    $ttitle = $_POST['ttitle'];

echo $employeename .'<br>';
echo $ttitle .'<br> <hr width=400 align=left>';

$rowIDs = $_POST['rowIDs'];

for ($id = 0; $id < $rowIDs; $id++){
    $sourcename1 = $_POST['sourcename1'][$id];
    $sourceaddress1 = $_POST['sourceaddress1'][$id];
    $income1 = $_POST['income1'][$id];

    echo $sourcename1 .'<br>';
    echo $sourceaddress1.'<br>';
    echo $income1.'<br>';
}
?>


DEBUG POST DATA: 
Array
(
    [employeename] => Catherine Duffy
    [ttitle] => Sr. Systems Analyst
    [rowIDs] => 1
    [sourcename1] => Array
        (
            [0] => Mark 

Zverkov
        )

    [sourceaddress1] => Array
        (
            [0] => Address1
        )

    [income1] => Array
        (
            [0] => $79,000.00
        )

    [sourcename13] => Jim Brown
    [sourceaddress13] => 32 Xooker Rd
    [income13] => $99,000.00
    [spousename] => 
    [spouseAddress] => 
    [spouseIncome] => 
    [dividentname] => 
    [dividentaddress] => 
    [dividentAmt] => 
    [reimbursmentName] => 
    [reimburseAddr] => 
    [remursementAmt] => 
    [inputHonoraria] => 
    [giftname] => 
    [giftaddress] => 
    [giftamount] => 
    [orgname] => 
    [orgaddresss] => 
    [donationamt] => 
    [creditorname] => 
    [creditoraddress] => 
    [creditAmt] => 
    [email] => 
    [submitted] => true
)
Catherine Duffy
Sr. Systems Analyst

Mark Zverkov
Address1
$79,000.00

//标记

<script id="row-template" type="text/x-handlebars-template">
<div>
      <!--reseed attribute IDs in case of gap resulting from deletions -->
     <input type="hidden" name="rowIDs[]" value="{{rowNumber}}" />
    <div class="form-group">
        <label for="sourcename{{rowNumber}}">Name</label><br>
        <input type="text" name="sourcename1{{rowNumber}}" id="sourcename1{{rowNumber}}" value="" class="required requiredField" />
        <?php if($nameError != '') { ?>
            <span class="error"><?=$nameError;?></span>
        <?php } ?>
    </div>
    <div class="form-group">
        <label for="sourceaddress1{{rowNumber}}">Address</label><br>
        <input type="text" name="sourceaddress1{{rowNumber}}" id="sourceaddress1{{rowNumber}}" style="width:250px;" class="form-control" value="" class="required requiredField" />
        <?php if($nameError != '') { ?>
            <span class="error"><?=$nameError;?></span>
        <?php } ?>
    </div>
    <div class="form-group">
      <label for="income1{{rowNumber}}">Income</label><br>
        <input type="text" style="width:250px;"  class="form-control" name="income1{{rowNumber}}" id="income1{{rowNumber}}" value="<?php if(isset($_POST['spouseIncome{{rowNumber}}'])) echo $_POST['spouseIncome{{rowNumber}}'];?>" class="required requiredField" />
        <?php if($nameError != '') { ?>
            <span class="error"><?=$nameError;?></span>
        <?php } ?>
    </div>
    <input id="Button{{rowNumber}}" type="button" rel="remove-row" value="Remove" />
</div>
</script>
<div id="addrow">
    <div>
    <!--reseed attribute IDs in case of gap resulting from deletions -->
       <input type="hidden" name="rowIDs[]" value="{{rowNumber}}" />
    <div class="form-group">
        <label for="sourcename">Name</label><br>
        <input type="text" name="sourcename1[]" id="sourcename1" value="" class="required requiredField" />
        <?php if($nameError != '') { ?>
            <span class="error"><?=$nameError;?></span>
        <?php } ?>
    </div>
    <div class="form-group">
        <label for="sourceaddress1">Address</label><br>
        <input type="text" name="sourceaddress1[]" id="sourceaddress1" style="width:250px;" class="form-control" value="" class="required requiredField" />
        <?php if($nameError != '') { ?>
            <span class="error"><?=$nameError;?></span>
        <?php } ?>
    </div>
    <div class="form-group">
      <label for="income1">Income</label><br>
        <input type="text" name="income1[]" id="income1" style="width:250px;"  class="form-control" value="" class="required requiredField" />
        <?php if($nameError != '') { ?>
            <span class="error"><?=$nameError;?></span>
        <?php } ?>
        <input type="button" value="Add More" rel="add-row" />
    </div>
    </div>
</div><br><br>

1 个答案:

答案 0 :(得分:0)

从您发布的代码段和调试中,您的PHP代码似乎期望数据的格式与HTML表单生成的格式不同。很明显,你有很多关于表单的内容,我可能会建议你开始一个新的空白页面并逐个重新创建表单,以确保在添加下一个字段之前每个部分都正确提交。

具体到从表单接收多个记录的问题,如果您为重复的表单部分格式化HTML(假设{{ rowNumber }}1替换,23,...每次添加一个新的),像这样:

<div class="this-div-gets-repeated">
    <label>
        Source Name:
        <input type="text" name="source[{{ rowNumber }}][name]"/>
    </label>
    <label>
        Source Address:
        <input type="text" name="source[{{ rowNumber }}][address]"/>
    </label>
    <label>
        Income:
        <input type="text" name="source[{{ rowNumber }}][income]"/>
    </label>
</div>

他们可以期望在PHP中解析它:

<?php
$sources = isset($_POST['source']) ? $_POST['source'] : []; // just in case no sources are posted
foreach ($_POST['source'] as $id => $source) {
    $sourcename = $source['name'];
    $sourceaddress = $source['address'];
    $income = $source['income'];
    echo "$sourcename<br>$sourceaddress<br>$income<br>";
}

编辑:对您的HTML的进一步评论 您的HTML表单有两个块:第一个“记录”的一组字段,然后是任何其他记录的重复模板。 HTML的第一个问题是您的“第一个记录”表单字段的名称与“更多记录”表单字段的名称不同: 您的“第一个记录”表单字段包含<input type="text" name="sourcename1[]"/>等字段。 您的“更多记录”表单字段包含<input type="text" name="sourcename1{{rowNumber}}"/>等字段。 如果您在单击“添加更多”几次后查看生成的HTML,您的HTML将如下所示:

<!-- the default "first record" -->
<input type="text" name="sourcename1[]"/>

<!-- from the first click on "Add More" -->
<input type="text" name="sourcename11"/> 

<!-- from the second click on "Add More" -->
<input type="text" name="sourcename12"/>

从中您可以看到输入“第一个记录”字段的值与动态添加的“添加更多”字段中的值的显示方式有何不同?

您的Angular模板似乎也有一些奇怪之处:您的PHP $ _POST包含“首个记录”字段([sourcename1] => Array)中的值,而且“添加更多”字段中有值(在[sourcename13] => Jim Brown {{rowNumber}} 3}的{{rowNumber}}中,您是否有意在Angular的3开始user = User.objects.filter(username=username).exists()