Problema con regstros

  • Autor Autor Andresoso
  • Fecha de inicio Fecha de inicio
Andresoso

Andresoso

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola a todos!

tengo unos formularios de bastantes campos y mire la forma de que recibiera las entradas por metodo POST y pasarlos por arrays pero no logro que las registre en la base de datos con sprintf., lo que he hecho es solo deducción no se si estoy mal:

Lo que quiero hacer es pasar esto:
PHP:
$query  =  sprintf("INSERT INTO FORMULARIO (nombres, apellidos, numero) VALUES ('%s', '%s', '%s')", 'pedro', 'burgos', '300');

Usando esto:
PHP:
$numero2 = count($_POST);
$tags2 = array_keys($_POST);
$valores2 = array_values($_POST);
$valor=array();
$valores=array();
$ese=array();
for($i=0;$i<$numero2-1;$i++){ 
array_push($valor, " '".mysql_real_escape_string($valores2[$i])."'");
array_push($valores, $tags2[$i]);
array_push($ese, "'%s'");
}
$esex = implode(",", $ese);
$valorx = implode(",", $valor);
$valoresx= implode(",", $valores);
$query  =  sprintf("INSERT INTO FORMULARIO (".$valoresx.") VALUES (".$esex.")", $valorx);

Pero me pasa con los valores $valoresx y $esex (que genera cuantos '%S' requiere) pero no con $valorx en donde estan los registros 'pedro', 'burgos', '300'. Osea a mi me funciono solo asi:

PHP:
$query  =  sprintf("INSERT INTO FORMULARIO (".$valoresx.") VALUES (".$esex.")", , 'pedro', 'burgos', '300');
 
Una mejor solución

Hola Andresoso,

Lo ideal hoy en día es ya trabajar con framework cuando se trabaja con bases de datos, pero NADA como venir de aprender PHP puro, Hay una manera mas sencilla de lograr lo que estas intentando usando solo PHP puro sin nada de frameworks y sin la manera complicada por la que te estas dirigiendo.

Primero debes hacer que los campos del formulario te lleguen en un array dentro de una llave especifica eso lo logramos del lado de cliente de la siguiente manera:

HTML:
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Andresoso</title>
</head>
<body>

<form name="AndresosoForm" method="post" action="andresoso.php">
	<input type="text" name="AndresosoForm[field1]"> <br>
	<input type="text" name="AndresosoForm[field2]"> <br>
	<input type="text" name="AndresosoForm[field3]"> <br>
	<input type="text" name="AndresosoForm[field4]"> <br>
	<input type="text" name="AndresosoForm[field5]"> <br>

	<button type="submit">Submit</button>
</form>

</body>
</html>

Debes colocarle un nombre al formulario y a su vez cada campo debe tener en el nombre el siguiente patron AndresosoForm[fieldN], puedes sustituir AndresosoForm por lo que tu quieras siempre y cuando sea valido bajo los estándares de la W3C y teniendo en cuenta que el atributo "name" del formulario también debes cambiarlo por el mismo nombre.

Debes tener en cuenta de que para que todo nos resulte mas facil "fieldN" debe ser el mismo nombre que tienes para el campo en la base de datos.

Ahora, al hacer un formulario como en del ejemplo anterior, nos queda algo así:

example 1.webp

Y si hacemos submit y en el archivo php tenemos el siguiente código:

PHP:
<?php

var_dump($_POST);

Podremos ver que el array nos llega muy bien organizado listo para procesarlo en un foreach que construya la query:

example 2.webp

Ahora hagamos un foreach como este:

foreach.webp

el cual finalmente nos construirá la query:

example3.webp


No mas agregale validaciones dentro del foreach al momento de cargar los valores para que evites inyecciones SQL.


Cualquier otra cosa en la que pueda asesorarte, escríbeme.
 

Temas similares

Atrás
Arriba