2009-07-16 4 views
0

I wieWie der Mobile Number Feldwert in meinen CakePHP-Controller abzurufen

<div class="input text"> 
     <label for="2">First Name (required) </label> 
     <input type="text" value="" style="width: 300px;" id="2" class="required" name="First Name"/> 
    </div> 

    <div class="input text"> 
    <label for="5">Emailid</label> 
    <input type="text" value="" style="width: 300px;" id="5" name="Emailid"/>< 
/div> 
<div class="input text"> 
<label for="6">Mobile Number</label> 
<input type="text" value="" style="width: 30px;" id="6" name="Mobile Number"/> 
<input type="text" value="" style="width: 30px;" id="6-1" name="Mobile Number"/> 
<input type="text" value="" style="width: 70px;" id="6-2" name="Mobile Number"/> 
</div> 

all diese erzeugen in der Seite ein Eingabefeld in der Ansicht Seite erstellt hatte .Ich ist Abrufen des Inhaltswert Diese Seite bildet in meiner CakePHP Controller

foreach ($_POST as $key => $value): 
    echo $key;echo $value; 
endforeach; 

Für alle oben genannten Bereichen ich bin immer die richtige Antwort wie First_Name = A & [email protected] & MOBILE_NUMBER = 3

mit

Aber für meine Mobile Number Feld allein bekomme ich den Wert der letzten ID wie 6-2.Warum so.? HOw, um den vollen Wert der Handynummer zu erhalten, die in den drei Feldern (6,6-1,6-2) gegeben wird? Bitte schlagen Sie mich vor.

Edit:

 foreach ($_POST as $key => $value): 
    $mobile_number = implode('', $_POST['number']); 
    echo $mobile_number; 
    $this->data['Result']['form_id']=$formid; 
    $this->data['Result']['label']=Inflector::humanize($key); 
    $this->data['Result']['value']=$value; 
    $this->Form->submitForm($this->data); 
    endforeach; 

Ich spare den Schlüssel und seine Werte mit wie oben (dh .., Der Controller nicht weiß, was sind alle Felder in der Fill-Seite). Die fillpage darf/darf nicht das Feld Phone Number enthalten. Wie kann ich sicherstellen, dass die Seite das Feld Phonenumber enthält und den Wert mit dem Key speichert?

Hinweis: $ Schlüssel ist der Feldname und $ Wert ist mein Wert des Feldes. Nur für das Nummernfeld sind die Werte Array und in allen anderen Fällen nur ein einzelner Wert.

+1

Zunächst sollten Sie Cake-Methoden verwenden, um das Formular und die Variable Cake '$ this-> data' zu erstellen, um mit den Ergebnissen zu arbeiten. Bis jetzt gibt es noch nichts über diesen Code. – deceze

Antwort

2

Wenn Sie Cake verwenden, sollten Sie wirklich lernen und Cake verwenden.

Nur ein kurze heruntergekommen der Strömung im Kuchen:

Form page -> Submit 
    ^   | 
    |   v 
    |  Controller // Form data is in $this->data 
    |   | 
    |   v 
    |  $this->Model->save($this->data); -> Model 
    |            | 
    |            v 
    -------- Controller <----------------------- Data validation 
          validation no good | 
                | validation okay 
                v 
      Controller <----------------------- Actually save data 
       | 
       v 
      Go somewhere else 

Was bedeutet dies für Sie:

$this->data ist von zentraler Bedeutung für Formulare korrekt zu arbeiten. NICHT BERÜHREN $ _POST! Verwenden Sie Cake methods for creating Forms und verwenden Sie die gleichen Namen für Felder, die in der Datenbank verwendet werden. Das erleichtert einen Großteil der Kuchen "Automagic". Sie assemblieren ein Array nicht manuell, um es an die Datenbank zu übergeben. Sie verwenden die gleichen Namen für alles von Anfang bis Ende und übergeben das Array einfach. $this->data wird automatisch vom Controller an die Ansicht (d. H. Das Formular) zurückgegeben, wenn Sie den Kuchen FormHelper verwenden, werden die Felder automatisch wieder ausgefüllt.

Sie sollten die Arbeit minimieren, die Sie zwischen dem Senden des Formulars und dem Speichern der Daten durchführen müssen.Idealerweise Ihr Controller sieht nur wie folgt aus:

if (!empty($this->data)) { 
    if ($this->Model->save($this->data)) { 
     $this->redirect(array('action' => 'next_step')); 
    } 
} 

, dass alle Code ist was Sie brauchen, und es wird

  • Anzeige der Seite
  • Griffform Einreichungen
  • bestätigen die Eingabe
  • Füllen Sie die Formularfelder zurück, wenn die Validierung fehlgeschlagen ist
  • Speichern Sie die Daten, wenn die Validierung erfolgreich war
  • zum nächsten Schritt umleiten, wenn die Daten erfolgreich

Wenn Ihre Formularfelder nicht entsprechen 1 gespeichert wurden: 1 mit dem Datenbankfeld, zwicken nur die Bits, die Sie benötigen zwischen if(!empty($this->data)) und $this->Model->save($this->data):

if (!empty($this->data)) { 
    $this->data['Model']['mobile_number'] = implode('-', $this->data['Model']['mobile_number']); 
    if ($this->Model->save($this->data)) { 
     $this->redirect(array('action' => 'next_step')); 
    } 
} 

Wenn Sie die übermittelten Formulardaten zur Vollständigkeit validieren möchten, haben Sie nur fill in the appropriate rules in the Model. Wenn Sie eine $this->Model->save() ausgeben, überprüft das Modell automatisch die Regeln vor dem Speichern und return false, wenn sie nicht erfüllt sind.

+0

Eigentlich mache ich das gleiche in meinen anderen Funktionen. Aber in dieser Submit-Aktion wird der Controller nicht wissen, was der Feldname sein mag, wie Sie diese mobile_number sagten. Nur dafür verwende ich $ _POST wie \t foreach ($ _POST wie $ key => $ wert): if (is_array ($ wert)) { $ wert = implode ('', $ _POST [$ key]); $ this-> data ['Ergebnis'] ['value'] = $ value; } sonst { $ this-> data ['Result'] ['value'] = $ value; } $ this-> data ['Ergebnis'] ['form_id'] = $ formid; $ this-> data ['Ergebnis'] ['label'] = Inflector :: humanize ($ key); $ this-> Formular-> submitForm ($ this-> data); Endeforeach; – Mercy

+1

** VERWENDEN SIE NICHT $ _POST! ** Ja, Sie können, da es in CakePHP immer noch PHP gibt, aber dann verwenden Sie wirklich nicht Cake. Entweder tun Sie es Kuchen oder gar keinen Kuchen. Wenn Sie das eine oder das andere tun würden, hätten Sie dieses Problem wahrscheinlich nicht. Was macht '$ this-> Form-> submitForm ($ this-> data)? – deceze

+0

$ this-> Form-> submitForm ($ this-> data) sendet alle meine Controller-Einstellungen an das Model, das die Einträge in der Datenbank speichert. – Mercy