PHP - grabar en tabla

   
Vista:
Imágen de perfil de siREZ

grabar en tabla

Publicado por siREZ (201 intervenciones) el 05/11/2013 21:55:14
Cordial saludo

deseo recoger los datos de un formulario y grabarlos en una tabla mysql

el codigo es el siguiente:

foreach ($_POST as $sNombre => $sValor)
$sCuerpo = $sCuerpo."&".$sNombre."=".$sValor; //coloco separadores & y =
$sCuerpo = substr($sCuerpo,1); //quito el primer &

//inicializo estas variables..................
$px1 = "";
$px2 = "'$";

$numero=substr_count($sCuerpo,"&");

for ($p = 1; $p <= $numero; $p++) {
$p1 = strpos($sCuerpo,"&");
$x = substr($sCuerpo,0,$p1);
$p2 = strpos($x,"=");
$px1 = $px1.substr($x,0,$p2).",";
$px2 = $px2.substr($x,0,$p2)."','$";
$val = substr($x,$p2+1);
$t=substr($x,0,$p2);
$$t = $val;

$sCuerpo = substr($sCuerpo,$p1+1);

}


$rt=strlen($px);
$px1 = substr($px1,0,$rt-1); //quito caracteres que me sobran
$rt=strlen($px2);
$px2 = substr($px2,0,$rt-3);//quito caracteres que me sobran



include "../Connections/myconexion.php";
mysql_connect ($hostname_myconexion, $username_myconexion, $password_myconexion);
mysql_select_db($database_myconexion) or die("No se puede seleccionar la base de datos.......... ");
@$pfw_ip= $_SERVER['REMOTE_ADDR'];


$sQuest = "INSERT INTO usuarios ($px1) values ($px2)";


if(!mysql_query($sQuest))
echo "<br><br><br><br>No pude ingresar....<br>";
else echo "<br><br><br><br>Listo<br><br><br>";


?>

Valor de $px1: codigo,nombre,apellidos,especialidad,email,celular,telefono,direccion,ciudad

Valor de $px2: '$codigo','$nombre','$apellidos','$especialidad','$email','$celular','$telefono','$direccion','$ciudad'


colocando: $sQuest = "INSERT INTO usuarios ($px1) values ($px2)";
me graba "$codigo" en el campo codigo..."$nombre" en el campo nombre y asi sucesivamente. Necesito que me grabe el valor

y colocando:

colocando: $sQuest = "INSERT INTO usuarios ($px1) values ('$px2')";

me marca error y no graba.


Que debo modificar?


gracias
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

grabar en tabla

Publicado por Mari Carmen (145 intervenciones) el 06/11/2013 01:12:28
Yo te diría que acotases las variables POST de entrada a solo lo que esperas del formulario.un ejemplo podria ser algo como esto:
1
2
3
4
5
6
7
8
9
10
$campos=array("codigo","nombre","apellidos","especialidad","email","celular","telefono","direccion","ciudad");
foreach($campos as $campo)
{
    if(isset($_POST[$campo]) && !empty($_POST[$campo])){
        $variables[$campo]=$_POST[$campo]);
    }
}
if(count($campos)!=count($variables)){
    die("Error: Faltan variables pordeclarar");
}

Asi si te fijas sabemos que variables necesitamos y podemos decir a ciencia cierta comparando el tamaño de las matrices si tenemos todos los valores que necesitamos.


Para poner los & solo necesitarías un implode(), con el ejemplo mio anterior puedes hacer esto:
1
$str_variables=implode("&",$variables);

o como lo tienes tu:

1
2
3
4
5
$str_variables="";
foreach($variables as $campo => $variable){
    $str_variables[]="$campo=$variable";
}
$str_variable=implode("&",$str_variables);

Ire agregando más cosas, pero con eso te simplificará bastante el código.

Edit1: Te recomiendo que uses la biblioteca mysqli, y extender la clase para hacer tu código mucho mas sencillo de entender. Te pondré algún ejemplo.
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

grabar en tabla

Publicado por Mari Carmen (145 intervenciones) el 06/11/2013 01:31:01
Me equivoque en el último código sería asi:
1
2
3
4
5
$str_variables=array();
foreach($variables as $campo => $variable){
    $str_variables[]="$campo=$variable";
}
$str_variable=implode("&",$str_variables);

La verdad es que podrías explicar un poco el código por que es bastante enrevesado con tantas variables raras....

Edit2: Todo el código que tienes arriba sin entrar en lo de la BBDD se puede resumir en esto:
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
$campos = array(
    "codigo",
    "nombre",
    "apellidos",
    "especialidad",
    "email",
    "celular",
    "telefono",
    "direccion",
    "ciudad"
);
 
foreach($campos as $campo)
{
    if (isset($_POST[$campo]) && !empty($_POST[$campo]))
    {
        $variables[$campo] = $_POST[$campo]);
    }
}
 
if (count($campos) != count($variables))
{
    die("Error: Faltan variables pordeclarar");
}
 
 
$px1=implode(",",$campos);
$px2=implode("','",$variables);
$px2="'$px2'";
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 Roberto

grabar en tabla

Publicado por Roberto (201 intervenciones) el 06/11/2013 02:16:13
Gracias por responderme Mari Carmen

mi objetivo es poder crear una funcion o una claseo un scrips que recoja todas las variables de un formulario (tenga los campos que tenga) e insertarlos en una tabla.

las variables del formulario llevarían el mismo nombre del campo de la tabla.

lo hago una por una con un $_POST y luego realizo el insert, pero esto es largo, tedioso y propenso a errores.
=======================================================
lo que estoy tratando de implementar lo hago así:

con:

foreach ($_POST as $sNombre => $sValor)
$sCuerpo = $sCuerpo."&".$sNombre."=".$sValor;
$sCuerpo = substr($sCuerpo,1);
echo $sCuerpo."<br><br>";

obtengo:

codigo=73255020&nombre=Gustavo&apellidos=Perez Martinez&especialidad=ENDOCRINOLOGIA&email=sirez2@hotmail.com&celular=3207688921&telefono=2302170&direccion=Calle 44B # 70-61&ciudad=Antioquia - Medellin&button=Enviar Solicitud de Registro

coloco el simbolo & para separar cada variable y valor. Esto lo hago con el if

modifico los datos hasta obtener:

Valor de

$px1: codigo,nombre,apellidos,especialidad,email,celular,telefono,direccion,ciudad

Valor de

$px2: '$codigo', '$nombre', '$apellidos', '$especialidad', '$email', '$celular', '$telefono', '$direccion', '$ciudad'

si yo saco los $_POST uno por uno podría insertarlos así:

$sQuest = "INSERT INTO usuarios (codigo,nombre,apellidos,especialidad,email,celular,telefono,direccion,ciudad ) values ('$codigo', '$nombre', '$apellidos', '$especialidad', '$email', '$celular', '$telefono', '$direccion', '$ciudad') ";

lo que deseo es:

$sQuest = "INSERT INTO usuarios ($px1) values ($px2') ";

Me entiendes ahora?
===========================================

así: si tengo un formulario con 100, 200, etc campos, sería muy comodo insertalos en la tabla.

Cada que quisiera almacenar algo, lo haria de esta manera sin importar el numero de campos.

mi procedimiento, aunque de codigo sucio o raro me ahorraría mucho trabajo.
=========================================
creo que está fallando es aqui:

$sQuest = "INSERT INTO usuarios ($px1) values ($px2') ";
=============================================

otra cosa:
al solicitar:

echo "<br> codigo: $codigo";
echo "<br> nombre: $nombre";

me imprime:

codigo: 73255020
nombre: Gustavo

aquí puedo ver que si me adjudica el valor a cada una de las variables, pero como lo llevo al insert?

esto: $sQuest = "INSERT INTO usuarios ($px1) values ($px2') "; no me está funcionando
=============================================================

voy a analizar tu respuesta - primero debo entenderla, porque hay instrucciones que no conozco.

gracias


siREZ
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

grabar en tabla

Publicado por Mari Carmen (145 intervenciones) el 06/11/2013 03:03:13
De alguna forma la tabla tiene que tener el nombre de las columnas, aun que sean 200 columnas deben tener nombre y eso es lo que tendrías que poner en un array para verificar que no hay otras que no existan en tu tabla y que además las que si que están, estén bien definidas.

Si yo como persona que entre en tu web o sitio y me dedico a hacer todo tipo de peticiones POST con variables que no tienes en la BBDD te dará error. Es mas te puedo hacer fácilmente un SQL Inyection y borrarte toda la BBDD :P .

No se si entendiste mi punto de vista.

Si tienes todos las columnas de la BBDD para hacer la comprobación solo necesitas hacer esto:
1
2
$todas_columnas=array("col1","col2","col3");
$variables=array_intersect_key( $_POST, array_flip( $todas_columnas ))
Luego debes detectar si las variables están vacías con empty();
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 Roberto

grabar en tabla

Publicado por Roberto (201 intervenciones) el 06/11/2013 06:08:53
gracias Mari Carmen

siREZ
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