Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

[Solucionado] Formulario no recoge campos enviados mediante Ajax

1 de diciembre de 2015

Tengo un formulario con el siguiente script:

<script>
$(function(){
 $("#enviar").click(function(){
 var url = "mira.php"; // El script a dónde se realizará la petición.
    $.ajax({
           type: "POST",
           url: url,
           data: $("#formcontract").serialize(), // Adjuntar los campos del formulario enviado.
           success: function(data)
           {
               $("#respuesta").html(data); // Mostrar la respuestas del script PHP.
           }
         });
 
    return false; // Evitar ejecutar el submit del formulario.
 });
});
</script>

Que hace efecto a este formulario:

<?php
 
echo '<div class="modal-header">'; 
    echo    '<button type="button" class="close" data-dismiss="modal">&times;</button>';
    echo    '<h4 class="modal-title">Seleccione Contrato</h4>';
    echo  '</div>';
 
{   
    echo '<div class="modal-body">';   
    echo    '<form  name="formcontract" method="post"  class="form-horizontal">';
    echo    '<div class="form-group">';
    echo        '<label class="col-sm-3 control-label" for="formGroup" id="contract">Contratos</label>';
 
    echo        '<div class="input-group col-sm-7">';
    echo        '<span class="input-group-addon"><span class="glyphicon glyphicon-list-alt"></span></span>';    
    echo        '<select  name="contrato" class="selectboxit" onchange="mostrarValor(this);">';
    echo '<option selected="disabled">Selecciona un Contrato</option>';
    foreach($incidencias as $cust) 
    { 
            echo '<option value="'.$cust->Num_distribucion.'-'.$cust->Num_dist_venta.'-'.$cust->Num_linea_operacion.'-'.$cust->Num_operacion.'">'.$cust->Num_contrato.' '.$cust->Cdad_disponible.'Kg de '.$cust->NombreProducto.'</option>';
 
    }
 
            echo '</select>';
    echo '</div>';
    echo '</div>';
 
    echo '<div class="col-xs-4">';
    /* echo '<input type="text" class="form-control"  size="5" name="cupo" id="cupo" disabled/>'; */
 
    echo '</div>';
    echo '</div>';
    echo '</div>';
    echo '<div class="col-sm-12">&nbsp;</div>';
    echo '<div class="col-sm-12">&nbsp;</div>';
    echo '<div class="col-sm-12">&nbsp;</div>';
 
    /* echo  "Toneladas de "; */
?>
<link rel="stylesheet" href="assets/css/font-icons/font-awesome/css/font-awesome.min.css">  
 
<?php
echo '<div class="modal-header">
        <h4 class="modal-title">Autorización de Matrículas</h4>
    </div>
<div class="col-sm-2">&nbsp;</div>
<div class="col-sm-3">&nbsp;</div>
 
 <div class="modal-body">
                    <div class="form-group">
                            <label class="col-sm-3 control-label" for="formGroup">Tractora</label>
                              <div class="input-group col-sm-5">
                                <span class="input-group-addon"><span class="fa fa-keyboard-o"></span></span>
                              <input class="form-control" type="text" name="matricula" id="formGroup" placeholder="AAA1234">
 
                            </div>
                        </div>  
<div class="col-sm-12">&nbsp;</div>
<div class="col-sm-12">&nbsp;</div>
                    <div class="form-group">
                            <label class="col-sm-3 control-label" for="formGroup">Remolque</label>
                              <div class="input-group col-sm-5">
                                <span class="input-group-addon"><span class="fa fa-keyboard-o"></span></span>
                              <input class="form-control" type="text" name="matricular" id="formGroup" placeholder="AAA1234">
 
                            </div>
                          </div>    
<div class="col-sm-12">&nbsp;</div>
<div class="col-sm-12">&nbsp;</div>                     
                    <div class="form-group">
                            <label class="col-sm-3 control-label" for="formGroup">N.I.F-N.I.E</label>
                              <div class="input-group col-sm-5">
                            <span class="input-group-addon"><span class="fa fa-credit-card"></span></span>
                              <input class="form-control" type="text" name="dni" id="formGroup" placeholder="DNI o PASAPORTE">
                                </div>
                        </div>
<div class="col-sm-12">&nbsp;</div>
<div class="col-sm-12">&nbsp;</div>                                 
                    <div class="form-group">
                            <label class="col-sm-3 control-label" for="formGroup">Conductor</label>
                              <div class="input-group col-sm-5">
                            <span class="input-group-addon"><span class="entypo-user"></span></span>
                              <input class="form-control" type="text" name="xofer" id="formGroup" placeholder="Nombre y Apellido">
                                </div>
                        </div>
<div class="col-sm-12">&nbsp;</div>
<div class="col-sm-12">&nbsp;</div>
    <div class="form-group">
                            <label class="col-sm-3 control-label" for="formGroup">P.M.A</label>
                              <div class="input-group col-sm-5">
                            <span class="input-group-addon"><span class="entypo-download"></span></span>
                              <select name="pma" id="formGroup" class="selectboxit">
                              <option>40.800</option>
                              <option>41.000</option>
                              <option>44.000</option>
                              </select>
                            </div>
 
    </div>
    <div class="col-sm-12">&nbsp;</div>
    <div class="col-sm-12">&nbsp;</div>
                        <div class="modal-footer">
                        <input class="btn btn-success" id="enviar" type="submit" value="Enviar" />
                        </div>
                </form>
                <div id="respuesta"></div>';

Pues me da error de que le falta los campos del formulario


Respuestas

#1

Yo probaría a hacer primero lo siguiente:

1) Al principio del archivo PHP que procesa el formulario, pon var_dump($_POST) para ver si te han enviado algo mediante POST. Si hay información, el problema está en PHP y no en JavaScript.

2) Si no llega la información a PHP, utiliza el "Inspector Web" del navegador para ver si en la petición se está enviando la información.

@javiereguiluz

1 diciembre 2015, 16:10
#2

De aquí no salgo y con el inspector web no consigo ver nada:

Notice: Undefined index: contrato in /var/www/html/lab/neon/mira.php on line 34
 
Notice: Undefined offset: 3 in /var/www/html/lab/neon/mira.php on line 34
 
Notice: Undefined offset: 2 in /var/www/html/lab/neon/mira.php on line 34
 
Notice: Undefined offset: 1 in /var/www/html/lab/neon/mira.php on line 34
Num distribucion: 
Num Dist de Venta: 
Num Linea de Operacion: 
Num de Operacion: 
 
Notice: Undefined index: matricula in /var/www/html/lab/neon/mira.php on line 48
 
Notice: Undefined index: matricular in /var/www/html/lab/neon/mira.php on line 50
 
Notice: Undefined index: dni in /var/www/html/lab/neon/mira.php on line 52
 
Notice: Undefined index: xofer in /var/www/html/lab/neon/mira.php on line 54
 
Notice: Undefined index: pma in /var/www/html/lab/neon/mira.php on line 56

Y el PHP q procesa essta así:

<?php
    if (!isset($_SESSION)) {
      session_start();
    }
    IF (!ISSET($_SESSION['user'])) HEADER("Location:extra-login.html");
    var_dump($_POST);
$user = $_SESSION['numcliente'];
 $lineaopera = $_SESSION['Num_linea_operacion'];
 $cupos = $_SESSION['Cdad_disponible'] ;
 $ncontrato = $_SESSION['Num_contrato'] ;
 $noclienvendedor = $_SESSION['NombreClienteVendedor'] ;
 $nuclienvendedor = $_SESSION['Num_cliente_vendedor'] ;
 $product = $_SESSION['NombreProducto'] ;
 $numproduct = $_SESSION['Num_producto'] ;
 $distribucion = $_SESSION['Num_distribucion'] ;
 $distventa = $_SESSION['Num_dist_venta'] ;
 $nopera = $_SESSION['Num_operacion'] ;
 
    echo "a partir de aqui debe escribir";
    list($a,$b,$c,$d) = explode("-",$_POST['contrato']);
    echo "Num distribucion: " ;
    echo $a;
    echo '<br>';
    echo "Num Dist de Venta: ";
    echo $b;
    echo '<br>';
    echo "Num Linea de Operacion: ";
    echo $c;
    echo '<br>';
    echo "Num de Operacion: ";
    echo $d;
    echo '<br>';
 
    echo  $_POST['matricula'];
    echo '<br>';
    echo $_POST['matricular'];
    echo '<br>';
    echo $_POST['dni'];
    echo '<br>';
    echo $_POST['xofer'];
    echo '<br>';
    echo $_POST['pma']; 
    echo '<br>';
?>

@javierecompring

1 diciembre 2015, 16:16
#3

Te he dicho que lo pongas "al principio del archivo PHP", pero en realidad, debes ponerlo justo al empezar a procesar los valores $_POST. Pon lo siguiente a ver si ves algo en la ventana del navegador:

var_dump($_POST); exit;

@javiereguiluz

1 diciembre 2015, 16:26
#4
<?php
    if (!isset($_SESSION)) {
      session_start();
    }
    IF (!ISSET($_SESSION['user'])) HEADER("Location:extra-login.html");
    var_dump($_POST);
$user = $_SESSION['numcliente'];
 $lineaopera = $_SESSION['Num_linea_operacion'];
 $cupos = $_SESSION['Cdad_disponible'] ;
 $ncontrato = $_SESSION['Num_contrato'] ;
 $noclienvendedor = $_SESSION['NombreClienteVendedor'] ;
 $nuclienvendedor = $_SESSION['Num_cliente_vendedor'] ;
 $product = $_SESSION['NombreProducto'] ;
 $numproduct = $_SESSION['Num_producto'] ;
 $distribucion = $_SESSION['Num_distribucion'] ;
 $distventa = $_SESSION['Num_dist_venta'] ;
 $nopera = $_SESSION['Num_operacion'] ;
echo "a partir de aqui debe escribir";
    var_dump($_POST); exit;
    list($a,$b,$c,$d) = explode("-",$_POST['contrato']);
    echo "Num distribucion: " ;
    echo $a;
    echo '<br>';
    echo "Num Dist de Venta: ";
    echo $b;
    echo '<br>';
    echo "Num Linea de Operacion: ";
    echo $c;
    echo '<br>';
    echo "Num de Operacion: ";
    echo $d;
    echo '<br>';
 
    echo  $_POST['matricula'];
    echo '<br>';
    echo $_POST['matricular'];
    echo '<br>';
    echo $_POST['dni'];
    echo '<br>';
    echo $_POST['xofer'];
    echo '<br>';
    echo $_POST['pma']; 
    echo '<br>';
 
    ?>

La salida:

a partir de aqui debe escribir
 
Notice: Undefined index: contrato in /var/www/html/lab/neon/mira.php on line 34
Notice: Undefined offset: 3 in /var/www/html/lab/neon/mira.php on line 34
Notice: Undefined offset: 2 in /var/www/html/lab/neon/mira.php on line 34
Notice: Undefined offset: 1 in /var/www/html/lab/neon/mira.php on line 34
 
Num distribucion: 
Num Dist de Venta: 
Num Linea de Operacion: 
Num de Operacion: 
 
Notice: Undefined index: matricula in /var/www/html/lab/neon/mira.php on line 48
Notice: Undefined index: matricular in /var/www/html/lab/neon/mira.php on line 50
Notice: Undefined index: dni in /var/www/html/lab/neon/mira.php on line 52
Notice: Undefined index: xofer in /var/www/html/lab/neon/mira.php on line 54
Notice: Undefined index: pma in /var/www/html/lab/neon/mira.php on line 56

pero siguen dando los mismos errores.

@javierecompring

1 diciembre 2015, 16:33
#5

Parece que la variable $_POST está totalmente vacía, por lo que no se está enviando nada mediante POST desde el navegador.

Estaba mirando tu código original y al parecer, tu formulario es así:

<form  name="formcontract" ...

Y tu JavaScript hace esto:

data: $("#formcontract").serialize(),

Deberías cambiar tu formulario por esto otro (cambia name por id):

<form id="formcontract" ...

@javiereguiluz

1 diciembre 2015, 16:43
#6

seguimos igual:

echo '<div class="modal-header">'; 
    echo    '<button type="button" class="close" data-dismiss="modal">&times;</button>';
    echo    '<h4 class="modal-title">Seleccione Contrato</h4>';
    echo  '</div>';
 
{   
    echo '<div class="modal-body">';   
    echo    '<form  id="formcontract" method="post"  class="form-horizontal">';
    echo    '<div class="form-group">';
    echo        '<label class="col-sm-3 control-label" for="formGroup" id="contract">Contratos</label>';
 
    echo        '<div class="input-group col-sm-7">';
    echo        '<span class="input-group-addon"><span class="glyphicon glyphicon-list-alt"></span></span>';    
    echo        '<select  name="contrato" class="selectboxit" onchange="mostrarValor(this);">';
    echo '<option selected="disabled">Selecciona un Contrato</option>';
    foreach($incidencias as $cust) 
    { 
            echo '<option value="'.$cust->Num_distribucion.'-'.$cust->Num_dist_venta.'-'.$cust->Num_linea_operacion.'-'.$cust->Num_operacion.'">'.$cust->Num_contrato.' '.$cust->Cdad_disponible.'Kg de '.$cust->NombreProducto.'</option>';
 
    }
 
            echo '</select>';
    echo '</div>';
    echo '</div>';
 
    echo '<div class="col-xs-4">';
    /* echo '<input type="text" class="form-control"  size="5" name="cupo" id="cupo" disabled/>'; */
 
    echo '</div>';
    echo '</div>';
    echo '</div>';
    echo '<div class="col-sm-12">&nbsp;</div>';
    echo '<div class="col-sm-12">&nbsp;</div>';
    echo '<div class="col-sm-12">&nbsp;</div>';
 
    /* echo  "Toneladas de "; */
?>
<link rel="stylesheet" href="assets/css/font-icons/font-awesome/css/font-awesome.min.css">  
 
<?php
 
echo '<div class="modal-header">
 
        <h4 class="modal-title">Autorización de Matrículas</h4>
    </div>
<div class="col-sm-2">&nbsp;</div>
<div class="col-sm-3">&nbsp;</div>
 
 <div class="modal-body">
 
                    <div class="form-group">
                            <label class="col-sm-3 control-label" for="formGroup">Tractora</label>
                              <div class="input-group col-sm-5">
                                <span class="input-group-addon"><span class="fa fa-keyboard-o"></span></span>
                              <input class="form-control" type="text" name="matricula" id="formGroup" placeholder="AAA1234">
 
                            </div>
                        </div>  
<div class="col-sm-12">&nbsp;</div>
<div class="col-sm-12">&nbsp;</div>
                    <div class="form-group">
                            <label class="col-sm-3 control-label" for="formGroup">Remolque</label>
                              <div class="input-group col-sm-5">
                                <span class="input-group-addon"><span class="fa fa-keyboard-o"></span></span>
                              <input class="form-control" type="text" name="matricular" id="formGroup" placeholder="AAA1234">
 
                            </div>
                          </div>    
<div class="col-sm-12">&nbsp;</div>
<div class="col-sm-12">&nbsp;</div>                     
                    <div class="form-group">
                            <label class="col-sm-3 control-label" for="formGroup">N.I.F-N.I.E</label>
                              <div class="input-group col-sm-5">
                            <span class="input-group-addon"><span class="fa fa-credit-card"></span></span>
                              <input class="form-control" type="text" name="dni" id="formGroup" placeholder="DNI o PASAPORTE">
                                </div>
                        </div>
<div class="col-sm-12">&nbsp;</div>
<div class="col-sm-12">&nbsp;</div>                                 
                    <div class="form-group">
                            <label class="col-sm-3 control-label" for="formGroup">Conductor</label>
                              <div class="input-group col-sm-5">
                            <span class="input-group-addon"><span class="entypo-user"></span></span>
                              <input class="form-control" type="text" name="xofer" id="formGroup" placeholder="Nombre y Apellido">
                                </div>
                        </div>
<div class="col-sm-12">&nbsp;</div>
<div class="col-sm-12">&nbsp;</div>
    <div class="form-group">
                            <label class="col-sm-3 control-label" for="formGroup">P.M.A</label>
                              <div class="input-group col-sm-5">
                            <span class="input-group-addon"><span class="entypo-download"></span></span>
                              <select name="pma" id="formGroup" class="selectboxit">
                              <option>40.800</option>
                              <option>41.000</option>
                              <option>44.000</option>
                              </select>
                            </div>
 
    </div>
    <div class="col-sm-12">&nbsp;</div>
    <div class="col-sm-12">&nbsp;</div>
                        <div class="modal-footer">
                        <input class="btn btn-success" id="enviar" type="submit" value="Enviar" />
                        </div>
                </form>
                <div id="respuesta"></div>';
 
}
 
    $nopera = $cust->Num_operacion;
    $distventa = $cust->Num_dist_venta;
    $distribucion = $cust->Num_distribucion;
    $numproduct = $cust->Num_producto;
    $product = $cust->NombreProducto;
    $nuclienvendedor = $cust->Num_cliente_vendedor;
    $noclienvendedor = $cust->NombreClienteVendedor;
    $ncontrato = $cust->Num_contrato;
    $cupos = $cust->Cdad_disponible;
    $lineaopera = $cust->Num_linea_operacion;
/*  echo $nopera;
    echo '<br>';
    echo $lineaopera;
    echo '<br>';
    echo $distventa;
    echo '<br>';
    echo $distribucion;
    echo "|||||";
    echo '<br>';
    echo $ncontrato;
    echo '<br>';
     */
 
$_SESSION['Num_linea_operacion'] = $lineaopera;
$_SESSION['Cdad_disponible'] = $cupos;
$_SESSION['Num_contrato'] = $ncontrato;
$_SESSION['NombreClienteVendedor'] = $noclienvendedor;
$_SESSION['Num_cliente_vendedor'] = $nuclienvendedor;
$_SESSION['NombreProducto'] = $product;
$_SESSION['Num_producto'] = $numproduct;
$_SESSION['Num_distribucion'] = $distribucion;
$_SESSION['Num_dist_venta'] = $distventa;
$_SESSION['Num_operacion'] = $nopera;
 
?>
<script>
$(function(){
 $("#enviar").click(function(){
 var url = "mira.php"; // El script a dónde se realizará la petición.
 
    $.ajax({
           type: "POST",
           url: url,
           data: $("#formcontract").serialize(), // Adjuntar los campos del formulario enviado.
           success: function(data)
           {
               $("#respuesta").html(data); // Mostrar la respuestas del script PHP.
           }
         });
 
    return false; // Evitar ejecutar el submit del formulario.
 });
});
</script>

respuesta: a partir de aqui debe escribir Notice: Undefined index: contrato in /var/www/html/lab/neon/mira.php on line 34

Notice: Undefined offset: 3 in /var/www/html/lab/neon/mira.php on line 34

Notice: Undefined offset: 2 in /var/www/html/lab/neon/mira.php on line 34

Notice: Undefined offset: 1 in /var/www/html/lab/neon/mira.php on line 34 Num distribucion: Num Dist de Venta: Num Linea de Operacion: Num de Operacion:

Notice: Undefined index: matricula in /var/www/html/lab/neon/mira.php on line 48

Notice: Undefined index: matricular in /var/www/html/lab/neon/mira.php on line 50

Notice: Undefined index: dni in /var/www/html/lab/neon/mira.php on line 52

Notice: Undefined index: xofer in /var/www/html/lab/neon/mira.php on line 54

Notice: Undefined index: pma in /var/www/html/lab/neon/mira.php on line 56

@javierecompring

1 diciembre 2015, 17:33
#7
<script>
$("#formcontract").submit(function(e) {
 
    var url = "autorizar.php"; // the script where you handle the form input.
 
    $.ajax({
           type: "POST",
           url: url,
           data: $("#formcontract").serialize(), // serializes the form's elements.
           success: function(data)
           {
               alert(data); // show response from the php script.
           }
         });
 
    e.preventDefault(); // avoid to execute the actual submit of the form.
});
</script>
COn esto ya me recoje los datos y me muestra la respuesta en un alert

@javierecompring

2 diciembre 2015, 10:13