Foros del Web » Programando para Internet » PHP »

Hacer update en bd con arreglo enviado desde formulario

Estas en el tema de Hacer update en bd con arreglo enviado desde formulario en el foro de PHP en Foros del Web. Hola, tengo un formulario que envia los datos de la siguiente forma Código PHP: < form method = "POST" >         < input type = "text"  name = ...
  #1 (permalink)  
Antiguo 24/09/2014, 09:50
 
Fecha de Ingreso: mayo-2004
Mensajes: 400
Antigüedad: 19 años, 11 meses
Puntos: 0
Hacer update en bd con arreglo enviado desde formulario

Hola, tengo un formulario que envia los datos de la siguiente forma

Código PHP:
<form method="POST">
        <
input type="text" name="cliente[]" />
        <
input type="text" name="cliente[]" />
        <
input type="password" name="cliente[]" />
        <
input type="submit" name="submit" />
    </
form>; 
y el archivo que lo recibe lo pasa a una variable data

Código PHP:
foreach ($_POST['proveedored'] as $val){
 
$data[] = sqlValue($val,'text');

este procedimiento lo utilizo para hacer los insert de la siguiente forma

Código PHP:
if(isset($_POST['cliente'])){
    foreach (
$_POST['cliente'] as $val){
 
$data[] = sqlValue($val,'text');
}
$imp  =  implode(",",$data);
 
mysql_query("INSERT INTO clientes VALUES ($imp)") or die ("Error: "mysql_error());  

coloque pocos campos del formulario para dar un ejemplo, pero en realidad el formulario es mas extenso, queria saber como puedo hacer lo mismo pero para el update.
Intente primero conseguir los nombres de los campos de la tabla de la siguiente forma

Código PHP:
$buscar mysql_query("SELECT * FROM clientes");
while(
$campos mysql_fetch_field($buscar)){
    
echo 
$campos->name;

lo que me devuelve id id_cliente nombre etc.

pero no se como unirlo con lo que se envia por el formulario que esta arriba para construir el array que tengo que usar en el update.
para que quede asi id=55,nombre=pepe etc

Espero se entienda.
  #2 (permalink)  
Antiguo 24/09/2014, 12:41
 
Fecha de Ingreso: septiembre-2012
Mensajes: 53
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: Hacer update en bd con arreglo enviado desde formulario

ps... nunca habia tenido necesidad de mostrar el campo y el valor, pero lo primero que se me ocurre es hacer un nuevo array con el nombre del campo y el valor de la siguiente forma.

Código PHP:
Ver original
  1. $buscar = mysql_query("SELECT * FROM clientes");
  2. while($campos = mysql_fetch_field($buscar)){
  3. $data[] = array(
  4. 'id' => 'id='.$campos['id'],
  5. 'nombre' => 'nombre="'.$campos['nombre'].'"',
  6. );
  7. }
  8. $imp  =  implode(",",$data);
  9. // creo que eso te podria funcionar u.u
  #3 (permalink)  
Antiguo 24/09/2014, 12:49
 
Fecha de Ingreso: mayo-2004
Mensajes: 400
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: Hacer update en bd con arreglo enviado desde formulario

Hola, gracias por responder gajosu, en realidad no quiero mostrar los resultados de la tabla, lo que quiero es hacer un update, en el ejemplo lo que decia era que tengo un formulario que envia los datos como un arreglo, y al momento de hacer el update en la tabla no se como insertar los datos. Lo de mostrar los nombres de los campos era algo que se me ocurrio para ver si se podia unir al arreglo que envio con el formulario.
En el post puse un ejemplo de como uso el formulario y como recibo los datos para hacer un insert, pero no se como hacer lo mismo con el update.
  #4 (permalink)  
Antiguo 24/09/2014, 15:19
 
Fecha de Ingreso: septiembre-2012
Mensajes: 53
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: Hacer update en bd con arreglo enviado desde formulario

No se que es lo que quieres actualizar, muestra la consulta UPDATE que quieres hacer
porque la verdad no te haces entender bien
  #5 (permalink)  
Antiguo 24/09/2014, 15:39
 
Fecha de Ingreso: mayo-2004
Mensajes: 400
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: Hacer update en bd con arreglo enviado desde formulario

Lo puse en el primer post tengo un formulario que envia datos en un arreglo asi

Código PHP:
<form method="POST" action="editar.php">
        <
input type="text" name="cliente[]" />
        <
input type="text" name="cliente[]" />
        <
input type="password" name="cliente[]" />
        <
input type="submit" name="submit" />
    </
form>; 
en el archivo editar recibo por post de esta forma para los insert

Código PHP:
if(isset($_POST['cliente'])){
    foreach (
$_POST['cliente'] as $val){
 
$data[] = sqlValue($val,'text');
}
$imp  =  implode(",",$data);
 
mysql_query("INSERT INTO clientes VALUES ($imp)") or die ("Error: "mysql_error());  
 
header("Location:clientes.php");

Mi pregunta es como tengo que hacer en lugar del insert el update para que coja el arreglo cliente[] y actualice solo ese usuario. Uso arreglos en los formularios porque mis formularios tienen mas de 20 campos.
En otras palabras quiero saber como hacer la actualización sin tener que escribir cada nombre de campo. El formulario que puse es solo un ejemplo para no poner uno tan grande como el que uso.

Como seria esto?
Código PHP:
if(isset($_POST['cliente'])){
    foreach (
$_POST['cliente'] as $val){
 
$data[] = sqlValue($val,'text');
}
$imp  =  implode(",",$data);
mysql_query("UPDATE clientes SET $imp where id_client='$id'") or die ("Error: "mysql_error());   
 
header("Location:clientes.php");

Se que esta mal el ejemplo del uodate por eso pregunto como puedo hacerlo, o agregarle el nombre de los campos para que lo hago solo sin ponerlos uno por uno.

Última edición por pakillo; 24/09/2014 a las 15:47
  #6 (permalink)  
Antiguo 24/09/2014, 16:13
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Hacer update en bd con arreglo enviado desde formulario

Pues primero deberías entender la sintaxis de un UPDATE regular:
Cita:
UPDATE tabla SET campo = 'valor', otro_campo = 'otro valor' WHERE id = 1
Entonces, deberías crear un array con valores que al momento de hacer join() te devuelve dicho formato:
Código PHP:
Ver original
  1. $foo = array(
  2.   'a' => 'b',
  3.   'x' => 'y',
  4. );
  5.  
  6. $bar = array();
  7.  
  8. foreach ($foo as $k => $v) {
  9.   $bar []= "$k = '$v'";
  10. }
  11.  
  12. echo join(', ', $bar); // a = 'b', x = 'y'

¿Se entiende?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 24/09/2014, 16:30
 
Fecha de Ingreso: mayo-2004
Mensajes: 400
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: Hacer update en bd con arreglo enviado desde formulario

Si entiendo, ese es el problema que no se por donde empezar, probe varias formas de arreglos buscando por internet sobre el tema, y no consegui crear el formato que se necesita

campo1='valor1'
campo2='valor2'

por eso preguntaba al principio si al consultar los campos de la tabla se puede unir al array data[] y si es asi como podria hacerlo.
O sea hacer la consulta de los campos

Código PHP:
$buscar mysql_query("SELECT * FROM clientes");
while(
$campos mysql_fetch_field($buscar)){
    
echo 
$campos->name;

asi o de otra forma para que me devuelva campo1, campo2, campo3....

y unirlo a data[] que contiene los valores del formulario valor1, valor2, valor3....

unirlo para que sea
campo1='valor1'
campo2='valor2'

etc
  #8 (permalink)  
Antiguo 24/09/2014, 17:08
 
Fecha de Ingreso: septiembre-2012
Mensajes: 53
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: Hacer update en bd con arreglo enviado desde formulario

pateketrueke ya te dio la solucion esta muy clara

Código PHP:
Ver original
  1. $buscar = mysql_query("SELECT * FROM clientes");
  2.  $campos = mysql_fetch_field($buscar);  
  3.  $data = array();
  4.     foreach ($campos as $k => $v) {
  5.       $data []= "$k = '$v'";
  6.     }
  7.      
  8.     echo join(', ', $data); // a = 'b', x = 'y'

Prueba, te deberian de salir los datos que necesitas
  #9 (permalink)  
Antiguo 24/09/2014, 17:21
 
Fecha de Ingreso: mayo-2004
Mensajes: 400
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: Hacer update en bd con arreglo enviado desde formulario

ok creo que sigo sin explicarme bien, intente lo que me dejaste pero no me da el nombre de los campos si no los detalles de la tabla.

Cita:
name = 'id_cliente', table = 'clientes', def = '', max_length = '13', not_null = '1', primary_key = '1', multiple_key = '0', unique_key = '0', numeric = '0', blob = '0', type = 'string', unsigned = '0', zerofill = '0'
deberia de salir algo asi

id_cliente = '234', nombre = 'pepe', telefono ='3422' etc

a parte segun lo que entiendo eso me daria el nombre del campo mas el valor del campo, yo lo que deseo hacer es, si el nombre del campo hasta ahi bien, "pero unirlo con los nuevos datos del formulario que envio en el array $data[]" lo que haria esto seria darme el nombre del campo mas el valor que viene de la misma tabla y no desde el formulario no?

igual es una solucion que busco pensando que se puede hacer asi, pero no tiene que ser necesariamente asi, puede haber otra alternativa para hacer el update tengo un arreglo en este caso cliente[] que proviene del formulario y me devulve lo siguiente

2323123,pepe,445 etc solo quiero hacer la actualizacion en la tabla por ese numero de usuario sin tener quen escribir todos los campos id_usuario='2323123',nombre='pepe',telefono='445' etc etc

lo siento no quiero ser pesado

Última edición por pakillo; 24/09/2014 a las 17:29
  #10 (permalink)  
Antiguo 24/09/2014, 18:34
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Hacer update en bd con arreglo enviado desde formulario

El tema, es que dicho array ya debe venir así, y si es a través de un formulario así:
Código HTML:
Ver original
  1. <input name="campos[columna_1]" value="x">
  2. <input name="campos[columna_n]" value="y">
  3. <input name="campos[otra_columna]" value="z">

Entonces, ya tienes en $_REQUEST['campos'] un array clave/valor con el cual debes armar el UPDATE.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 24/09/2014, 21:14
 
Fecha de Ingreso: mayo-2004
Mensajes: 400
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: Hacer update en bd con arreglo enviado desde formulario

Gracias por la respuesta, utilice el ejemplo que me diste antes para intentar darle el formato y casi lo logre

Código PHP:
$bar = array();
 
foreach (
$_REQUEST['campos'] as $k => $v) {
  
$bar []= "$k = '$v'";
}
 
echo 
join(', '$bar); // a = 'b', x = 'y' 
el unico detalle es que al final del array me sale tambien

observaciones_p = 'estas las observaciones'$campos='Array';

$campos='Array'; esto estaría de más como puedo quitarlo? lo demas si lo muestra bien el nombre_campo='valor'

ya nada ya lo quite, ahora voy a probar si me sale el update

Ya lo resolvi, muchas gracias, no era exactamente lo que queria pero me vale asi jejeje, gracias!!

Última edición por pakillo; 24/09/2014 a las 22:41
  #12 (permalink)  
Antiguo 24/09/2014, 22:50
 
Fecha de Ingreso: mayo-2004
Mensajes: 400
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: Hacer update en bd con arreglo enviado desde formulario

Ah me olvidaba, una ultima pregunta, como puedo escapar el arreglo antes de hacer el update?

Etiquetas: arreglo, bd, enviado, formulario, mysql, select, sql, tabla, update, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:43.