Foros del Web » Programando para Internet » PHP »

Como distinguir los Selects

Estas en el tema de Como distinguir los Selects en el foro de PHP en Foros del Web. Hola Tengo un problemita con los select, hago un listado de las reservaciones que hay en la base de datos y por cada una de ...
  #1 (permalink)  
Antiguo 12/07/2006, 12:21
 
Fecha de Ingreso: septiembre-2005
Mensajes: 141
Antigüedad: 18 años, 7 meses
Puntos: 0
Pregunta Como distinguir los Selects

Hola

Tengo un problemita con los select, hago un listado de las reservaciones que hay en la base de datos y por cada una de ellas se crea un select que contiene los 3 estados que puede tener la reservación: activa, cancelada o terminada.

La idea es que cuando se cambie el select se actualice esa reservacion en la base de datos, para esto, obvio, necesito el identificador de la reservación, lo que hice fue en el value del select concatenarle el id de la reservación pero se queda con el ultimo valor, entonces cambie la reservación que cambie la que se actualiza es la ultima que se imprimio.

No sé si me explique, de cualquier modo les pego el codigo
Código PHP:
<?php
if($_POST){
      
$stado=$_POST['estado'];
      list( 
$state$id ) = split'_'$stado );
      echo 
$state." ".$id;
      
mysql_select_db($database_PAGINA$PAGINA);
      
mysql_query("UPDATE cancha SET Status='$state' WHERE NoReserv='$id'");
}

$fecha=date("Y-m-d"); //Obtenemos la fecha actual para comparar con la de la base de datos

  
$tenis"SELECT * FROM cancha WHERE Fecha>='$fecha' ORDER BY Fecha ";
  
$result=mysql_query($tenis,$PAGINA); 
 
   if(
mysql_num_rows($result) > 0){ //Si tiene reservaci&oacute;n en las canchas
       
$cancha=mysql_fetch_array($result);
            do{
           echo 
'<tr>'//Fila 1
           
echo '<td width="60" class="Estilo7"><div align="center">'.$cancha['NoSocio'].'</div></td>';// Columna 1
           
echo '<td width="173" class="Estilo7"><div align="center">'.$cancha['Nombre'].'</div></td>';// Columna 2
           
echo '<td width="90" class="Estilo7"><div align="center">'.$cancha['NoCancha'].'</div></td>'//Columna 3
           
echo '<td width="113" class="Estilo7"><div align="center">'.substr($cancha['Hora'], 0,-3).'</div></td>'//Columna 4
           
echo '<td width="157" class="Estilo7"><div align="center">'.obtener_fecha($cancha['Fecha']).'</div></td>'//Columna 5
           
echo '<td width="132"><div align="center">
           <select name="estado" id="estado" onChange="this.form.submit()">'
;
            echo
'<option value="'."activa_".$cancha['NoReserv'].'"'; if ($cancha['Status']=='activa') echo "selected"; echo'>activa</option>';
            echo
'<option value="'."cancelada_".$cancha['NoReserv'].'"'; if ($cancha['Status']=='cancelada') echo "selected"; echo'>cancelada</option>';
            echo
'<option value="'."terminada_".$cancha['NoReserv'].'"'; if ($cancha['Status']=='terminada') echo "selected"; echo'>terminada</option>';
          echo
'</select></div></td>'//Columna 6
           
echo '</tr>';
        }while(
$cancha mysql_fetch_array($result)); 
        
    }
//fin if mysql_num_rows
    
?>
  </table>
</form>
Gracias
__________________
:ojotes: A n I t A :ojotes:
  #2 (permalink)  
Antiguo 12/07/2006, 12:36
 
Fecha de Ingreso: diciembre-2003
Mensajes: 213
Antigüedad: 20 años, 4 meses
Puntos: 0
Asociar id al select

Hola Ana.

El problema reside en que todos los select se llaman igual, por lo tanto al enviar el formulario solo te toma en cuenta el ultimo select declarado.

Como solución te propongo no concatenar el id de la "reservacion" a los valores de als opciones si no al nombre del select
<select name=estado_id1>....</select>
<select name=estado_id2>....</select>

Asi cuando recibas los datos del formulario tandras el array $_POST formado asi:
$_POST["estado_id1"] ---> valor selaccionado 1
$_POST["estado_id2"] ---> valor selaccionado 2

En principio con esto tu problema estaría solucionado, solo que entonces... como diferenciar cual tienes que actualizar?? tendrias que actualizarlos todos, para lo cual tambien te propongo que declares cada select dentro de un formulario independiente para cada uno, así solo enviarás un valor cada vez.

Buena suerte!!!
  #3 (permalink)  
Antiguo 12/07/2006, 12:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Yo haría lo siguiente:

* Un array con mis ID's de registro
* Otro array con los Estados (el valor que seleccione)

Ambos arrays en "paralelo" .. el del ID como un campo hidden ..

Código PHP:
<select name="estado[]" id="estado" onChange="this.form.submit()">; 
En este caso .. el value de los option puede quedar simplemente como:
Código PHP:
<option value="nombre_estado"> .... 
Y para los "ID's" .. en el mismo bucle While() que usas .. el campo hidden:

Código PHP:
echo "<input type=\"hidden\" name=\"ids[]\" value=\"".$cancha['NoReserv']."">"; 
De esta forma en mi script de proceso tengo un par de arrays en:

$_POST['ids'][$x] y $_POST['estado'][$x]

Usa un bucle for() para recorrerlo contanto el n° de elementos de uno de esos arrays (idealmente e que más peso tenga .. los "id's" ..) con la función count() ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 12/07/2006, 13:25
 
Fecha de Ingreso: septiembre-2005
Mensajes: 141
Antigüedad: 18 años, 7 meses
Puntos: 0
Hola, gracias por sus respuestas.

Una pregunta Kurlax, si declaro cada select dentro de un formulario independiente el nombre ya no seria problema o si?
__________________
:ojotes: A n I t A :ojotes:
  #5 (permalink)  
Antiguo 12/07/2006, 14:13
 
Fecha de Ingreso: septiembre-2005
Mensajes: 141
Antigüedad: 18 años, 7 meses
Puntos: 0
Hola Cluster!

Estoy probando lo que tu me sugeriste, pero para serte sincera no sé bien que hacer con los array a la hora del post , el detalle esta con el [$x], como sé supone que sepa cual fue el que cambio?
__________________
:ojotes: A n I t A :ojotes:
  #6 (permalink)  
Antiguo 12/07/2006, 14:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Anita Rubio
Hola Cluster!

Estoy probando lo que tu me sugeriste, pero para serte sincera no sé bien que hacer con los array a la hora del post , el detalle esta con el [$x], como sé supone que sepa cual fue el que cambio?
No sé a que te refieres con "saber cual fue el que cambió" ..

Tu almacenas en tu tabla correspondiente para ese registro (ID) un estado (en su campo "estado").

A la hora de presentar su dato como valor pre-establecido haces lo que ya gestionas en:
Código PHP:
echo'<option value="activa"'; if ($cancha['Status']=='activa') echo "selected"; echo'>activa</option>'
Cambias el valor de ese "select" y re-escribes el valor nuevamente .. sea que cambio o fue el mismo valor. (y se hace con todos) .. Para saber lo que "tenía" y ver "cual cambió" tendrías que hacer un juego con sesiones tal vez para saber por un lado lo que "entregastes" (lo que generastes y sus estados) y compararlo con lo que "te quedó" tras los cambios para ir decidiendo que campo actualizar .. Realmente se suele actualizar todo sin más miramientos ..

En este tipo de casos, ese n° de registros a actualizar suele ser "despreciable" .. si quiere algún ajuste más fino tendrás que hacer lo que te comento con "sesiones" por ejemplo ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 12/07/2006, 14:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El tema de recorrer el resultado de las dos arrays generados sería:
Código PHP:
for ($x=0$xcount($_POST['ids']); $x++){
  echo 
$_POST['ids'][$x]." --> ".$_POST['estado']."<br>";

Con eso ya puedes hacer tu consulta SQL tipo:
Código PHP:
$sql="UPDATE tabla SET estado='".$_POST['estado'][$x]."' WHERE id='".$_POST['ids'][$x]."'"
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 12/07/2006, 14:58
 
Fecha de Ingreso: septiembre-2005
Mensajes: 141
Antigüedad: 18 años, 7 meses
Puntos: 0
Me marca
Código PHP:
NoticeUndefined indexids in C:Archivos de programaApache GroupApache2htdocsreservacionescontrol_canchas.php on line 98 
Linea 98:
Código PHP:
for ($x=0$xcount($_POST['ids']); $x++){ 
__________________
:ojotes: A n I t A :ojotes:
  #9 (permalink)  
Antiguo 12/07/2006, 15:19
 
Fecha de Ingreso: septiembre-2005
Mensajes: 141
Antigüedad: 18 años, 7 meses
Puntos: 0
Ya resolvi lo ultimo

Código PHP:
<input type="hidden" name="ids[]" id="ids" value="'.$cancha['NoReserv'].'"></div></td>; 
Era un detalle ahi.

Lo que no sé es de donde saco el valor $x correspondiente para hacer el update? o por lo que entendi se actualiza todo ?
__________________
:ojotes: A n I t A :ojotes:
  #10 (permalink)  
Antiguo 12/07/2006, 15:26
 
Fecha de Ingreso: septiembre-2005
Mensajes: 141
Antigüedad: 18 años, 7 meses
Puntos: 0
Ya me respondi yo solita

Gracias por su ayuda
__________________
:ojotes: A n I t A :ojotes:
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 09:55.