2017-03-03 2 views
0

Ich benutze Kuchen php 3.0, um eine Anwendung zu entwickeln. Wenn der Benutzer versucht, seine Details zu bearbeiten, wird die Flash-Erfolgsmeldung mehrmals angezeigt, da das Formular mehrmals gesendet wird. Ich benutze Kuchen php Form Builder. Hier ist mein CodeMehrfache Formularübermittlung in Kuchen php 3.0

<?= $this->Form->create('Project'); ?> 
    <?= $this->Html->link(' キャンセル 編集', array('action' => 'view', $project['id']), array('class' => 'btn btn-default pull-right', 'style' => 'margin: 5px 14px 0 0', 'rule' => 'button')); ?> 
    <?= $this->Form->button(__(' 保存 '), array('class' => 'btn btn-default pull-right', 'style' => 'margin: 5px 14px 0 0 ', 'id' => 'edit', 'onsubmit'=> 'disable()')); ?> 
    <h3 style="font-weight:bold; padding-left:10px; margin: 10px 0 20px;"> 案件基本情報 </h3> 

    <section id="unseen"> 
    <div class="col-sm-12" role="complementary"> 
    <div class="panel panel-default" > 
    <div class="panel-body table-responsive" style ="padding:0px !important"> 
     <table class="table table-bordered table-condensed f11 table-nowrap " style ="margin:0px; "> 
     <tbody> 
      <tr> 
      <td width="23%" class="numeric cell-bg">案件ID</td> 
      <td class="numeric"> 
       <?php if ($project['survey_status'] == $this->Comm->DbConst('PROJECT_SURVEY_STATUS_NEW')) { ?> 
       <?= $this->Form->input('survey_id', array('type' => 'text', 'class' => 'form-control', 'required' => true, 'label' => false, 'value' => __($project['survey_id']))) ?> <div style="color:red;"><?php 
       if (!empty($errors['survey_id'])) { 
        echo reset($errors['survey_id']); 
       } 
       ?></div></td> 
      <?php } else { ?> 
        <?= $this->Form->input('survey_id', array('type' => 'text', 'class' => 'form-control', 'required' => false, 'label' => false, 'disabled' => true, 'value' => __($project['survey_id']))) ?> </td> 
       <?php } ?> 
      <td width="30%" colspan="2" class="numeric cell-bg">運用者名</td> 
      </tr> 
      <tr> 
      <td class="numeric cell-bg">案件名</td> 
      <td class="numeric"><?= $this->Form->input('title', array('type' => 'text', 'class' => 'form-control', 'required' => true, 'label' => false, 'value' => __($project['title']))) ?> <div style="color:red;"><?php 
       if (!empty($errors['title'])) { 
        echo reset($errors['title']); 
       } 
       ?></div></td> 
      <td colspan="2" rowspan="3" class="numeric"> 
       <div class="selectRow">    
       <select class="operator form-control" style="max-width:100%; " name="operator[]" data-placeholder="運用者選択" multiple required > 
        <?php foreach ($operators as $operator) { ?> 
        <option value=<?php 
        echo $operator['id'] . ":" . $operator['username']; 
        ?> selected><?php echo h($operator['username']); ?></option> 
          <?php } ?> 
       </select> 
       <div style="color:red;"><?php 
        if (!empty($errors['operator'])) { 
        echo reset($errors['operator']); 
        } 
        ?></div> 
       </div> 
      </td> 
      </tr> 
      <tr> 
      <td colspan="2" class="numeric cell-bg"><strong>顧客情報</strong></td> 
      </tr> 
      <tr> 
      <td class="numeric cell-bg">会社名</td> 
      <td class="numeric"><?= $this->Form->input('company_name', array('type' => 'text', 'class' => 'form-control', 'required' => true, 'label' => false, 'value' => __($project['company_name']))) ?> <div style="color:red;"> <?php 
       if (!empty($errors['company_name'])) { 
        echo reset($errors['company_name']); 
       } 
       ?></div></td> 
      </tr> 
      <tr> 
      <td class="numeric cell-bg">部署名</td> 
      <td class="numeric"><?= $this->Form->input('department_name', array('type' => 'text', 'class' => 'form-control', 'required' => true, 'label' => false, 'value' => __($project['department_name']))) ?> <div style="color:red;"><?php 
       if (!empty($errors['department_name'])) { 
        echo reset($errors['department_name']); 
       } 
       ?></div></td> 
      <td colspan="2" class="numeric cell-bg">参照者 </td> 
      </tr>  
      <tr> 
      <td class="numeric cell-bg">管理者氏名</td> 
      <td class="numeric"><?= $this->Form->input('name', array('type' => 'text', 'class' => 'form-control', 'required' => true, 'label' => false, 'value' => __($project['name']))) ?><div style="color:red;"> <?php 
       if (!empty($errors['name'])) { 
        echo reset($errors['name']); 
       } 
       ?></div></td> 
      <td colspan="2" rowspan="3" class="numeric"> 
       <div class="selectRow">    
       <select class="viewer form-control" style="max-width:100%;" name="viewer[]" data-placeholder="参照者選択" multiple required > 
        <?php foreach ($viewers as $viewer) { ?> 
        <option value=<?php echo $viewer['id'] . ":" . $viewer['username']; ?> selected><?php echo h($viewer['username']); ?></option> 
        <?php } ?> 
       </select>    
       <div style="color:red;"><?php 
        if (!empty($errors['viewer'])) { 
        echo reset($errors['viewer']); 
        } 
        ?></div> 
       </div> 
      </td> 
      </tr> 
      <tr> 
      <td class="numeric cell-bg">管理者アカウント</td> 
      <td class="numeric"><?= $this->Form->input('air_id', array('type' => 'text', 'class' => 'form-control', 'required' => true, 'label' => false, 'value' => __($project['air_id']))) ?> <div style="color:red;"><?php 
       if (!empty($errors['air_id'])) { 
        echo reset($errors['air_id']); 
       } 
       ?></div></td> 
      </tr> 
      <tr> 
      <td class="numeric cell-bg">管理者メールアドレス</td> 
      <td class="numeric"><?= $this->Form->input('email', array('type' => 'email', 'class' => 'form-control', 'required' => true, 'label' => false, 'value' => __($project['email']))) ?><div style="color:red;"> <?php 
       if (!empty($errors['email'])) { 
        echo reset($errors['email']); 
       } 
       ?></div></td> 
      </tr> 

     </tbody> 
     </table> 
    </div> 
    </div> 
</div> 

form-> end()?>

Wie mehrere Unterwerfung zu verhindern. Entweder mit der Funktion von cake php oder mit anderen Methoden. Ich habe versucht, csrf Komponente zu laden, aber das hat nicht für mich funktioniert.

+0

Bitte senden Sie das vollständige Formular oder die vollständige Ansichtsdatei. – Aarrbee

Antwort

0

Was ich tun, um die Einreichung mehrerer Formulare zu verhindern, ist, nachdem die Einreichung und Aktion getan hat es funktioniert, ich umleiten auf eine andere URL oder das gleiche.

<?php 

public function add(){ 
    //Grab data and validate it 
    if($this->save($data)){ 
     $this->Flash->set(...); 
     return $this->redirect(array('action', 'index')); // redirect to prevent resubmission 
    } 
    //Do other processing ... 

} 
+0

Ich hatte es bereits auf andere Seite umgeleitet dann auch die Wiedervorlage passiert –

+1

Kannst du bitte den Action Code posten? –

0

In meiner Erfahrung ist doppelte Form Einreichungen in der Regel immer doppelklickt ... etc. Wenn Sie einfach Ihre Submit <button> eine JavaScript-Funktion aufrufen, die die Schaltfläche deaktiviert und dann das Formular abschickt, sollte dies verhindert werden.

Sie könnten darüber nachdenken, dem Formular in einem versteckten Feld eine eindeutige ID hinzuzufügen, um doppelte Übermittlungen zu erkennen, die es immer noch schaffen, aber diese erste Option sollte den Zweck erfüllen.