2016-04-22 9 views
1

Ich habe ein wirklich seltsames Problem, das ich nicht herausfinden oder verstehen kann. Also im Wesentlichen habe ich eine ID, um den Codeigniter URI zu übergeben, habe ein verstecktes Formular ausgefüllt und dann abgeschickt. Wenn ich das Formular jedoch als verborgen übergebe, kommt es zurück und sagt, dass die Daten NULL sind. Ich habe versucht und änderte es zu form_input und es funktioniert gut. Kann mir jemand helfen oder mir erklären, warum das so ist?Codeigniter Verborgene Form wird NULL

Ich habe die folgenden Lösungen ausprobiert.

URL

http://localhost/list/players/add/1/ 

wo ich URI 3 ('1') wollen Form weitergeben und vorgelegt.

Lösung 1 - Mit der URI

-Controller direkt auf Datenfeld übergeben

function add() { 

      if($this->form_validation->run() == FALSE) { 

          $data['view_file'] = 'add'; 
          $this->load->module('template'); 
          $this->template->cmslayout($data); 

         } else { 
         $league_id = $this->uri->segment(3); 

         $data = array(
          'leagues_id' => $league_id, 
            ); 

         if($this->_insert($data)){ 
          return $query; 
       } 
       redirect ('/players/'); 
      } 
     } 

Lösung 2 - eine versteckte Form

Controller den URI Grabbing und füllen

function add() { 

     $league_id = $this->uri->segment(3); 

     $this->load->module('leagues'); 
     $data['leagues_list'] = $this->leagues->get_where($league_id); 

      if($this->form_validation->run() == FALSE) { 

          $data['view_file'] = 'add'; 
          $this->load->module('template'); 
          $this->template->cmslayout($data); 

         } else { 

         $data = array(
          'leagues_id' => $this->input->post('leagues_id'), 
            ); 

         if($this->_insert($data)){ 
          return $query; 
       } 
       redirect ('/players/'); 
      } 
     } 

Ansicht

<?php 
echo form_open('players/add/'); 
?> 

<?php 
echo "<br>"; 
echo "<br>"; 

echo "League Name"; 
echo "<br>"; 
foreach ($leagues_list->result() as $row) { 
    $league_id = $row->id; 
    $league_name = $row->league_name; 

    echo $league_name; 

    $data = array( 'name'   =>  'leagues_id', 
        'value'   =>  $league_id, 
    ); 
    echo form_hidden($data); 
} 

echo "<br>"; 
echo "<br>"; 

$data = array( 'value'   =>  'Set Player', 
    'name'   =>  'submit', 
    'class'   =>  'submit-btn', 
); 
echo form_submit($data); 

echo form_close(); 
?> 

In beiden Szenarien auf vorlegen kommt zurück mit einer Fehlermeldung, leagues_id NULL ist. Jetzt habe ich in Lösung 2 versucht, von 'form_hidden' zu 'form_input' zu wechseln und sofort auf submit zu klicken und es funktioniert gut.

Kann mir jemand helfen oder raten, warum das so ist?

Vielen Dank.

Antwort

0

Wenn Sie einen Parameter zur Funktion Ihres Controllers hinzufügen möchten, müssen Sie ihn hinzufügen zu: function func($parameter = 0)(= 0 ist optional für den Standardwert). In diesem Fall können Sie den Parameter über $parameter aufrufen.

In Ihrer Ansichtsdatei können Sie Ihr Formular öffnen, um es an die aktuelle URL zu senden. Dazu müssen Sie den URL-Helper in Ihren Controller laden: $this->load->helper('url'); (oder Sie können es in der Anwendung/autoload.php automatisch laden).

Ihre form_hidden Deklaration war auch schlecht.Wenn Sie es mit Array deklarieren möchten(), dann müssen Sie diese Syntax verwenden:

$data = array(
       'name' => 'John Doe', 
       'email' => '[email protected]' 
      ); 

echo form_hidden($data); 

// Would produce: 

<input type="hidden" name="name" value="John Doe" /> 
<input type="hidden" name="email" value="[email protected]" /> 

Weitere Informationen auf Formular-Helfer: https://ellislab.com/codeigniter/user-guide/helpers/form_helper.html

Für die richtige Lösung, versuchen Sie dies:

-Controller

function add($league_id = 0) 
{ 
    if($league_id != 0) 
    { 
     $this->load->module('leagues'); 
     $data['leagues_list'] = $this->leagues->get_where($league_id); 

     if($this->form_validation->run() == FALSE) 
     { 
      $data['view_file'] = 'add'; 
      $this->load->module('template'); 
      $this->template->cmslayout($data); 
     } 
     else 
     { 
      $data = array(
       'leagues_id' => $this->input->post('leagues_id'), 
      ); 
      if($this->_insert($data)) 
      { 
       return $query; 
      } 

      redirect ('/players/'); 
     } 
    } 

Anzeigen

<?php 
echo form_open(current_url()); 
echo "<br /><br />"; 

echo "League Name <br />"; 
foreach ($leagues_list->result() as $row) 
{ 
    $league_id = $row->id; 
    $league_name = $row->league_name; 

    echo $league_name; 

    echo form_hidden('leagues_id', $league_id); 
} 

echo "<br /><br />"; 

$data = array(
    'value'   =>  'Set Player', 
    'name'   =>  'submit', 
    'class'   =>  'submit-btn' 
); 
echo form_submit($data); 

echo form_close(); 
?> 
+0

Danke skyyler. Ich habe deine Lösung ausprobiert aber jetzt wird es nicht mal die nächste Seite laden wenn ich absende (nur eine leere Seite). Ich habe das sowohl mit form_hidden als auch mit form_input versucht. Beachten Sie, dass in form_input das Formular mit der richtigen ID ausgefüllt wird, aber jetzt wird es nicht mehr an die Datenbank gesendet, während es zuvor getan hat. –

+0

Tut mir leid, ich habe vergessen zu bemerken, dass der "URL" -Helfer bereits automatisch geladen ist, und ich verstehe nicht, was Sie meinen, "Ihre form_hidden-Deklaration war auch schlecht."? Meine Syntax ist genau die gleiche wie das Beispiel, nur der Unterschied ist, dass es in einer Foreach-Funktion ist, damit ich die Variablen laden kann. Prost. –

+0

Ich nehme an, dass Ihre '$ league_id' in diesem Fall keinen Wert erhält (deshalb sehen Sie nach dem Post nichts). Ich möchte nicht alles in deinem Code ändern, also benutze bitte deine Lösung, aber probiere die 'form_hidden ('leagues_id', $ league_id);' anstatt deiner 'form_hidden ($ data)'. – skyyler

Verwandte Themen