Autor
|
Tema: [Resuelto] problema para declarar variables de un formulario (Leído 2,240 veces)
|
gAb1
Desconectado
Mensajes: 731
|
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: $list = array('use', 'type', 'status', 'bhk', 'baths', 'size', 'location', 'price', 'description'); foreach($list as $name) { if ($name != 'description') $var = "\$" . $name . "=filter_input(INPUT_POST, '" . $name . "', FILTER_SANITIZE_NUMBER_INT);"; else if ($name == 'description') $var = "\$" . $name . "=filter_input(INPUT_POST, '" . $name . "', FILTER_SANITIZE_STRING);"; eval($var); // que nadie use esto lol } $area_1 = $size['area1'] != '' ? $size['area1'] : 0; $area_2 = $size['area2'] != '' ? $size['area2'] : 0; $city = $location['city']; $zone = $location['zone']; $sale = $price['sale'] != '' ? $price['sale'] : 0; $rent = $price['rent'] != '' ? $price['rent'] : 0;
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: if ($stmt = $mysqli->prepare('INSERT INTO property (use, type, status, bhk, baths, area_1, area_2, city, zone, sale_price, monthly_price, description) VALUES ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?')) { $stmt->bind_param('iiiiiiiiiiis', $use, $type, $status, $bhk, $baths, $area1, $area2, $city, $zone, $sale, $rent, $description); $stmt->execute(); $id = $mysqli->insert_id; if ($sale != 0) { if ($stmt = $mysqli->prepare('INSERT INTO for_sale VALUES ?')) { $stmt->bind_param('i', $id); $stmt->execute(); } } if ($rent != 0) { if ($stmt = $mysqli->prepare('INSERT INTO for_rent VALUES ?')) { $stmt->bind_param('i', $id); $stmt->execute(); } } } else echo "Statement failed: " . $mysqli->error . "<br>";
Y el error: 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
|
Son palabras reservadas de MySQL, necesitas escaparlas con comillas: También necesitas paréntesis en VALUES.
|
|
|
En línea
|
|
|
|
gAb1
Desconectado
Mensajes: 731
|
Sigue dando el mismo error, solo que con las comillas que le puse: 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 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
|
Sigue dando el mismo error, solo que con las comillas que le puse: 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
Mensajes: 731
|
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. $list = array('use', 'type', 'status', 'bhk', 'baths', 'size', 'location', 'price', 'description'); foreach($list as $name) { if ( $name != 'description' ) { $$name = filter_input( INPUT_POST , $name, FILTER_SANITIZE_NUMBER_INT , FILTER_REQUIRE_ARRAY ); } else { $$name = filter_input( INPUT_POST , $name, FILTER_SANITIZE_NUMBER_INT ); } } else if ( $name == 'description' ) { $$name = filter_input( INPUT_POST , $name, FILTER_SANITIZE_STRING ); } }
|
|
« Última modificación: 13 Noviembre 2015, 22:34 pm por gAb1 »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Error al declarar variables. Ayuda
Programación Visual Basic
|
BenRu
|
2
|
1,809
|
28 Enero 2006, 20:54 pm
por BenRu
|
|
|
[Duda]Formas para declarar varias variables.
Programación C/C++
|
777Rubenix777
|
6
|
7,460
|
16 Octubre 2010, 13:54 pm
por Oblivi0n
|
|
|
Problema con variables tipo char [Resuelto]
Programación C/C++
|
Danyel_Casvill
|
4
|
7,679
|
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
|
31 Diciembre 2012, 16:16 pm
por zonahurbana
|
|
|
¿Declarar variables en PHP?
PHP
|
dimitrix
|
2
|
2,343
|
25 Mayo 2012, 04:51 am
por #!drvy
|
|