Foros del Web » Programando para Internet » PHP »

¿Como hacer un update en bd si los valores se toman de un arreglo?

Estas en el tema de ¿Como hacer un update en bd si los valores se toman de un arreglo? en el foro de PHP en Foros del Web. Vamos a ver si me explico mejor, tengo el siguiente codigo para agregar la informacion de un formulario en la base de datos Código PHP: ...
  #1 (permalink)  
Antiguo 14/11/2011, 10:29
 
Fecha de Ingreso: mayo-2004
Mensajes: 400
Antigüedad: 19 años, 11 meses
Puntos: 0
¿Como hacer un update en bd si los valores se toman de un arreglo?

Vamos a ver si me explico mejor, tengo el siguiente codigo para agregar la informacion de un formulario en la base de datos

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");

utilizando el mismo principio queria saber si se puede hacer lo mismo para el update

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

se que asi tal cual lo puse no funciona por la sintaxis del update, pero como podria hacerlo? ¿alguna sugerencia?

Saludos
  #2 (permalink)  
Antiguo 14/11/2011, 11:25
 
Fecha de Ingreso: octubre-2011
Mensajes: 37
Antigüedad: 12 años, 6 meses
Puntos: 9
Respuesta: ¿Como hacer un update en bd si los valores se toman de un arreglo?

quizas te sirva:

Código PHP:
<?php

//suponiendo que recibes algo asi
$data = array(
    
'nombre' => 'mario',
    
'apellido' => 'lopez',
    
'edad' => 23
);

//podrias generar la consulta de esta manera
$query "UPDATE clientes SET ";

foreach(
$data as $key => $value) {
    if(
is_string($value))
        
$value "'$value'";
    
$query .= $key '=' $value ',';
}

$query rtrim($query',');

echo 
$query
  #3 (permalink)  
Antiguo 14/11/2011, 12:55
 
Fecha de Ingreso: mayo-2004
Mensajes: 400
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: ¿Como hacer un update en bd si los valores se toman de un arreglo?

umm bueno no estoy muy buesto con los array, pero yo lo recibo de un formulario donde es el valor clientes[] y me devuelve pepe1,pepe2,pepe3 etc, cuando lo paso por el implode, estaba buscando alternativas, ya que tengo que agregarle el nombre del campo de la base de datos para que lo ingrese, en tu ejemplo0 seria por ejemplo asi

Código PHP:
$data = array(
    
'campo1' => 'mario',
    
'campo2' => 'lopez',
    
'campo3' => 23
); 
Buscando alternativas, encontre que puedo recuperar los nombres de la tabla asi
Código PHP:
$query_columnas=mysql_query('SHOW COLUMNS FROM clientes'); 
    while(
$row_columnas=mysql_fetch_assoc($query_columnas)){ 
    
$field[] = $row_columnas['Field'];

Con esto obtengo campo1,campo2,campo3, etc

Mi pregunta es, podria utilizar esa informacion para crear el array asociativo del nombre de campo con el valor del array del formulario? para dejarlo igual que en tu ejemplo y poder utilizarlo


Código PHP:
$data = array(
    
'campo1' => 'mario',
    
'campo2' => 'lopez',
    
'campo3' => 23
); 

espero me entiendas, o me estoy complicando mucho?

Saludos
  #4 (permalink)  
Antiguo 17/11/2011, 20:22
 
Fecha de Ingreso: octubre-2011
Mensajes: 37
Antigüedad: 12 años, 6 meses
Puntos: 9
Respuesta: ¿Como hacer un update en bd si los valores se toman de un arreglo?

se supone que el array $data realmente es el array $_POST, porque los datos los recibes de un formulario, yo le he llamado $data para que tu sigas en el contexto, para que te hagas una idea:

Código PHP:
/*

tengo esta tabla en mi bd
table user {
   id,
   name,
   email,
   password
}

*/


if(!isset($_POST['submit'])) {
//si no hay submit, enseño el formulario
    
echo '
    <form method="POST">
        formulario login
        <input type="text" name="email" />
        <input type="password" name="password" />
        <input type="submit" name="submit" />
    </form>'
;
}
else {
    
//si he recibido el form, monto la consulta y la ejecuto
    
$query "UPDATE clientes SET ";

    foreach(
$_POST as $key => $value) {
    if(
is_string($value))
        
$value "'$value'";

    if(
$key !== 'submit')
        
$query .= $key '=' $value ',';
    }

    
$query rtrim($query',');

    echo 
$query;
    
//aqui hago un echo para que veas en tu pantalla el resultado que buscas
    //deberias ejecutar algo parecido a mysql_query para ejecutar la consulta

como veras el nombre de los campos del form coinciden con el nombre de los campos de la tabla, esto no es estrictamente necesario, pero manteniendo este orden te enteraras mas de lo que estas escribiendo, es decir, es una buena practica de programacion

Última edición por loluchis; 17/11/2011 a las 20:30
  #5 (permalink)  
Antiguo 23/11/2011, 10:50
 
Fecha de Ingreso: mayo-2004
Mensajes: 400
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: ¿Como hacer un update en bd si los valores se toman de un arreglo?

Gracias loluchis lo voy a probar, no conteste antes porque estaba liado con otras cosas, ahora mismo lo pruebo :).

Ya lo probe funciona pero, me encuentro con el mismo problema, yo el formulario lo uso asi:

Código:
<form method="POST">
        formulario login
        <input type="text" name="data[]" />
        <input type="password" name="data[]" />
        <input type="submit" name="submit" />
    </form>';
Porque el formulario no va a tener siempre los mismos campos, el usuario va a poder cambiarlos, entonces para no tener que tocar el codigo para cambiar los nombres, lo meto en una variable, para ingresar datos de esa forma no he tenido problemas, pero si quiero hacer un update me da error porque no coinciden los nombres de campos de la tabla con los que hay en el array ya que no les pongo nombre es por indice, entonces lo que pense como alternatica era talvez, hacer una consulta para obtener los nombres de los campos de la tabla y juntarlo con el array del post, no se si me explico bien

por ejemplo, la tabla tiene:

campo1 campo2 campo3

y data[] tiene:
[0] => valor1
[1] => valor2
[2] => valor3

juntarlos y que sea

[campo1] => valor1
[campo2] => valor2
[campo3] => valor3

para poder hacer el set en el forech como lo tienes, como digo, en el fomulario yo envio los datos en array pero como indice data[]. Lo quiero hacer asi por lo que comente que los campos de la tabla no van a ser fijos.

Saludos

Saludos

Última edición por pakillo; 23/11/2011 a las 11:28

Etiquetas: bd, formulario, mysql, sql, update
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 22:26.