elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [Resuelto] problema para declarar variables de un formulario
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Resuelto] problema para declarar variables de un formulario  (Leído 2,240 veces)
gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
[Resuelto] problema para declarar variables de un formulario
« en: 12 Noviembre 2015, 06:38 am »

Estoy tratando de automatizar el proceso usando un foreach y pasandole una lista de todos los elementos del formulario, pero algunos son array y no estoy seguro si lo estoy haciendo bien. mysqli prepare me esta dando un error ("near col1, col2, etc").

Así es como lo estoy haciendo:

Código
  1. $list = array('use', 'type', 'status', 'bhk', 'baths', 'size', 'location', 'price', 'description');
  2. foreach($list as $name) {
  3.    if ($name != 'description')
  4.        $var = "\$" . $name . "=filter_input(INPUT_POST, '" . $name . "', FILTER_SANITIZE_NUMBER_INT);";
  5.    else if ($name == 'description')
  6.        $var = "\$" . $name . "=filter_input(INPUT_POST, '" . $name . "', FILTER_SANITIZE_STRING);";
  7.    eval($var);  // que nadie use esto lol
  8. }
  9.  
  10. $area_1 = $size['area1'] != '' ? $size['area1'] : 0;
  11. $area_2 = $size['area2'] != '' ? $size['area2'] : 0;
  12. $city   = $location['city'];
  13. $zone   = $location['zone'];
  14. $sale   = $price['sale'] != '' ? $price['sale'] : 0;
  15. $rent   = $price['rent'] != '' ? $price['rent'] : 0;
  16.  

El problema viene cuando le hago un echo a los array, imprime 0 o nada. Y me he asegurado varias veces de rellenar el input...

Creo que el problema está en que no se puede usar filter_input() con arrays, pero no estoy seguro.

Este es el codigo con el que se guardan los datos en la db:

Código
  1. if ($stmt = $mysqli->prepare('INSERT INTO property (use, type, status, bhk, baths, area_1, area_2, city, zone, sale_price, monthly_price, description) VALUES ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?')) {
  2.    $stmt->bind_param('iiiiiiiiiiis', $use, $type, $status, $bhk, $baths, $area1, $area2, $city, $zone, $sale, $rent, $description);
  3.    $stmt->execute();
  4.  
  5.    $id = $mysqli->insert_id;
  6.  
  7.    if ($sale != 0) {
  8.        if ($stmt = $mysqli->prepare('INSERT INTO for_sale VALUES ?')) {
  9.            $stmt->bind_param('i', $id);
  10.            $stmt->execute();
  11.        }
  12.    }
  13.  
  14.    if ($rent != 0) {
  15.        if ($stmt = $mysqli->prepare('INSERT INTO for_rent VALUES ?')) {
  16.            $stmt->bind_param('i', $id);
  17.            $stmt->execute();
  18.        }
  19.    }
  20. } else echo "Statement failed: " . $mysqli->error . "<br>";

Y el error:

Citar
Statement failed: 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 'use, type, status, bhk, baths, area_1, area_2, city, zone, sale_price, monthly_p' at line 1

Por ultimo estoy buscando una manera de introducir la id del anuncio en las tablas "for_sale" y "for_rent" dependiendo si se ha introducido un precio en $price['sale'] y $price['rent']. ¿Sabeis alguna manera limpia de hacerlo? ¿O creeis que es mejor crear dos columnas más en la tabla property para indicar si se vende o alquila?

Gracias!


« Última modificación: 15 Noviembre 2015, 02:09 am por gAb1 » En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: problema para declarar variables de un formulario
« Respuesta #1 en: 12 Noviembre 2015, 15:51 pm »

Código:
use, type, status

Son palabras reservadas de MySQL, necesitas escaparlas con comillas:

Código:
`use`, `type`, `status`

También necesitas paréntesis en VALUES.


En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: problema para declarar variables de un formulario
« Respuesta #2 en: 12 Noviembre 2015, 16:48 pm »

Sigue dando el mismo error, solo que con las comillas que le puse:

Citar
Statement failed: 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 '"use", "type", "status", bhk, baths, area_1, area_2, city, zone, sale_price, mon' at line 1

Código
  1. prepare('INSERT INTO property ("use", "type", "status", bhk, baths, area_1, area_2, city, zone, sale_price, monthly_price, description) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)')

En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: problema para declarar variables de un formulario
« Respuesta #3 en: 12 Noviembre 2015, 17:17 pm »

Sigue dando el mismo error, solo que con las comillas que le puse:

Código
  1. prepare('INSERT INTO property ("use", "type", "status", bhk, baths, area_1, area_2, city, zone, sale_price, monthly_price, description) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)')



Es porque necesitas usar la comilla que he puesto o habilitar ANSI_QUOTES... aunque esto vuelve strings con doble comilla identificadores en lugar de strings. La verdad no lo recomiendo, usa los backticks (`).

https://dev.mysql.com/doc/refman/5.6/en/identifiers.html
En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: problema para declarar variables de un formulario
« Respuesta #4 en: 12 Noviembre 2015, 20:29 pm »

Ah cierto!  Gracias.

Lo de declarar las variables y los arrays esta bien asi, no?

Siento haber preguntado eso, era muy facil pero se me olvido poner la opción para filtrar los arrays.

Código
  1.    $list = array('use', 'type', 'status', 'bhk', 'baths', 'size', 'location', 'price', 'description');
  2.    foreach($list as $name) {
  3.        if ( $name != 'description' ) {
  4.            if( is_array( $_POST[$name] ) ) {
  5.                $$name = filter_input( INPUT_POST , $name, FILTER_SANITIZE_NUMBER_INT , FILTER_REQUIRE_ARRAY );
  6.            } else {
  7.                $$name = filter_input( INPUT_POST , $name, FILTER_SANITIZE_NUMBER_INT );
  8.            }
  9.        } else if ( $name == 'description' ) {
  10.            $$name = filter_input( INPUT_POST , $name, FILTER_SANITIZE_STRING );
  11.        }
  12.    }
« Última modificación: 13 Noviembre 2015, 22:34 pm por gAb1 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error al declarar variables. Ayuda
Programación Visual Basic
BenRu 2 1,809 Último mensaje 28 Enero 2006, 20:54 pm
por BenRu
[Duda]Formas para declarar varias variables.
Programación C/C++
777Rubenix777 6 7,460 Último mensaje 16 Octubre 2010, 13:54 pm
por Oblivi0n
Problema con variables tipo char [Resuelto]
Programación C/C++
Danyel_Casvill 4 7,679 Último mensaje 18 Agosto 2011, 18:23 pm
por PiroskY
uso de llaves para poder declarar variables del mismo nombre
Programación C/C++
david_BS 2 2,888 Último mensaje 31 Diciembre 2012, 16:16 pm
por zonahurbana
¿Declarar variables en PHP?
PHP
dimitrix 2 2,343 Último mensaje 25 Mayo 2012, 04:51 am
por #!drvy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines