2011-07-22 12 views
5

He intentado enviar un formulario simple Pero no puedo obtener los valores de formulario en el controlador usando $this->input->post y $_POST[] métodos. Mi punto de vista es parteno se ha podido obtener el formulario de envío de los valores en codeigniter

<html> 
<head> 
    <title> Feedback page</title>  
</head> 
<body> 

    <?php echo form_open('feedback/save'); ?>  
    <p> 
     <label>name: </label> 
     <?php echo form_input('name'); ?> 

    </p> 
    <p> 
    <label>Email: </label> 
     <?php echo form_input('email'); ?> 
    </p> 
    <p> 
    <label>Feedback: </label> 
     <?php echo form_textarea('feedback'); ?> 
    </p> 
    <p> 
     <?php echo form_submit('submit','Submit'); ?> 
    </p> 

    <?php echo form_close(); ?> 

</body> 

</html> 

y parte del controlador es

<?php 
class Feedback extends CI_Controller { 

function __construct() { 
    parent::__construct();  
    $this->load->model("MFeedback"); 

} 
function index() { 

    $this->load->view('home/feedback_view.php'); 
    //print "loaded"; 


} 

function save() { 
    print "called";  
    print_r($this->input); 
    $name = $this->input->post('uname'); 
    $email = $this->input->post('email'); 
    $feedback = $this->input->post('feedback'); 
    print $name . $email . $feedback; 
    $this->index(); 
} 

} 
?> 

No estoy seguro de lo que salió mal aquí o está allí cualquier configuración de configuración que necesita mirar a ella.?

Respuesta

6

He encontrado el problema. Es en realidad con la regla de reescritura. Asegúrese de tener una regla de reescritura como

RewriteEngine On 
RewriteRule ^(application) - [F,L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* index.php/$0 [PT,L] 

en la carpeta raíz de codeigniter.

+0

en '/ application' ?? o en '/' ?? – Prakash

0

En primer lugar, en su vista ha especificado que el nombre de su entrada sea name, en el controlador que está buscando en la publicación uname.

En segundo lugar, no me acuerdo si CodeIgniter hace lo mismo con $_POST pero definitivamente destruye la matriz $_GET. Si quieres una matriz asociativa de todas las entradas de correos puede llamar a esto:

$this->input->post(); 

En tercer lugar, en un caso muy poca frecuencia sus entradas puede estar recibiendo bloqueadas por XSS Filtering, se puede evitar que esto suceda llamándolo como esto (sólo con fines de inspección para ver lo que está mal, no utilizan esta en producción):

$this->input->post(NULL, FALSE); 

Si algo es generalmente mal, estas llamadas volverá FALSE, usted debe probar esto usando el operador ===, ya que solo coincidirá con FALSE donde == coincidirá con NULL también.

En cuarto lugar, debe probar de forma rápida mediante un formulario HTML simple, parece que usted está construyendo su forma correcta con el asistente de formulario pero nunca está de más utilizar un formulario HTML sencillo para la prueba rápida.

Aparte de eso, tendrá que proporcionar más información sobre su entorno/configuración/html/etc ... para que lo descubramos. Realmente no nos dio mucho para trabajar.

+0

Uh, tonto, yo no vi el problema de uname/nombre :) – conor

+0

ninguno de los trucos funcionó en realidad. Puedo ver que el $ _POST está vacío, así que no importa con uname o nombre, no importa y lo arreglé. –

+0

CI_Input Object ([ip_address] => [user_agent] => Mozilla/5.0 (X11; Linux i686; rv: 5.0) Gecko/20100101 Firefox/5.0 [_allow_get_array] => 1 [_standardize_newlines] => 1 [_enable_xss] => 1 [_enable_csrf] => [headers: protected] => Array() [security] => CI_Security Object ([_xss_hash: protected] => ea1f1a23ff5349cfe8470d3ff9cc382e [_csrf_hash: protected] => 7108f2252e604139ed5b64c99959adb8 [_csrf_expire: protected] => 7200 [_csrf_token_name : protected] => ci_csrf_token [_csrf_cookie_name: protected] => ci_csrf_token [_never_allowed_str: protected] –

4

Tome un vistazo a esto: http://codeigniter.com/user_guide/libraries/form_validation.html#validationrules

tuve un problema similar cuando empecé usando CI. Debe establecer al menos una regla de validación para el formulario y luego verificar para ver si el formulario enviado cumplió con esa regla. A continuación, puede acceder a los datos del formulario presentado como usted está haciendo más arriba ..

Ha sido un tiempo desde que he usado CI, pero algo como esto debería resolver su problema: (Tomado del enlace anterior)

$this->load->library('form_validation'); 

    $this->form_validation->set_rules('uname', 'Username', 'required'); 
    $this->form_validation->set_rules('email', 'Password', 'required'); 
    $this->form_validation->set_rules('feedback', 'Feedback', 'required'); 
    $this->form_validation->set_rules('email', 'Email', 'required'); 

    if ($this->form_validation->run() == FALSE) 
    { 
        // Here is where you do stuff when the submitted form is invalid. 
     $this->load->view('myform'); 
    } 
    else 
    { 
        // Here is where you do stuff when the submitted form is valid. 
      print "called";  
      print_r($this->input); 
      $name = $this->input->post('uname'); 
      $email = $this->input->post('email'); 
      $feedback = $this->input->post('feedback'); 
      print $name . $email . $feedback; 
      $this->index(); 

    } 

Espero que te ayude de alguna manera ... :)

+0

Opinión personal: la validación del formulario de CI es más problemática de lo que vale. Yo personalmente uso mi propio framework, el modo CI termina violando ** DRY ** mucho, incluso con una buena planificación. Sin embargo, puede resolver su problema. : p – Aren

+0

Eh ¿qué es DRY? ;) – conor

+1

No repita – Aren

1

Tenía el mismo problema que usted, ya que la última media hora no pudo hacer que nada funcionara. Intenté tu solución, no ayudó. Pero tenías razón, tiene que ver con el enrutamiento.

También estaba pasando otras variables a mi acción como:

domain/controller/action/value1/value2 

cuando tuve mi forma de presentar los datos a:

domain/index.php/controller/action/value1/value2 

se resolvió el problema. Supongo que si pasa los valores al final, las variables de publicación no funcionan como se esperaba. Sé que se supone que debe funcionar y creo que también. Creo que es un problema para establecer .htaccess correctamente.

1

Gracias por las ideas que he resuelto mis problemas. Tengo el mismo problema. Mi código funcionaba bien en WAMP, pero cuando me mudé a LAMP, tuve todo tipo de problemas con el cableado que nunca había visto antes, y el hecho de que no obtuviera ningún valor de publicación de formulario fue uno de ellos.

De acuerdo con la sugerencia anterior:

que utilizan form_open(index.php/controller/method) en lugar de form_open(controller/method) y funcionó de inmediato.

Sin embargo, obtuve mi index.php eliminado, y no se muestra en la barra de direcciones tampoco. Como ya he dicho que es por cable ...

1

Uso form action='domain/index.php?/controller/function name/parameter1/parameter2'

Por ejemplo, su dominio es abc.com, controlador es get, nombre de la función value, y el parámetro a ser aprobada en funciones se a y b luego simplemente escribir la forma acción de la siguiente manera.

<form action='http:/abc.com/index.php?/get/value/a/b' method='post' > 

He resuelto mi problema de esta manera. Espero que funcione para ti. Gracias

3

su dirección URL debe ser el mismo que config->config.php->$config['base_url'] si su dirección URL como

http://www.test.com

entonces su configh debe ser

$config['base_url'] = 'http://www.test.com/'; 
0

Bueno, yo he enfrentado a la mismo problema y las siguientes adiciones a .htaccess ayudaron a resolver mi problema blem.

<Limit GET POST> 
order deny,allow 
deny from all 
allow from all 
</Limit> 
<Limit PUT DELETE> 
order deny,allow 
deny from all 
</Limit> 
0
$data = array('id' => 'email', 
'name' => 'email', 
'class' => 'form-control'); 

echo form_input($data); 

Sólo mencionar rápidamente que si se utiliza una matriz para configurar sus entradas, etc .. No se olvide de incluir el nombre => 'your_desired_post_variable_name' en su conjunto, ya que era mi error, yo estaba dándole solo una identificación y preguntándome por qué mi matriz POST estaba en blanco. ¡No hagas lo mismo! ;)

Cuestiones relacionadas