Foros del Web » Programando para Internet » PHP »

MOdificar varios ID a la vez

Estas en el tema de MOdificar varios ID a la vez en el foro de PHP en Foros del Web. Hola que tal, miren, tengo un script re porqueria que lo que hace es mostrar 2 tipos de datos: "horario" y "titulo". Bueno, lo que ...
  #1 (permalink)  
Antiguo 02/02/2008, 14:06
 
Fecha de Ingreso: diciembre-2006
Mensajes: 294
Antigüedad: 17 años, 4 meses
Puntos: 2
MOdificar varios ID a la vez

Hola que tal, miren, tengo un script re porqueria que lo que hace es mostrar 2 tipos de datos: "horario" y "titulo". Bueno, lo que si hay varios ID cuando se leen.

Este es el script:

Código PHP:
<? 
if (isset($_SESSION['admin'])) {
include(
"../config.php");

if(isset(
$_POST['modificar'])){

$horario $_POST['horario'];
$titulo $_POST['titulo'];

$sql "UPDATE programas set horario='$horario', titulo='$titulo'";
$res mysql_query($sql) or die("Error: ".mysql_error());
echo 
'<h2>Se han guardado los cambios introducidos.</h2>';

}
?>
<table width="100%" border="0" cellspacing="0" cellpadding="5">
  <tr>
    <td><form action="index.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
<?  $con mysql_query("SELECT * FROM programas ORDER BY id DESC") or die("Error: ".mysql_error());
if(
mysql_num_rows($con) == NULL) {
echo 
'No existe ninguna programacion.';
}else{
echo 
'<table width="100" border="0" align="center" cellpadding="0" cellspacing="5">
        '
;
while(
$datos mysql_fetch_array($con)) {
echo 
'<tr><td width="1"><input name="horario" type="text" class="file" size="10" maxlength="10" value="'.$datos[horario].'"></td>
<td width="99"><input name="titulo" type="text" class="file" size="70" value="'
.$datos[titulo].'"></td></tr>';
}
echo 
'
      </table><br><div align="center"><input type="submit" name="modificar" value="Guardar cambios" class="boton"></div>'
;
}
?>
    </form></td>
  </tr>
</table>
<br><a href="agregar.php">Agregar un programa</a>
<?
}else{
echo 
'Tu no estas autentificado. No puedes entrar aqui!!<br><br><a href="index.php">Volver</a>';
}
?>
El tema es que le pongo, por ejemplo ahora muestra 2 programas diferentes. Le pongo al primero "ejemplo1" y al segundo "ejemplo2" y me modifica, pero en los dos aparece el ultimo, que seria "ejemplo2"

Como hago??
  #2 (permalink)  
Antiguo 02/02/2008, 14:10
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Re: MOdificar varios ID a la vez

Movido al foro de PHP desde JavaScript.

Saludos,
  #3 (permalink)  
Antiguo 02/02/2008, 16:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: MOdificar varios ID a la vez

Tu problema es que en tu Query te falta la parte del WHERE para que te modifique solo el registro que quieres modificar, para esto tienes que ciclar por cada elemento que te envien y asi modificarlo.

Saludos.
  #4 (permalink)  
Antiguo 03/02/2008, 08:39
 
Fecha de Ingreso: diciembre-2006
Mensajes: 294
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: MOdificar varios ID a la vez

Ajá... digamos que solo puedo modificar 1 registro a la vez... No??
  #5 (permalink)  
Antiguo 03/02/2008, 08:44
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: MOdificar varios ID a la vez

MySQL cuenta con el operador IN().

Date una vuelta por:

http://mysql.conclase.net/curso/inde...OPE_OPERADORIN
http://www.desarrolloweb.com/faq/531.php

Podrías hacer algo como:

Código PHP:
//Actualizará los ids 1, 4 y 6
$sql "UPDATE programas set horario='$horario', titulo='$titulo' WHERE id IN(1,4,6)"
Un saludo,
  #6 (permalink)  
Antiguo 03/02/2008, 12:59
 
Fecha de Ingreso: diciembre-2006
Mensajes: 294
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: MOdificar varios ID a la vez

Ajá... entendí... Pero mira, usé asi a IN:

Código PHP:
include("../config.php");

$conectar mysql_query("SELECT * FROM radio_progra") or die("Error: ".mysql_error());

$cada_id mysql_fetch_array($conectar);
$total_id mysql_num_rows($conectar);

if(isset(
$_POST['modificar'])){

$horario $_POST['horario'];
$titulo $_POST['titulo'];

for (
$i $id$i <= $total_id$i++) {

$f_in "$i,";

$sql "UPDATE radio_progra set horario='$horario', titulo='$titulo' WHERE id IN($f_in)";
$res mysql_query($sql) or die("Error: ".mysql_error());
echo 
'<h2>Se han guardado los cambios introducidos.</h2>';
}

Digamos que en IN quiero mostrar todas las ID que tengo, como para cuando le ponga el boton "guardar" me modifique todo.
  #7 (permalink)  
Antiguo 03/02/2008, 14:55
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: MOdificar varios ID a la vez

Código PHP:
$ids_a_modificar = array(1,2,5,7);
$in implode(','$ids_a_modificar);
 
$sql "UPDATE radio_progra set horario='$horario', titulo='$titulo' WHERE id IN($in)"
Quieres modificar todos los registros de tu tabla? En ese caso, no es necesario que pongas una claúsula WHERE.

Un saludo,
  #8 (permalink)  
Antiguo 03/02/2008, 15:38
 
Fecha de Ingreso: diciembre-2006
Mensajes: 294
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: MOdificar varios ID a la vez

Si pero introduzco en el form diferentes palabras y me modifica todo por igual segun el ultimo form...

Mira...





Este es el codigo:

Código PHP:
include("../config.php");

if (isset($_POST['modificar'])) {

$horario = $_POST['horario'];
$titulo = $_POST['titulo'];

$ids_a_modificar = array(1,2);
$in = implode(',', $ids_a_modificar);
 
$sql = "UPDATE radio_progra set horario='$horario', titulo='$titulo' WHERE id IN($in)"; 
$res = mysql_query($sql) or die("Error: ".mysql_error());
echo '<h2>Se han guardado los cambios introducidos.</h2>';
}
?>
<table width="100%" border="0" cellspacing="0" cellpadding="5">
  <tr>
    <td><form action="index.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
<?  $con mysql_query("SELECT * FROM radio_progra ORDER BY id DESC") or die("Error: ".mysql_error());
if(
mysql_num_rows($con) == NULL) {
echo 
'No existe ninguna programacion.';
}else{
echo 
'<table width="100" border="0" align="center" cellpadding="0" cellspacing="5">
        '
;
while(
$datos mysql_fetch_array($con)) {
echo 
'<tr><td width="1"><input name="horario" type="text" class="file" size="10" maxlength="10" value="'.$datos[horario].'"></td>
<td width="99"><input name="titulo" type="text" class="file" size="70" value="'
.$datos[titulo].'"></td></tr>';
}
echo 
'
      </table><br><div align="center"><input type="submit" name="modificar" value="Guardar cambios" class="boton"></div>'
;
}
?>
    </form></td>
  </tr>
</table>
  #9 (permalink)  
Antiguo 03/02/2008, 20:09
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: MOdificar varios ID a la vez

Ajá eso es, se guarda así porque todos tus campos tienen los mismos nombres, es decir, no haces diferencias entre cada registro. Utiliza el id en los nombres. Tendrás que ejecutar un ciclo con una consulta para cada registro, pues no puedes actualizarlos todos al mismo tiempo con datos diferentes. Haz algo así:

Código PHP:
# En la parte del while
while($datos mysql_fetch_array($con)) { 
    echo 
'<tr><td width="1"><input name="horario['.$datos['id'].']" type="text" class="file" size="10" maxlength="10" value="'.$datos['horario'].'"></td> 
<td width="99"><input name="titulo['
.$datos['id'].']" type="text" class="file" size="70" value="'.$datos['titulo'].'"></td></tr>'

Y para ejecutar las consultas

Código PHP:
 
// En vez de
# $horario = $_POST['horario']; 
# $titulo = $_POST['titulo']; 

# $ids_a_modificar = array(1,2); 
# $in = implode(',', $ids_a_modificar); 

# $sql = "UPDATE radio_progra set horario='$horario', titulo='$titulo' WHERE id IN($in)"; 
# $res = mysql_query($sql) or die("Error: ".mysql_error()); 
 
$sql "UPDATE radio_progra set horario='%1\$s', titulo='%2\$s' WHERE id = %3\$s"
 
$horarios $_POST['horario'];
$titulos $_POST['titulo'];
 
foreach(
$titulos as $i=>$t) {
    
mysql_query(sprintf($sql$horarios[$i], $t$i)) or die(mysql_error());

Supongo que así va a funcionar

Un saludo,
  #10 (permalink)  
Antiguo 04/02/2008, 06:56
 
Fecha de Ingreso: diciembre-2006
Mensajes: 294
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: MOdificar varios ID a la vez

Ahhh!!! tenes razon, no identifico ninguna ID... ademas no sabia lo que vos hiciste, muchisimas gracias sos un kpo!!!!!!!!!!!!!!!!!!!!
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 23:46.