2017-02-10 3 views
-1

私は販売クーポンをレンダリングするためにforeachを実行しました。ユーザーはそのクーポームを選択して取り消すことができます。彼はパスワードを入力し、係員はその販売を取り消すことができます。codeigniterで複数のフォームを生成するForeach - 値が間違っている

問題:送信時に、常に最後のフォーム値が送信されます。どうして?おそらくそれはidかsubmitボタン名の問題だと思いますが、確かに分かりません。テストされたフォーム上のID、送信時の別の名前など。何も動作しません。 最初に生成されたフォームにユーザーパスワードを入力すると、パスワード入力が空になります。しかし、最後に生成されたフォームにパスワードを入力すれば、入力はOKになります!また、隠れた入力の値は、常に最後の形式からのものです。私は各クーポンに1つのフォームと1つの送信ボタンを使用しています。それらのすべては同じ属性と入力(おそらく問題)を持っていますが、私はそれを理解できません。 アイデア2日間はそれに取り組み、今までは何もしていません。

のforeachコード:

<?php 
$queryCancel = $this->posweb->get_last_transactions($id)->result(); 
    foreach ($queryCancel AS $cupom) { 
?> 
<?php echo form_open('posweb/operacao'); ?> 
<div> 
    <input type="hidden" name="hdidUser" value="<?php echo $query->idUser ?>"/> 

    <label>User Password</label> 
    <input name="pswUser" type="password" class="form-control"> 
    <br> 
    <button type="submit" class="btnSalvar btn btn-block btn-danger btn-danger-border"> 
     Cancel this coupom 
    </button> 
    <input type="hidden" name="operation_type" 
      value="cancelSale"> 
</div> 
</form> 
+0

このコードには1つのフォーム要素しかありませんか? –

+0

@BrianRamsey no。 PHPはこのような10のフォームを生成しています。 (最後の10件/ coupom) –

+0

あなたのコードの貼り付けが完了していなければなりません... CIバリデーションライブラリを使用していますか? –

答えて

0

まだ支援するための具体的な回答を、私はロジックを変更しました。 10個のフォームを使用する代わりに、<form>タグを削除し、div内は<a>タグになります。 その<a>タグはブートストラップモーダルにリンクしています。リンクからmodalにdata-hrefを介してvarsを渡します。 私が必要とするPHPからのすべてのデータを隠し入力に入れ、ユーザー入力パスワードで送信します。 これは機能します。

ビュー:

<?php 
$queryCancel = $this->posweb->get_last_transactions($id)->result(); 
    foreach ($queryCancel AS $cupom) { 
?> 
<div> 
    <a data-href="<?php echo $query->userId ?>" data-valid="<?php echo $query->valid_date ?>" data-idloja="<?php echo $idLoja ?>" data-estab="<?php echo $query->cnpj_loja ?>" data-valor="<?php echo $cupom->valor ?>" data-dtcompra="<?php echo date('d/m/Y', strtotime($cupom->created_at)) ?>" data-toggle="modal" data-target="#cancel-sale" class="btn btn-block btn-danger btn-danger-border" title="Cancelar Venda"><span class="label label-default label-size"><i class="fa fa-check"></i></span></a> 
</div> 

<?php } ?> 

- モーダル -

<div class="modal fade modal-3d-slit" id="cancel-sale" aria-hidden="true" 
aria-labelledby="exampleModalTitle" role="dialog" tabindex="-1"> 
<div class="modal-dialog"> 
    <div class="modal-content"> 
     <div class="modal-header"> 
      <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
       <span aria-hidden="true">×</span> 
      </button> 
      <h4 class="modal-title"><i class="fa fa-warning" aria-hidden="true"></i> Atenção</h4> 
     </div> 
     <?php 
     echo form_open('posweb/operacao'); 
     ?> 
     <div class="modal-body"> 
      <div class="alert dark alert-alt alert-danger alert-dismissible" role="alert"> 
       <strong> 
        <span>Ask the customer to enter your password</span> 
       </strong> 
      </div> 

      <label>Customer Password</label> 
      <input name="pswUser" type="password" class="form-control" /> 
      <br> 
      <!--button type="submit" class="btnSalvar btn btn-block btn-danger btn-danger-border"> 
       Cancel this Coupom 
      </button--> 

      <input type="hidden" class="inputValue" name="hdUser" /> 
      <input type="hidden" class="inputValue2" name="hdvalidDate" /> 
      <input type="hidden" class="inputValue3" name="hdidLoja" /> 
      <input type="hidden" class="inputValue4" name="hdEstab" /> 
      <input type="hidden" class="inputValue5" name="hdValor" /> 
      <input type="hidden" class="inputValue6" name="hdDtCompra" /> 

      <input type="hidden" name="operation_type" value="cancelSale" /> 

     </div> 
     <div class="modal-footer"> 
      <button type="button" class="btn btn-default margin-0" data-dismiss="modal">Cancelar</button> 
      <button type="submit" class="btn btn-danger btn-ok">Confirmar</button> 
     </div> 
    </div> 
</div> 
</div> 

JavaScriptを - あなたはモーダルクリック<a>から欲しいvarsのPHPを渡す:

$('#cancel-sale').on('show.bs.modal', function (e) { 
    $(this).find('.btn-ok').attr('href', $(e.relatedTarget).data('href')); 
    $('.inputValue').val($(this).find('.btn-ok').attr('href')); 

    $(this).find('.btn-ok').attr('valid', $(e.relatedTarget).data('valid')); 
    $('.inputValue2').val($(this).find('.btn-ok').attr('valid')); 

    $(this).find('.btn-ok').attr('idloja', $(e.relatedTarget).data('idloja')); 
    $('.inputValue3').val($(this).find('.btn-ok').attr('idloja')); 

    $(this).find('.btn-ok').attr('estab', $(e.relatedTarget).data('estab')); 
    $('.inputValue4').val($(this).find('.btn-ok').attr('estab')); 

    $(this).find('.btn-ok').attr('valor', $(e.relatedTarget).data('valor')); 
    $('.inputValue5').val($(this).find('.btn-ok').attr('valor')); 

    $(this).find('.btn-ok').attr('dtcompra', $(e.relatedTarget).data('dtcompra')); 
    $('.inputValue6').val($(this).find('.btn-ok').attr('dtcompra')); 

}); 

ホープで誰かを助けます同じ問題。 ページ上に同じ要素を持つ複数のフォームがある場合、送信された値は常に最後のフォームの値であることがわかります。 理由がわかっている場合は、お知らせください。

+0

です最後のフォームだけが提出されているという卑劣な疑惑がありましたが、あなたの最初の質問には小さなコードしかありませんでしたので、誰もあなたを助けなかったでしょう。 –

+0

@BrianRamseyあなたは正しいです。最後のフォームのみが提出されます。しかし、それは私がinicialな質問で言ったことです。生成されたHTMLはこれと同じ10の形式(PHP以外)であるため、私が入れたコードは問題を理解するのに十分だと思いました。無関係のコードがたくさんあると助けてくれる人が混乱するかもしれないと思っていました。私は、要素の名前をさまざまな形で繰り返すのと同じように、自分の愚かな誤りだと思っていました。それは、私が忘れてしまった、または知らなかった何かがシンプルで簡単だったということです。しかし、あなたの時間と助けてくれてありがとう! –

+0

downvoted who:なぜですか? –

関連する問題