Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: spysecurityca en 5 Mayo 2014, 03:05 am



Título: Error en PHP+MySqli
Publicado por: spysecurityca en 5 Mayo 2014, 03:05 am
Buenas amigos, aquí les escribe este novato.

Les explico estoy practicando web y tengo el siguiente ejercicio que estoy haciendo:

Ingreso en un Form HTML las cantidades deseadas de X productos, al ingresar dicha cantidad inmediatamente me genera un input hidden en el cual se crea un identificador por cada elemento elegido.

Envío esto a un PHP que me va a recoger todos los datos del Form de los articulos y me va a hacer el update en mi BD cambiando las cantidades de los productos escogidos.

El problema es que obtengo un error de Sintaxis que no logro entender ni porque pasa ni como repararlo.

Aquí les traigo el código del lado del PHP.

 
Código
  1. <?php
  2.    class extraerCantidad{
  3.     private $identificadorCantidad;
  4.     private $valorCantidad;
  5.     private $conex;
  6.     private $registros;
  7.     public function __construct(){
  8.     $this->conex=mysqli_connect('localhost', 'root', '', 'base1') or die("Error en la conexion");
  9.     }
  10.     public function ingresarCantidad($cant){
  11.     $this->valorCantidad=$cant;
  12.     }
  13.     public function ingresarDescripcion($desc){
  14.     $this->identificadorCantidad=$desc;
  15.     }
  16.     public function cambioCantidad() {
  17. $this->registros=mysqli_query($this->conex, "update articulos set cantidad=cantidad-$this->valorCantidad where descripcion='$this->identificadorCantidad'") or die(mysqli_error($this->conex));
  18.     echo "Cantidad Actualizada".'<br>';
  19.     mysqli_close($this->conex);
  20.     }
  21.     }
  22.     /* Recorro todos los envios POST que me llegan desde el Form HTML*/
  23.  foreach ($_POST as $valorCampo) {
  24.   /*Ignoro cualquier campo en blanco para prevenir errores*/
  25. if ($valorCampo!=="") {
  26. /*Separo de todos los _POST por medio de filtrado aquellos que sean los identificadores del articulo (o descripcion) y las cantidades*/
  27. $cantidad=filter_var($valorCampo,FILTER_SANITIZE_NUMBER_INT);
  28. $descripcion=filter_var($valorCampo,FILTER_SANITIZE_STRING);
  29. /*Procedo a Crear las Nuevas Ordenes*/
  30. $nuevaOrden=new extraerCantidad();
  31. /*Asigno cantidad Extraida*/
  32. if (is_numeric($cantidad)) {
  33. $nuevaOrden->ingresarCantidad($cantidad);
  34. /*Asigno Descripcion o Identificador*/
  35. }elseif (is_string($descripcion)) {
  36. $nuevaOrden->ingresarDescripcion($descripcion);
  37. /*Llamo a la funcion que hace el Query Update en mi BD*/
  38. }
  39. $nuevaOrden->cambioCantidad();
  40. }
  41.  }
  42. ?>

Recibo este error (Cabe destacar que CocaCola puede ser cualquier otro identificador que reciba): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where descripcion='CocaCola'' at line 1

Curiosamente, cuando ingreso el identificador de forma manual en la linea del query, me sigue arrojando el error, pero me hace el cambio de cantidad en el elemento deseado.

Saludos.


Título: Re: Error en PHP+MySqli
Publicado por: spysecurityca en 5 Mayo 2014, 03:29 am
Reir para no llorar,

Cuando hago el Query para consultar X articulo definido por $this->identificadorArticulo

TODO salen bien, dios mio que error puedo tener entre un simple update y un select como para que el select si se haga bien y el update no.

Este fue el cambio que hice para probar y salio bello, 0 Errores (Cabe destacar que le deje el mismo nombre a la funcion, por si se confunden pues)    
Código
  1. public function cambioCantidad() {
  2. $this->registros=mysqli_query($this->conex, "select precio,descripcion,cantidad from articulos where descripcion='$this->identificadorCantidad'") or die(mysqli_error($this->conex));
  3.     if ($reg2=mysqli_fetch_array($this->registros)) {
  4.     echo $reg2['descripcion'].'<br>';
  5.     echo $reg2['precio'].'<br>';
  6.     echo $reg2['cantidad'].'<br>';
  7.     echo '<hr>';
  8.     }


Título: Re: Error en PHP+MySqli
Publicado por: JorgeEMX en 6 Mayo 2014, 13:38 pm
Intenta así

"update articulos set cantidad=cantidad-{$this->valorCantidad} where descripcion='{$this->identificadorCantidad}'"


Título: Re: Error en PHP+MySqli
Publicado por: spysecurityca en 7 Mayo 2014, 02:03 am
Saludos Diego!

Ante todo muchas gracias por la participación.

Te cuento, he ingresado el query como me lo has indicado y el error sigue, me he fijado que la hacer el FILTER_STRING, me sigue envia las cantidades como string.

Osea que no me separa las variables _POST que tienen cantidad de las variables _POST que tienen la parte de la descripcion.

¿ Sabrás el porque ?.

Osea aveces hago una funcion de prueba que imprime las variables $valorCampo "filtradas" que son numericas por un lado y string por otro y me arroja algo así:

11 CocaCola
22 Pepsi
33 BigCola

Lo ideal debería ser

1(Numero) CocaCola (String)
2(Numero) Pepsi (String)
3(Numero) BigCola (String)

Saludos Amigo.


Título: Re: Error en PHP+MySqli
Publicado por: JorgeEMX en 7 Mayo 2014, 02:37 am
El error proviene en tu if.. siempre que mandas a llamar al método cambioCantidad() se llama con algunos de los dos parámetros que necesitas en el query, ya sea cantidad o la descripción y nunca ambos (y necesitas ambos para tener un sentencia SQL correcta). Deberás corregir eso, no tengo la menor idea de cómo es tu formulario pero es mejor que uses los nombres de los indices tal cuál como vienen en POST.

PD: Quién demonios es Diego?


Título: Re: Error en PHP+MySqli
Publicado por: spysecurityca en 7 Mayo 2014, 04:43 am
Jajajajaj perdón Jorge! Estaba pensando en un novio (?)

Muchas gracias de nuevo!, pues te cuento todo lo que has dicho con mucho gusto lo hice, no me daba resultado.

Comprobé cuantos POST estaba recibiendo en el array por medio de un print_r($_POST)

y vi que estaba enviando 2 veces las descripciones (Esto es por error en el lado HTML + Javasciript).

He quitado ese error que me clonaba la descripción, luego user un for each con una llave y a $this->descripcionblabla le asigné el valor (osea el name) del $_POST y en el $this->valorCantidad le envié el value de cada llave.

Y santo remedio, al momento de hacer la consulta por seguridad hice un if para verificar que ninguno de los 2 tanto descripción como cantidad llegue en blanco y allí procedí a hacer el Query.

Muchísimas gracias George! de verdad, a pesar de que las soluciones dadas por tí no fueron mi definitiva aprecio mucho tu capacidad de ayuda.

Saludos desde Venezuela!


Título: Re: Error en PHP+MySqli
Publicado por: spysecurityca en 7 Mayo 2014, 04:52 am
Por si acaso, aquí está el codigo
Código
  1. <?php
  2.    class extraerCantidad{
  3.     private $identificadorCantidad;
  4.     private $valorCantidad;
  5.     private $conex;
  6.     private $registros;
  7.     public function __construct($desc,$cant){
  8.     $this->identificadorCantidad=$desc;
  9.     $this->valorCantidad=$cant;
  10.     $this->conex=mysqli_connect('localhost', 'root', '', 'base1') or die("Error en la conexion");
  11.     $this->cambioCantidad();
  12.     }
  13.  
  14.     public function cambioCantidad() {
  15.  
  16.     if ($this->valorCantidad!=="" and $this->identificadorCantidad!=="") {
  17.     $this->registros=mysqli_query($this->conex, "update articulos set cantidad=cantidad-$this->valorCantidad where descripcion='$this->identificadorCantidad'")
  18.     or die("Error en la consulta");
  19.     mysqli_close($this->conex);
  20.     }
  21.     }
  22.    }
  23.     foreach ($_POST as $descripcion => $cantidad) {
  24. $nuevaOrden=new extraerCantidad($descripcion, $cantidad);
  25.     }
  26. ?>