Foros del Web » Programando para Internet » PHP »

Problema con Insert

Estas en el tema de Problema con Insert en el foro de PHP en Foros del Web. Buenos días ! Tengo un problema con un código que estoy intentando desarrollar por aprender php. Verán intento crear un formulario en modo tabla para ...
  #1 (permalink)  
Antiguo 19/05/2016, 02:59
 
Fecha de Ingreso: febrero-2015
Mensajes: 9
Antigüedad: 9 años, 2 meses
Puntos: 0
Problema con Insert

Buenos días !

Tengo un problema con un código que estoy intentando desarrollar por aprender php. Verán intento crear un formulario en modo tabla para rellenar con datos sobre proyectos, tareas (una especie de hoja de horas laborales) que obtiene automáticamente el nombre del usuario registrado y saca sus proyectos y tareas disponibles, para que solo tengan que elegir la tarea y el proyecto y añadir las horas empleadas.

El problema viene pues porque tengo un select para añadir las id's de proyecto y tareas pero a la hora de hacer el insert, no coge el valor que se seleccione. El código es:

Código PHP:
<?php
 
session_start
();
include(
'includes/conexion.php');
 
if(isset(
$_SESSION['email'])){
 
  
$_POST["enviar"] = "";
  if(isset(
$_POST["enviar"])){
 
    
$resultado $conexion->prepare "SELECT nombre, apellidos FROM usuarios WHERE email=:email" );
    
$resultado->bindparam ':email'$_SESSION ['email'], PDO::PARAM_STR);
    
$resultado->execute();
 
    if(
$row $resultado ->fetch()){
      
$nombre $row[0];
      
$apellidos $row[1];
    
$nombrecompleto $nombre ' ' $apellidos;
    echo
'
    <form action = "" method = "post">
      <table border="1">
            <tr>
            <td >Usuario</td>
            <td> Fecha </td>
            <td>ID Proyecto y Tarea</td>
            <td>Horas</td>
            <td>Comentarios</td>
            </tr>
            <td>
            <strong><div>'
.$nombre.' '.$apellidos.' </div></strong>
            </td>
                  <td>
                     <input type=date name="fecha">
                  </td>'
;
    
$res $conexion->prepare("SELECT PID, ID, 'SUB-ID' from owner WHERE NOMBRE LIKE '%$nombrecompleto%' ORDER BY PID ASC");
    
$res->execute();
 
    
$aDatos = array();
    while(
$n $res->fetch()){
      
$aDatos[] = $n;
    }
      echo
'<td><select name = "ids" id = "ides">';
      foreach(
$aDatos as $row){
        
$pid $row[0];
        
$id $row[1];
        
$subid $row[2];
        if(
$subid 0){
          
$subid=0;
        }
        echo 
'<option value="'.$pid."_".$id."_".$subid.'">';
        echo 
"PID: ".$pid." - ID: ".$id." - Sub-Id: ".$subid."<br>";
        echo 
'</option>';
      }
      echo 
'</select></td>';
 
    if(isset(
$_POST['fecha'])){
      
$fecha $_POST['fecha'];
    }
    if(isset(
$_POST['horas'])){
      
$horas $_POST['horas'];
    }
    if(isset(
$_POST['comentarios'])){
      
$comentarios $_POST['comentarios'];
    }
    echo 
'<td><input type = "text" name = "horas"/> </td>
          <td><input type = "text" name = "comentarios"/> </td>
          </table>
          <input type="submit" name="enviar" value="Guardar valores">
          </form>'
;
    
$value $_REQUEST['ides'];
    
$explode explode("_",$value,3);
    
$pid $explode[0];
    
$id $explode[1];
    
$subid $explode[3];
    
$r =$conexion-> prepare("INSERT INTO timesheet (nombre, fecha, pid, id, sub_id, Horas, Comentarios) VALUES (:nombre, :fecha, :pid, :id, :subid, :horas, :comentarios)");
    
$r ->bindParam(':nombre'$nombrecompleto);
    
$r ->bindParam(':fecha'$fecha);
    
$r ->bindParam(':pid'$pid);
    
$r ->bindParam(':id'$id);
    
$r ->bindParam(':subid'$subid);
    
$r ->bindParam(':horas'$horas);
    
$r ->bindParam(':comentarios'$comentarios);
    
$r ->execute();
    }
  }
}
?>
Como se puede ver, he intentado usar el explode para separar los campos de $pid, $id y $subid pero me da error. El problema lo tengo en este select:
Código PHP:
  echo'<td><select name = "datos">';
      foreach(
$aDatos as $row){
        
$pid $row[0];
        
$id $row[1];
        
$subid $row[2];
        if(
$subid 0){
          
$subid=0;
        }
        echo 
'<option value="'.$pid."_".$id."_".$subid.'">';
        echo 
"PID: ".$pid." - ID: ".$id." - Sub-Id: ".$subid;
        echo 
'</option>';
      }
      echo 
'</select></td>'
Espero su ayuda y mil gracias de antemano.

Última edición por Lisud; 19/05/2016 a las 04:01
  #2 (permalink)  
Antiguo 19/05/2016, 14:34
 
Fecha de Ingreso: diciembre-2015
Ubicación: México
Mensajes: 280
Antigüedad: 8 años, 4 meses
Puntos: 20
Respuesta: Problema con Insert

Hola amigo
El detalle q observo es q en el primer código tu select se llama "ids" y lo estas intentando recuperar con el valor del atributo id ("ides")
Ahora, en el segundo código q pones, tu select se llama "datos", tendrías que recuperarlo con ese nombre..
Es lo q observé...
Saludos!
  #3 (permalink)  
Antiguo 20/05/2016, 01:50
 
Fecha de Ingreso: febrero-2015
Mensajes: 9
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Problema con Insert

Buenas German,

perdona, eso fue un fallo mío, realmente se llamaba "ids" y lo recuperaba como "ids" pero probando le cambie el nombre y no volví a ponerlo bien :P

El problema es que al intentar recuperarlo como "ids" (con ambos como "ids") me daba error:

Undefined index: ides in C:\xampp\htdocs\prueba\timesheet4.php on line 71

Gracias por su ayuda ^^
  #4 (permalink)  
Antiguo 20/05/2016, 08:25
 
Fecha de Ingreso: diciembre-2015
Ubicación: México
Mensajes: 280
Antigüedad: 8 años, 4 meses
Puntos: 20
Respuesta: Problema con Insert

Hola amigo,
pues el error te sigue diciendo q no encuentra el recurso "ides" ..
por lo tanto no creo q hayas corregido lo q te comente :p
Checalo y prueba
Saludos
  #5 (permalink)  
Antiguo 23/05/2016, 00:38
 
Fecha de Ingreso: febrero-2015
Mensajes: 9
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Problema con Insert

Buenas !

Si, está corregido, por un lado tengo:

Código PHP:
  echo'<td><select name = "ids" id = "ides>';
      foreach(
$aDatos as $row){
        
$pid $row[0];
        
$id $row[1];
        
$subid $row[2];
        if(
$subid 0){
          
$subid=0;
        }
        echo 
'<option value="'.$pid."_".$id."_".$subid.'">';
        echo 
"PID: ".$pid." - ID: ".$id." - Sub-Id: ".$subid;
        echo 
'</option>';
      }
      echo 
'</select></td>'
Y por otro está el explode así:

Código PHP:
$value $_REQUEST['ides'];
    
$explode explode("_",$value,3);
    
$pid $explode[0];
    
$id $explode[1];
    
$subid $explode[3];
    
$r =$conexion-> prepare("INSERT INTO timesheet (nombre, fecha, pid, id, sub_id, Horas, Comentarios) VALUES (:nombre, :fecha, :pid, :id, :subid, :horas, :comentarios)");
    
$r ->bindParam(':nombre'$nombrecompleto);
    
$r ->bindParam(':fecha'$fecha);
    
$r ->bindParam(':pid'$pid);
    
$r ->bindParam(':id'$id);
    
$r ->bindParam(':subid'$subid);
    
$r ->bindParam(':horas'$horas);
    
$r ->bindParam(':comentarios'$comentarios);
    
$r ->execute(); 
Me sigue saliendo el error en la línea:
Código PHP:
$value $_REQUEST['ides']; 
y he probado tanto con "ides" como con "ids" (ya que en el select le puse name = ids e id = ides) y me sigue dando el mismo error.

El error es:
Notice: Undefined index: ides in C:\xampp\htdocs\prueba\timesheet4.php on line 71

Notice: Undefined offset: 1 in C:\xampp\htdocs\prueba\timesheet4.php on line 74

Notice: Undefined offset: 3 in C:\xampp\htdocs\prueba\timesheet4.php on line 75

Última edición por Lisud; 23/05/2016 a las 01:37
  #6 (permalink)  
Antiguo 23/05/2016, 02:55
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Problema con Insert

El name que tienes es ids no ides
Código PHP:
Ver original
  1. echo'<td><select name = "ids" id = "ides>';

Sigues cometiendo el mismo error que ya te comentaron.
__________________
Unset($vida['malRollo']);

Última edición por xerifandtomas; 23/05/2016 a las 03:00
  #7 (permalink)  
Antiguo 23/05/2016, 03:16
 
Fecha de Ingreso: febrero-2015
Mensajes: 9
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Problema con Insert

Vuelvo a repetir, he probado con ids e ides y me sale el mismo error en ambos casos...

Por favor leed bien mis posts...

Notice: Undefined index: ids in C:\xampp\htdocs\prueba\timesheet4.php on line 71

Notice: Undefined offset: 1 in C:\xampp\htdocs\prueba\timesheet4.php on line 74

Notice: Undefined offset: 3 in C:\xampp\htdocs\prueba\timesheet4.php on line 75
  #8 (permalink)  
Antiguo 23/05/2016, 03:22
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Problema con Insert

Hola Lisud,

Es que lo leas como lo leas, tienen razón, el error que muestras corresponde a lo que te están diciendo... debes recibirlo como "ids" que es el "name" y posiblemente sea otro error parecido el que te muestre, pero no creo que sea el mismo...
  #9 (permalink)  
Antiguo 23/05/2016, 03:23
 
Fecha de Ingreso: febrero-2015
Mensajes: 9
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Problema con Insert

Hola !

Es exactamente el mismo, si lo prefieres pongo una captura, pero ponga ides o ids es el mismo error, es como si no estuvieran en el mismo if, el caso es que he comprobado todas las llaves y está bien estructurado :S

De todas formas, me da igual el explode, el tema es que a la hora de elegir el usuario dentro del select, éste no guarda la selección realizada por el usuario, por lo que si saben de otra forma de hacerlo, estoy abierta a opciones.
  #10 (permalink)  
Antiguo 23/05/2016, 03:29
 
Fecha de Ingreso: febrero-2015
Mensajes: 9
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Problema con Insert

Para que no haya más confusión, pego de nuevo el código final:

Código PHP:
<?php

session_start
();
include(
'includes/conexion.php');

if(isset(
$_SESSION['email'])){

  
$_POST["enviar"] = "";
  if(isset(
$_POST["enviar"])){

    
$resultado $conexion->prepare "SELECT nombre, apellidos FROM usuarios WHERE email=:email" );
    
$resultado->bindparam ':email'$_SESSION ['email'], PDO::PARAM_STR);
    
$resultado->execute();

    if(
$row $resultado ->fetch()){
      
$nombre $row[0];
      
$apellidos $row[1];
      
$nombrecompleto $nombre ' ' $apellidos;
      echo
'
      <form action = "" method = "post">
        <table border="1">
              <tr>
              <td >Usuario</td>
              <td> Fecha </td>
              <td>ID Proyecto y Tarea</td>
              <td>Horas</td>
              <td>Comentarios</td>
              </tr>
              <td>
              <strong><div>'
.$nombrecompleto.' </div></strong>
              </td>
                    <td>
                       <input type=date name="fecha">
                    </td>'
;
        
$res $conexion->prepare("SELECT PID, ID, 'SUB-ID' from owner WHERE NOMBRE LIKE '%$nombrecompleto%' ORDER BY PID ASC");
        
$res->execute();

        
$aDatos = array();
        while(
$n $res->fetch()){
          
$aDatos[] = $n;
        }
        echo
'<td><select name = "ids" id = "ides>';
        foreach(
$aDatos as $row){
          
$pid $row[0];
          
$id $row[1];
          
$subid $row[2];
          if(
$subid 0){
            
$subid=0;
          }
            echo 
'<option value="'.$pid."_".$id."_".$subid.'">';
            echo 
"PID: ".$pid." - ID: ".$id." - Sub-Id: ".$subid;
            echo 
'</option>';
          }
          echo 
'</select></td>';

        if(isset(
$_POST['fecha'])){
          
$fecha $_POST['fecha'];
        }
        if(isset(
$_POST['horas'])){
          
$horas $_POST['horas'];
        }
        if(isset(
$_POST['comentarios'])){
          
$comentarios $_POST['comentarios'];
        }
        echo 
'<td><input type = "text" name = "horas"/> </td>
              <td><input type = "text" name = "comentarios"/> </td>
              </table>
              <input type="submit" name="enviar" value="Guardar valores">
              </form>'
;
        
$value $_REQUEST['ids'];
        
$explode explode("_",$value,3);
        
$pid $explode[0];
        
$id $explode[1];
        
$subid $explode[3];
        
$r =$conexion-> prepare("INSERT INTO 'timesheet' (nombre, fecha, pid, id, sub_id, Horas, Comentarios) VALUES (:nombre, :fecha, :pid, :id, :subid, :horas, :comentarios)");
        
$r ->bindParam(':nombre'$nombrecompleto);
        
$r ->bindParam(':fecha'$fecha);
        
$r ->bindParam(':pid'$pid);
        
$r ->bindParam(':id'$id);
        
$r ->bindParam(':subid'$subid);
        
$r ->bindParam(':horas'$horas);
        
$r ->bindParam(':comentarios'$comentarios);
        
$r ->execute();
    }
  }
}
?>
Mi problema es que el insert no almacena el valor que se selecciona en el formulario, si no el que por defecto le llega del foreach. Y al ejecutar éste código me aparecen estos errores:

Notice: Undefined index: ids in C:\xampp\htdocs\prueba\timesheet4.php on line 71

Notice: Undefined offset: 1 in C:\xampp\htdocs\prueba\timesheet4.php on line 74

Notice: Undefined offset: 3 in C:\xampp\htdocs\prueba\timesheet4.php on line 75

Las líneas son:

Código PHP:
$value $_REQUEST['ids'];
$id $explode[1];
$subid $explode[3]; 

Última edición por Lisud; 23/05/2016 a las 03:31 Razón: Faltan datos
  #11 (permalink)  
Antiguo 23/05/2016, 08:04
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Problema con Insert

Obviamente te va a dar error, por que al tener la todo en el mismo archivo, la primera vez que lo cargas $_REQUEST['ids'] no existe, ya que hasta que no envíes el formulario no va ha existir, deberás hacer un condicional para cortar la ejecución después del form en caso de que aún no se haya enviado el formulario para evitar ese error.

Un error menor también es que no estas cerrando bien las comillas del id

Código PHP:
Ver original
  1. echo'<td><select name = "ids" id = "ides>';
__________________
Unset($vida['malRollo']);

Última edición por xerifandtomas; 23/05/2016 a las 08:23

Etiquetas: fecha, formulario, insert, select, tabla, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:46.