2010-05-24 4 views
0

J'utilise une table minuscule avec des champs de saisie pour l'affichage dans une page. Je veux récupérer les données que l'utilisateur remplit pour un numéro d'instrument particulier.Récupération de valeurs de post-traitement dynamiques

Mon code

<form name="frmDeposit" action="paymentdeposited.php" method="post"> 
    <table cellpadding="0" cellspacing="0" border="0" id="table" class="tinytable" style="width:700px;"> 
     <thead> 
      <tr> 
       <th><h3>Email</h3></th> 
<th><h3>Amount Paid</h3></th> 
<th><h3>Instrument Type</h3></th> 
<th><h3>Instrument No.</h3></th> 
<th><h3>Date Paid</h3></th> 
<th class="nosort"><h3>Date Deposited</h3></th> 
<th class="nosort"><h3>Bank Name</h3></th> 
<th class="nosort"><h3>Slip No.</h3></th> 
<th class="nosort"><h3>Submit</h3></th> 
      </tr> 
     </thead> 
     <tbody> 
<?php 
foreach($paymentsdeposited as $paymentdeposited) 
{ 


?> 
      <tr> 
       <td><?php echo $paymentdeposited[email];?></td> 
       <td><?php echo $paymentdeposited[amount];?></td> 
<td><?php echo $paymentdeposited[instrument];?></td> 
       <td><?php echo $paymentdeposited[instrumentnumber];?></td> 
<td><?php echo $paymentdeposited[dated];?></td> 
<td><input type="text" name="txtDateDeposited_<?php echo $paymentdeposited[pk_paymentinstrumentid];?>" class="field date-pick"/></td> 
<td><input type="text" name="txtBankName_<?php echo $paymentdeposited[pk_paymentinstrumentid];?>" class="field"/></td> 
<td><input type="text" name="txtSlipNo_<?php echo $paymentdeposited[pk_paymentinstrumentid];?>" class="field"/><input type="hidden" name="txtPaymentInstrumentNo_<?php echo $paymentdeposited[pk_paymentinstrumentid];?>" value="<?php echo $paymentdeposited[pk_paymentinstrumentid];?>" class="field"/></td> 
<td><input type="submit" name="btnSubmit1" value="Submit"/></td> 

      </tr> 
<?php 
} 
?> 

     </tbody> 
    </table> 

Les sorties de commande print_r

Array 
(
[txtDateDeposited_57] => 2010-05-07 
[txtBankName_57] => pnb 
[txtSlipNo_57] => 121 
[txtPaymentInstrumentNo_57] => 57 
[btnSubmit1] => Submit 
[txtDateDeposited_51] => 
[txtBankName_51] => 
[txtSlipNo_51] => 
[txtPaymentInstrumentNo_51] => 51 
[txtDateDeposited_52] => 
[txtBankName_52] => 
[txtSlipNo_52] => 
[txtPaymentInstrumentNo_52] => 52 
[txtDateDeposited_45] => 
[txtBankName_45] => 
[txtSlipNo_45] => 
[txtPaymentInstrumentNo_45] => 45 
[txtDateDeposited_47] => 
[txtBankName_47] => 
[txtSlipNo_47] => 
[txtPaymentInstrumentNo_47] => 47 
) 

Je veux récupérer les valeurs id 57 pour lequel il est entré dans les valeurs. Mais je suis incapable de construire une logique pour récupérer cette valeur. Je veux le rendre dynamique.

Répondre

2

Utilisez explode. .: par exemple

foreach ($POST AS $key => $value) { 
    if (strpos ($key, '_') !== false) { 
     list($field, $id) = explode ('_', $key, 2); 

     if ($value) { 
      var_dump ($field, $id, $value); 
     } 
    } 
} 

Ou si vous connaissez le Id:

var_dump ($_POST['txtPaymentInstrumentNo_'.$Id]); 

Modifier

Code Simpler. thx à notJim.

+2

Je pense que vous voulez 'explode ('_', $ key, 2);' car l'argument final spécifie le nombre d'éléments dans le tableau retourné. Vous pouvez utiliser 'list ($ field, $ id) = explode ('_', $ key, 1);' pour éviter '$ tmp', fyi. Mieux vaut s'assurer que le trait de soulignement existe en premier! – notJim

+0

Oui, vous avez raison. merci de le signaler. –

+0

Je souhaite mettre à jour une table en fonction des entrées effectuées par l'utilisateur pour un instrument particulier. Le code me donnera tous les identifiants, mais je veux l'id pour lequel il a fait une entrée. –

1

Je formater vos noms d'entrée en utilisant la notation de tableau:

<td><input type="text" name="txtDateDeposited[<?php echo $paymentdeposited[pk_paymentinstrumentid];?>]" class="field date-pick"/></td> 

afin que vos données résultantes pourraient obtenir accès comme

$_REQUEST['txtDateDeposited']['57'] 

mise à jour:

foreach($_POST as $key => $value) { 
    $keyPieces = explode("_", $key); 
    $field = implode("_", array_slice($keyPieces, 0, count($keyPieces)-1)); 
    $id = $keyPieces[count($keyPieces)-1]; 
    // txtDateDeposited_57 becomes 
    // $id -> 57 
    // $field -> txtDateDeposited 
} 

si vous êtes sûr vous n'utilisez qu'un seul trait de soulignement, puis:

foreach($_POST as $key => $value) { 
     $keyPieces = explode("_", $key); 
     $field = $keyPieces[0]; 
     $id = $keyPieces[1]; 
     // txtDateDeposited_57 becomes 
     // $id -> 57 
     // $field -> txtDateDeposited 
    } 

fonctionnerait aussi. Notez, pour tout ce qui utilise la méthode ci-dessus, je trouve que mettre le numéro/identifiant en premier est meilleur pour que vous puissiez faire $ pieces [0] au lieu de compter le tableau. De plus, vous array_slice ($ pieces, 1) l'enlèvera pour vous sans le compte additionnel.

+0

Salut dan merci mais ce $ _REQUEST ['txtDateDeposited'] ['57'] est statique je veux le rendre dynamique –

+0

Réponse mise à jour pour montrer l'analyse des clés de tableau –

+0

Je veux mettre à jour une table basée sur les entrées faites par le utilisateur pour un instrument particulier. Le code donnera tous les identifiants mais je veux l'identifiant pour lequel il a fait une entrée. –

Questions connexes