PHP - problema con insert

 
Vista:
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por Alejandro (172 intervenciones) el 30/04/2020 15:36:26
Hola buenos dias,

tengo este codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
session_start();
include("conexion.php");
 
 
$id = $_GET['id_personal'];
 
$carneProfesionalidad = (isset($_POST['carneProfesionalidad']))?$_POST['carneProfesionalidad']:"";
$numHorasCarneProf = (isset($_POST['numHorasCarneProf']))?$_POST['numHorasCarneProf']:"";
 
if ($carneProfesionalidad){
 
    $consulta= "INSERT INTO carne_profesionalidad (tipo, numero_horas, codigo_persona_carne) VALUES ('".$carneProfesionalidad."','".$numHorasCarneProf."','".$id."')";
    $resultado = mysqli_query($GLOBALS['conn'], $consulta);
 
 
 
    echo "Datos de carné de profesionalidad guardados</br>";
 
}else{
 
    echo "No has seleccionado carné de profesionalidad</br>";
 
}

He hecho var_dump a $resultado y me muestra false y no se por que, en las otras paginas la conexion la hace bien incluso en esta pagina que tengo varias validaciones de datos (pero no las muestro para no llenar de codigo la pregunta) lo hace perfectamente.

Y lo mas raro es que la primera vez que inserto datos, los inserta, pero es insertar por segunda vez y no lo hace, es mas, ya no me deja insertar en esa tabla.

Espero que me ayuden
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por Alejandro (172 intervenciones) el 30/04/2020 15:52:14
vale acabo de darme cuenta de que me inserta los datos cuando el ID vale 1, cuando tiene otro valor no lo hace
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por Javier (547 intervenciones) el 30/04/2020 19:47:50
Hola,

una pregunta por curiosidad,

no limpias o sanitizas las variables recibidas, en este caso pot el metodo GET antes de hacer una consulta a la base de datos?

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por Alejandro (172 intervenciones) el 04/05/2020 09:44:37
A que te refieres con limpiar?? cuando hago una consulta SELECT uso mysqli_free_result, pero en los insert no, deberia tambien hacerlo??

Con respecto a la solucion de este problema, te refieres a que lo ponga antes del session_start??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por Alejandro (172 intervenciones) el 04/05/2020 10:38:30
el tema de seguridad por el momento lo voy a dejar para el final, ahora estoy diseñando la web y ver como estructurarla. Cuando acabe pues me dedicare a fondo a la seguridad. De momento esta intranet no esta publicada en ningun servidor, esta desarrollandose. Lo que no entiendo es por que esa consulta especificamente no introduce datos, cuando hay otras en la misma pagina que si lo hacen sin problemas...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por javier (547 intervenciones) el 04/05/2020 10:59:16
pues ve paso a paso, comprobando que todos los valores sean correctos antes de la consulta a la BBDD.

haz un echo de la consulta antes de enviarla, a ver si esta bien armada,

coloca error_reporting(E_ALL);

y a ver si sale el error por algun sitio.

Aunque estes de pruebas y desarrollando, si se te escapa a ti o a quien sea, probando unas comillas dobles o sencillas podrias destrozar tu mismo tu propia BBDD en 1 segundo.

Ya que estas empezando a desarrolarla te aconsejo que para la conexion a la BBDD uses PDO de php, una clase magnifica y usa consultas preparadas y bindparam, te haces una clase y la usas siempre, pues de esta manera el codigo se reutiliza y las consultas seran muchisimo mas seguras.

te paso un ejemplo funcional

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
 
class baseDatos{
    public $db;
    private $hostName;
    private $dbName;
    private $userName;
    private $passWord;
 
 
 
       function __construct()
      {
          include ('conexion.php');
 
 
 
          $this->dbName   = $dbName1;
          $this->hostName = $hostName1;
          $this->userName = $userName1;
          $this->passWord = $passWord1;
 
        try {
          $this->db = new PDO("mysql:host={$this->hostName};dbname={$this->dbName}",
          $this->userName,
          $this->passWord);
 
          $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          $this->db->exec("set names utf8");
 
        }
        catch(PDOException $e){
          return 'Algo mal en la conexion';
        }
	    }
 
 
       public function leer ($tbl, $clmns = '', $where = '', $orden = '', $limite = '')
      {
        try {
          $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 
           if (is_array($clmns)){
                   $clmns = implode ("," , $clmns);
                }
 
           if ($clmns == '' && $where == '' && $orden == '' && $limite == '' ){
              //consulta en una sola variable
              $stmt = $this->db->prepare("{$tbl}");
              $stmt->bindParam(1, $tbl    , PDO::PARAM_STR);
           }
              //consulta pasando parametros separados
           if ($clmns != '' ) {
 
              $stmt = $this->db->prepare("SELECT {$clmns} FROM {$tbl} {$where} {$orden} {$limite}");
              $stmt->bindParam(1, $tbl    , PDO::PARAM_STR);
              $stmt->bindParam(2, $clmns  , PDO::PARAM_STR);
              $stmt->bindParam(3, $where  , PDO::PARAM_STR);
              $stmt->bindParam(4, $orden  , PDO::PARAM_STR);
              $stmt->bindParam(5, $limite , PDO::PARAM_STR);
           }
 
 
              $stmt->execute();
 
              $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
 
               return $result;
 
 
 
 
 
        }
        catch(PDOException $e){
          return 'no se pudieron leer los datos'.$e;
        }
      }
}

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por Alejandro (172 intervenciones) el 04/05/2020 11:26:49
Las PDO es una asignatura pendiente que tengo pues no las entiendo muy bien. Por ahora seguire con mi metodo pues se lo que estoy haciendo en todo momento, pero aun asi gracias por el ejemplo.

error_reporting(E_ALL); no indica nada
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por javier (547 intervenciones) el 04/05/2020 11:35:45
al principio del scrip o en un archivo aparte y haces includes

por ejemplo, crea un archivo php y llamalo, yo que se......misErrores.php con este codigo


1
2
3
<?php
error_reporting (E_ALL);
?>

y en todos tus archivos, en las primeras lineas de codigo PHP haces un include

1
include('misErrores.php');

y asi el dia que no quieras mostrar nunca mas lo errores por que ya has publicado tu web en un servidor y si aparecen errores pueden ayudar a los hackers a fastidiar tu web cambias el archivo misErrores.php por esto:

1
error_reporting (0);

y asi nadie podra conocer rutas ni nombres de archivos tuyos.

No se si me he explicado bien.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por Alejandro (172 intervenciones) el 04/05/2020 12:20:43
Gracias, por la orientacion. Pero debe de estar bien porque no muestra nada
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por javier (547 intervenciones) el 04/05/2020 11:37:54
si con

error_reporting(E_ALL);

no indica en pantalla al ejecutar el script, nada, es que no hay errores de ningun tipo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por Alejandro (172 intervenciones) el 04/05/2020 12:20:12
Debe ser eso porque no muestra nada. Pero sigue sin insertar cuando el valor de id es mas de 1.

mysqli_query sigue mostrando false
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por javier (547 intervenciones) el 04/05/2020 12:35:27
es muy raro lo que te pasa
¿Que tipo de campo de MySQL es codigo_persona_carne?
¿Como es la estructura de la tabla donde quieres insertar los datos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por Alejandro (172 intervenciones) el 05/05/2020 12:10:12
La estructura es asi.


TABLA

codigo_persona_carne, tiene una restriccion en cascada hacia la tabla padre datos_personales (ON DELETE CASCADE)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por javier (547 intervenciones) el 05/05/2020 12:17:42
parece todo bien,

usa mysqli_error

despues del insert a ver si dice algo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por Alejandro (172 intervenciones) el 05/05/2020 12:39:20
Nada he hecho mysqli_error($GLOBALS['conn']); y no muestra nada
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por javier (547 intervenciones) el 05/05/2020 12:48:30
como lo has hecho?

asi?

1
2
3
if (!$resultado) {
   printf("Errormessage: %s\n", $mysqli->error);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por javier (547 intervenciones) el 05/05/2020 12:53:09
prueba de esta manera

1
2
3
4
5
6
7
8
9
10
11
12
13
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
 
$query = "SELECT XXname FROM customer_table ";
$res = $mysqli->query($query);
 
if ($mysqli->error) {
    try {
        throw new Exception("MySQL error $mysqli->error <br> Query:<br> $query", $msqli->errno);
    } catch(Exception $e ) {
        echo "Error No: ".$e->getCode(). " - ". $e->getMessage() . "<br >";
        echo nl2br($e->getTraceAsString());
    }
}

pero adaptado a tu query
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por Alejandro (172 intervenciones) el 05/05/2020 13:30:30
a la consulta le hice un var_dump y todos los parametros son recibidos.

Es cuando hago la conexion cuando me dice que el booleano es false.

Pruebo tu segunda opcion a ver...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por Alejandro (172 intervenciones) el 05/05/2020 14:41:31
bueno demasiado complejo, me da muchos errores

dice variable mysqli indefinida, donde pone world es el nombre de mi base de datos no??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por Alejandro (172 intervenciones) el 05/05/2020 14:44:55
He probado y me da muchos errores. Me dice que la variable $mysqli es indefinida. Donde pone "world" se supone que es el nombre de mi base de datos???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por javier (547 intervenciones) el 05/05/2020 18:30:48
si, WORLD es la base de datos y la variable $mysqli esta definida en la primera linea

1
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

has de manejar siempre los errores, tanto programando en PHP como a la hora de hacer consultas como por ejemplo

1
2
3
4
if (mysqli_connect_errno()) {
    printf("Falló la conexión: %s\n", mysqli_connect_error());
    exit();
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por Alejandro (172 intervenciones) el 06/05/2020 10:19:22
Esto lo que me sale:

Notice: Undefined variable: msqli in C:\xampp\bd\barrio\validardatosOtrosDatos.php on line 85

Notice: Trying to get property 'errno' of non-object in C:\xampp\bd\barrio\validardatosOtrosDatos.php on line 85
Error No: 0 - MySQL error Cannot add or update a child row: a foreign key constraint fails (`barrio`.`carne_profesionalidad`, CONSTRAINT `carne_profesionalidad_ibfk_2` FOREIGN KEY (`id_carne_profesionalidad`) REFERENCES `datos_personales` (`id_personal`) ON DELETE CASCADE)
Query:
INSERT INTO carne_profesionalidad (tipo, numero_horas, codigo_persona_carne) VALUES ('prueba2','10 horas','1')
#0 {main}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por Alejandro (172 intervenciones) el 06/05/2020 10:30:34
vale ya esta solucionado, es que tenia un error en la restriccion 'carne_profesionalidad_ibfk_2' la he eliminado y ya me inserta los datos.
Muchas gracias por todo amigo, te debo una ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con insert

Publicado por javier (547 intervenciones) el 06/05/2020 11:04:46
me alegro!!

maneja siempre los errores mientras desarrolles, una vez acabado el proyecto, quitalas, por que si ocurre algun error inesperado y lo muestras en pantalla, das pistas sobre rutas, archivos,querys y tablas y campos de la BBDD a cualquier hacker.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar