PHP - Función PHP para Insertar registros NO FUNCIONA!!!

 
Vista:
sin imagen de perfil

Función PHP para Insertar registros NO FUNCIONA!!!

Publicado por Abel (5 intervenciones) el 10/12/2016 15:31:26
Hola Amigos, estoy trabajando con una pequeña aplicación en PHP y MySQL.
Tengo una clase creada para una de mis tablas en la BdD:
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
<?php
    require_once '../controller/ClsConectar.php';
    class ClsRegistro
    {
        private $id_registro,$ci,$id_materia;
        private $conectar,$db,$registros;
        function __construct() {
            $this->conectar=new ClsConectar();
            $this->db=$this->conectar->conexion();
            $this->registros=array();
            $this->ci=0;
            $this->id_materia=0;
        }
        public function getId_registro()
        { return $this->id_registro; }
        public function setId_registro($id_registro)
        { $this->id_registro=$id_registro;}
        public function getCi()
        { return $this->ci; }
        public function setCi($ci)
        { $this->ci=$ci;}
        public function getId_materia()
        { return $this->id_materia; }
        public function setId_materia($id_materia)
        { $this->id_materia=$id_materia;}
 
        public function ListarRegistroByCI() {
               $sql="SELECT r.id_registro,m.sigla_materia,m.nombre_materia FROM registro r, materia m WHERE r.id_materia=m.id_materia AND r.ci=$this->ci";
               $consulta=$this->db->query($sql);
               $this->registros=$consulta->fetch_all(MYSQLI_ASSOC);
               return $this->registros;
        }
        public function ListarMateriasPendientes() {
               $sql="SELECT * FROM materia WHERE id_materia NOT IN(SELECT id_materia FROM registro WHERE ci=$this->ci)";
               $consulta=$this->db->query($sql);
               $this->registros=$consulta->fetch_all(MYSQLI_ASSOC);
               return $this->registros;
 
        }
        public function RegistrarMateria() {
               $sql="INSERT INTO registro VALUES(NULL,$this->ci,$this->id_materia)";
               $this->db->query($sql);
        }
        public function RetirarMateria() {
                $sql="DELETE FROM registro WHERE id_registro=$this->id_registro";
                $this->db->query($sql);
        }
    }
?>
El problema es que el segmento: "$this->db->query($sql)" que uso en todas las funciones para ejecutar mi consulta SOLO funciona para mostrar datos, es decir las funciones : ListarRegistroByCI() y ListarMateriasPendientes() se ejecutan correctamente, pero al tratar de ejecutar las funciones RegistrarMateria() y RetirarMateria(), el segmento "$this->db->query($sql)" no funciona.
Llamo a las funciones de la siguiente forma:
1
2
3
4
$registro=new ClsRegistro();
       $registro->setId_materia($id_materia);
       $registro->setCi($ci);
       $registro->RegistrarMateria();
ya verifique que la query:
1
$sql="INSERT INTO registro VALUES(NULL,$this->ci,$this->id_materia)";
esta correcta, porque hice un echo para verificar si los valores se enviaron correctamente,luego lleve el resultado del echo al gestor de base de datos y este lo ejecuta correctamente "INSERT INTO registro VALUES(NULL,5654,3)".
ALGUNA IDEA PORQUE "$this->db->query($sql)" funciona cuando la QUERY es un SELECT y NO FUNCIONA cuando intento hacer un INSERT,DELETE o UPDATE ????????? Ayuda!!!!
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
Imágen de perfil de kip
Val: 2.944
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Función PHP para Insertar registros NO FUNCIONA!!!

Publicado por kip (877 intervenciones) el 10/12/2016 15:59:14
Hola, creo que el problema esta en que colocas $this->var, aquello no es correcto, si deseas hacerlo puedes concatenar o mucho mejor usar la sintaxis compleja de strings, es decir colocar las variables entre {}, asi:

1
$sql="INSERT INTO registro VALUES(NULL, {$this->ci}, {$this->id_materia})";

Docum:
Cualquier variable escalar, elemento de array o propiedad de objeto con una representación de tipo string puede ser incluido a través de esta sintaxis. Simplemente se escribe la expresión del mismo modo en que aparecería por fuera del string, y delimitándola con { y }.
http://php.net/manual/es/language.types.string.php

Intenta colocarlo en todas las querys que tengan en su query propiedades de la clase y nos cuentas.
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

Función PHP para Insertar registros NO FUNCIONA!!!

Publicado por Abel (5 intervenciones) el 11/12/2016 15:39:47
ya lo intente y aun asi no funciona...... .
Hize la prueba de la siguiente forma para ver si la query se puede ejecutar y funciona correctamente:
1
2
3
4
5
public function RegistrarMateria() {
              $sql="INSERT INTO registro VALUES(NULL,$this->ci,$this->id_materia)";
              $con=mysqli_connect('localhost', 'root', '', 'miBdD');
              mysqli_query($con, $sql);
        }
Pero no debo hacerlo de esa forma, pues debo usar la instancia de la clase ClsConectar para ejecutar mis querys
1
$this->db->query($sql)
Alguna otra idea de porque funciona cuando la QUERY es un SELECT y NO FUNCIONA cuando intento hacer un INSERT,DELETE o UPDATE ?????????
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 kip
Val: 2.944
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Función PHP para Insertar registros NO FUNCIONA!!!

Publicado por kip (877 intervenciones) el 11/12/2016 16:14:24
Podrias colocar el codigo de la clase que maneja las querys y conexion?
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

Función PHP para Insertar registros NO FUNCIONA!!!

Publicado por Abel (5 intervenciones) el 11/12/2016 20:27:01
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
class ClsConectar{
 
    private $driver,$host, $user, $pass, $database, $charset;
 
    public function __construct() {
        $db_cfg = require_once 'config/database.php';
        $this->driver=$db_cfg["driver"];
        $this->host=$db_cfg["host"];
        $this->user=$db_cfg["user"];
        $this->pass=$db_cfg["pass"];
        $this->database=$db_cfg["database"];
        $this->charset=$db_cfg["charset"];
    }
 
    public function conexion(){
 
        if($this->driver=="mysql" || $this->driver==null){
            $con=new mysqli($this->host, $this->user, $this->pass, $this->database);
            $con->query("SET NAMES '".$this->charset."'");
 
        }
        return $con;
    }
 
}
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 kip
Val: 2.944
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Función PHP para Insertar registros NO FUNCIONA!!!

Publicado por kip (877 intervenciones) el 11/12/2016 20:51:47
Veo bien la clase a simple vista, intenta eso:

1
2
3
4
5
6
7
8
public function RegistrarMateria() {
	$sql = "INSERT INTO registro VALUES(NULL, {$this->ci}, {$this->id_materia})";
	if ($this->db->query($sql) === TRUE) {
		echo "Exito!";
	} else {
		echo "Error: {$this->db->error}";
	}
}

Si exisitiese algun error al momento de ejecutar la query de seguro lo mostrara.

Por cierto cuando creas la conexion lo que recomiendo es almacenar esta conexion como una propiedad de la clase y ser accedida a esta desde el objeto creado en la otra clase.

Nos cuentas si te arroja algun 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
sin imagen de perfil

Función PHP para Insertar registros NO FUNCIONA!!!

Publicado por Abel (5 intervenciones) el 11/12/2016 21:36:54
me sale el siguiente error:
1
Error: No database selected
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 kip
Val: 2.944
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Función PHP para Insertar registros NO FUNCIONA!!!

Publicado por kip (877 intervenciones) el 11/12/2016 21:51:19
No me habia fijado en el constructor de ClsConectar, donde haces un require de una forma realmente errada, este no debe almancenarse en una variable! Debes recordar que el require se usa para incluir el codigo de otro script dentro de otro, pudiendo acceder a metodos, variables, etc de este desde el script en el que se lo incluye.

Deberia ir asi:
1
2
3
require_once 'config/database.php';
 
class ClsConectar{

Ahora bien, las variables que defines como el valor de las propiedades de la clase ClsConectar deben estar en el script database.php, en este caso debe ser un array con indices personalizados y sus respectivos valores como lo especificas aca:

1
$this->driver = $db_cfg["driver"];

Intenta colocando bien el require, si aun no funciona verifica que database.php tenga la variable $db_cfg este bien definida con sus indices y valores correctos.

Nos comentas como va todo....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Función PHP para Insertar registros NO FUNCIONA!!!

Publicado por Abel (5 intervenciones) el 11/12/2016 23:24:48
Lo modifique segun tus recomendaciones y ya funciona. Muchas Gracias. El codigo de la clase conectar quedo así:
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
<?php
require_once 'config/database.php';
 
class ClsConectar{
 
    private $driver,$host, $user, $pass, $database, $charset,$con;
 
    public function __construct() {
 
        $this->driver=$GLOBALS["db_cfg"]["driver"];
        $this->host=$GLOBALS["db_cfg"]["host"];
        $this->user=$GLOBALS["db_cfg"]["user"];
        $this->pass=$GLOBALS["db_cfg"]["pass"];
        $this->database=$GLOBALS["db_cfg"]["database"];
        $this->charset=$GLOBALS["db_cfg"]["charset"];
 
    }
    public function getConexion() {
        return $this->con;
    }
    public function conexion(){
 
        if($this->driver=="mysql" || $this->driver==null){
            $this->con=new mysqli($this->host, $this->user, $this->pass, $this->database);
            $this->con->query("SET NAMES '".$this->charset."'");
 
        }
    }
 
}
 
?>

Gracias de antemano, lo raro es que incluyendo el require_once de esa forma incorrecta, si funcionaba para los SELECT y no asi para el resto de operaciones CRUD.
Este era el config/database.php que estaba usando:
1
2
3
4
5
6
7
8
9
10
11
<?php
return array(
    "driver"    =>"mysql",
    "host"      =>"localhost",
    "user"      =>"root",
    "pass"      =>"",
    "database"  =>"miBdD",
    "charset"   =>"utf8"
);
 
?>
y funcionaba hasta cierto punto no se por que
pero ya lo corregi y ahora quedo mi archivo asi:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
global $db_cfg;
$db_cfg = array(
    "driver"    =>"mysql",
    "host"      =>"localhost",
    "user"      =>"root",
    "pass"      =>"",
    "database"  =>"miBdD",
    "charset"   =>"utf8"
);
 
?>


Gracias por tu ayuda, me sacaste de un problema tremendo!!!
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: 173
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Función PHP para Insertar registros NO FUNCIONA!!!

Publicado por Yamil Bracho (884 intervenciones) el 11/12/2016 16:38:58
Imprime el contenido de $sql a ver si esta bien formado. Creo que deberia ser

1
2
$sql="INSERT INTO registro(ci, materia)  VALUES("{$this->ci},{$this->id_materia})";
echo $sql; die();

Asi ves que tiene el valor de $sql con los valores que tienes en la instancia...
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