Procesar formularios con PHP
Vuelvo a escribir sobre nerdadas ![]()
En ocasiones requerimos procesar formularios con PHP cuyos valores no son condicionales. Para hacer insert en la base de datos es necesario construir una lista de campos y una lista de valores para lo cual muchas veces acostumbramos construir la cadena concatenando valores, pero hay una manera mas sencilla para hacerlo utilizando el array_keys de php.
Lo primero que hay que hacer es al momento de crear el codigo HTML del formulario debemos poner en la propiedad name el nombre exacto del campo dentro de nuestra tabla, haciendo eso podremos crear la lista de campos y valores en el mismo ciclo.
En el script para procesar los datos creamos primero dos variables de tipo array
$valuelist_arr = array();
$fieldlist_arr=array();
Despues ejecutamos un foreach para obtener cada uno de los names de los elementos del formulario y sus valores, almacenandolos en los arrays creados en el paso anterior:
foreach (array_keys($_GET) as $key) {
array_push($fieldlist_arr,$key);
$key = $_GET[$key];
array_push($valuelist_arr, “'”.$key.“'”);
}
Ahora hay que crear una cadena con dichos names y valores para lo cual ejecutamos otro ciclo, en donde concatenamos las comas entre cada elemento:
for($i=0;$i<(count($fieldlist_arr));$i++){
$valuelist .= str_replace('\“','”',str_replace(“\'”,“’”,$valuelist_arr[$i]));
$fieldlist .= str_replace('\“','”',str_replace(“\'”,“’”,$fieldlist_arr[$i]));
if($i < (count($fieldlist_arr)-1)){
$valuelist .= “,”;
$fieldlist.= “,”;
}
}
Nota: si trabajas con datos en ingles es probable que la junte use apostrofes lo cual arruinaria el query, por eso hago el str_replace
Y listo $fieldlist y $valuelist son las cadenas para pasar al query de mysql como lista de campos y de valores.
Espero les sirva este pequeño aporte de codigo
Hola Manuelinux, Almita me comento sobre tu articulo y por casualidad vamos a realizar justo hoy tenemos que hacer un trozo de codigo que capture 100 preguntas, te aporto algunas ideas:
Para evitar que todas tus variables POST y GET te las escape el magic_quotes, puedes utilizar la funcion stripslashes(CADENA) para retirar las diagonales en vez de str_replace
Documentacion:
http://www.php.net/manual/es/function.stripslashes.php</P>
Pero</A>ahi algo que no entiendo, por que escapar las cadenas, no es más seguro dejarlo asi, si es que se va ir directo a una query SQL, algun desgraciado nos vaya hacer sql injection.
Gracias por la observacion, creo que el editor de mi blog malinterpreto el codigo, lo que hacemos es sustituir apostrofes por & rsquo ; ya que trabajamos con personas de estados Unidos que acostumbran utilizarlos, el apostrofe pordria interferir con la lista de valores si por ejemplo tenemos 'jonh's test' ademas trabajamos con aplicaciones internas y hasta ahora creemos que nadie de nuestros usuarios puede intentar hacernos una mala jugada pero claro que es importante tener en cuenta lo que dices.
Saludos y gracias por el comentario
Ahh ya entendi, entonces en ese caso te recomiendo usar htmlentities te convierte cualquier caracter a su entidad html, saludines.