2017-02-21 4 views
-1

Freunde,Array zeigt nur einen Datensatz

Ich entschuldige mich im Voraus für das Posten dieser Frage erneut.

Ich habe große Hilfe von Barmar bei der Auflösung des Problems, das ich mit Array-Ergebnisse für Benutzer angezeigt hatte.

Das Fehlerproblem wurde behoben und das Ergebnis wurde angezeigt.

Problem ist das Array zeigt einen Datensatz an.

Wenn wir mehrere Datensätze einfügen, wird nur ein Datensatz angezeigt.

Weiß jemand, was könnte falsch sein?

Grundsätzlich wird einem Benutzer standardmäßig eine Zeile mit Textfeldern angezeigt.

Wenn Benutzer zusätzliche Datensätze muss hinzufügen, klickt der Benutzer auf die Schaltfläche Hinzufügen dynamisch eine zusätzliche Reihe von Textfelder hinzufügen,

Der Code ist unten von einer Seite namens preview.php. Es soll alle Datensätze erfassen, die vom Benutzer in die Markup-Seite eingegeben wurden, und sie anzeigen, sodass der Benutzer die Datensätze überprüfen und ggf. Änderungen vornehmen oder Datensätze senden kann, wenn alles in Ordnung ist.

Soweit oben angegeben, wird nur ein Datensatz angezeigt, unabhängig davon, ob der Benutzer eine oder mehrere Zeilen erstellt hat.

Wir möchten alle Zeilen erfassen.

Irgendwelche Ideen, was ich mit Code unten vielleicht fehlen würde?

Ich entschuldige mich im Voraus. Das muss ich morgen bei der Arbeit zeigen, und das hat mein ganzes Wochenende gekostet.

<?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 

// Markup

<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

Es könnte nützlich sein, das HTML-Formular zu sehen, damit wir Namen/Vorkommen überprüfen können – RiggsFolly

+0

Sind Sie sicher, dass $ _POST die Daten enthält, die Sie erwarten? –

+1

was die Ausgabe von 'print_r ($ _ POST);'? – nogad

Antwort

0

Aus den Code-Schnipsel und debuggen Sie auf dem Laufenden, Ihre PHP-Code erscheint die Daten in einem anderen Format als Ihr HTML-Formular erzeugt, ist zu erwarten. Es ist klar, dass Sie mit dem Formular viel zu tun haben. Ich könnte vorschlagen, eine neue, leere Seite zu erstellen und das Formular Stück für Stück neu zu erstellen, um sicherzustellen, dass jedes Stück korrekt übergeben wird, bevor Sie den nächsten Feldblock hinzufügen.

spezifisch auf die Frage mehrerer Datensätze aus dem Formular empfangen, wenn Sie Ihre HTML-Code für den Teil der Form formatieren, die (unter der Annahme {{ rowNumber }} wiederholt wird, wird auch durch 1, ersetzt 2, 3, ... jedes Mal, wenn ein neues wie dies hinzugefügt):

<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> 

Sie Sie es in PHP so zu analysieren erwarten:

<?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>"; 
} 

Edit: weitere Kommentare zu Ihrem HTML- Ihr HTML-Formular enthält zwei Blöcke: eine Reihe von Feldern für den ersten "Datensatz" und dann eine sich wiederholende Vorlage für alle weiteren Datensätze. Das erste Problem mit Ihrem HTML ist, dass Ihre Formularfelder "ersten Datensatz" andere Namen als Ihre "mehr Datensätze" -Formularfelder haben: Ihre "ersten Datensatz" -Formularfelder haben Felder wie <input type="text" name="sourcename1[]"/>. Ihre Formularfelder "mehr Datensätze" haben Felder wie <input type="text" name="sourcename1{{rowNumber}}"/>. Wenn man sich die HTML sehen waren, die, sobald Sie „hinzufügen“ ein paar Mal, Ihre HTML würde so aussehen geklickt haben generiert wird:

<!-- 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"/> 

Von diesem können Sie sehen, wie sich die Werte in die eingegebene "First record" -Felder werden anders als die Werte aus den dynamisch hinzugefügten "add more" -Feldern angezeigt?

Es scheint auch, dass es einige Verrücktheit mit Ihren Angular-Vorlagen geschieht: Ihre PHP $ _POST enthält die Werte aus dem „ersten Datensatz“ Felder (in [sourcename1] => Array), und es gibt Werte aus dem „add mehr“ Felder (in [sourcename13] => Jim Brown wo {{rowNumber}} war 3), aber starten Sie absichtlich {{rowNumber}} bei 3 in Angular?

+0

@Das ist genau das, was ich mag.Sie können meinen Code oder meine Vorgehensweise kritisieren, aber Sie bieten konstruktive Beratung und in Ihrem Fall, Fallbeispiel, ich schätze das sehr. Danke . Ich denke, meine Frage ist, was ist der Unterschied zwischen Ihrem Beispielcode und mir. Übrigens verwende ich AngularJS, um das dynamische Bit zu erstellen. Ich bitte, damit ich es besser verstehen kann. – Kenny

+0

Ich bin mit Angular nicht vertraut, aber lassen Sie mich meine Antwort mit den Problemen aktualisieren, die ich mit Ihrem HTML sehe (jetzt, dass Sie es erneut gepostet haben) –

+0

danke für Ihre Geduld und ausgeglichene Annäherung. – Kenny

Verwandte Themen