Foros del Web » Programando para Internet » Javascript »

confirmacion previa en javascript

Estas en el tema de confirmacion previa en javascript en el foro de Javascript en Foros del Web. Hola. tengo un problema, genero una lista de usuarios que estan en espera para ser activados dentro del sistema. Cada usuario tiene un enlace activar. ...
  #1 (permalink)  
Antiguo 22/05/2011, 18:14
 
Fecha de Ingreso: mayo-2011
Mensajes: 105
Antigüedad: 12 años, 11 meses
Puntos: 3
Exclamación confirmacion previa en javascript

Hola. tengo un problema, genero una lista de usuarios que estan en espera para ser activados dentro del sistema. Cada usuario tiene un enlace activar. Cuando el administrador le da clic al enlace activar se genera un mensaje de confirmacion, Aceptar y cancelar.

Si le da aceptar, se hace la actualizacion a la base de datos y el usuario queda activado.

Si le da cancelar, la idea es que no haga nada y se quede en la misma pagina.

Pero el confirm('mensaje')... se ejecuta pero no hace nada!!! da igual si das en aceptar o cancelar, de todas formas el usuario se activa y se actualiza en la base de datos.

este es el codigo:

Código HTML:
<script language = "javascript" type="text/javascript">


if(confirm('¿Seguro que desea activar el usuario?'))
{
<?php

include ('conexion.php');
$conectar = new conectarse();
$conn = $conectar->get_conexion();
$cerrar = $conectar->close_conexion();



	if(isset($_GET['codigo'])){
		$idusuario = $_GET['codigo'];
		$sqlactivarusuario = "update tbcuenta set idestado = 1 where codigo = '".$idusuario."'";
		mysql_query($sqlactivarusuario,$conn)or die(mysql_error());			
        //echo "<meta http-equiv='refresh' content='0; URL = activarusuarios.php'/>";
		$cerrar;
		
	}
				
?>

document.location.href = 'activarusuarios.php';			
}



</script> 

No me pidan que ponga un else porque ya lo hice y no funciona....

¿Que estoy haciendo mal?

¿Porque el codigo php se ejecuta sin tener en cuenta las opciones aceptar o cancelar del confirm?
  #2 (permalink)  
Antiguo 22/05/2011, 20:23
Avatar de Maganius  
Fecha de Ingreso: septiembre-2010
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: confirmacion previa en javascript

Creo que no puedes llamar a php en tiempo real sin ajax o recargar la pagina, y no puede estar adentro del js por eso no te funciona prueba asi:

Haces el confirm si se apreta Aceptar te lleva al mismo archivo con una variable si esa variable es igual a OK te arma toda la consulta y hace un header llevandote a activacion.php

Código PHP:
Ver original
  1. <?php
  2. if($_GET["activar"]=="ok"){
  3.     include ('conexion.php');
  4.     $conectar = new conectarse();
  5.     $conn = $conectar->get_conexion();
  6.     $cerrar = $conectar->close_conexion();
  7.    
  8.    
  9.    
  10.         if(isset($_GET['codigo'])){
  11.             $idusuario = $_GET['codigo'];
  12.             $sqlactivarusuario = "update tbcuenta set idestado = 1 where codigo = '".$idusuario."'";
  13.             mysql_query($sqlactivarusuario,$conn)or die(mysql_error());        
  14.             //echo "<meta http-equiv='refresh' content='0; URL = activarusuarios.php'/>";
  15.             $cerrar;
  16.            
  17.         }
  18.     header("Location: activarusuarios.php");
  19. }
  20. ?>

Código Javascript:
Ver original
  1. <script language="javascript">
  2. function confirmar(){
  3. if(confirm('Seguro que desea activar el usuario')){document.location.href = 'EL MISMO NOMBRE DEL ARCHIVO.php?activar=ok';}
  4. }
  5. </script>

Código HTML:
Ver original
  1. <a href="#" onClick="confirmar()">Activar</a>

Última edición por Maganius; 22/05/2011 a las 20:41
  #3 (permalink)  
Antiguo 22/05/2011, 21:03
 
Fecha de Ingreso: mayo-2011
Mensajes: 105
Antigüedad: 12 años, 11 meses
Puntos: 3
Respuesta: confirmacion previa en javascript

Oye me parece muy acertada tu respuesta. pero tengo otra duda, la variable codigo que se usa en el archivo php y que viaja por $_GET, donde se asigna?

es decir, codigo corresponde al codigo del usuario indispensable para activar la cuenta, sin esa variable no haria la consulta a la base de datos.

Es decir, funciona asi: busco usuarios que esten inactivos y los muestro, a cada usuario se le añade un enlace activar, se supone que con ese enlace, viaja codigo, pero con la solucion que me planteas el enlace en href tiene "#" y entonces el codigo como viaja?

este es mi codigo que genera los usuarios y su correspondiente enlace activar:

Código PHP:
Ver original
  1. $sqllistar="select codigo,nombre,apellido from tbcuenta where idestado = 2";
  2.                                      $registro=mysql_query($sqllistar,$conn);
  3.                                      
  4.                                      $conteo = mysql_num_rows($registro);
  5.                                      
  6.                                       echo "<br>";
  7.                                       echo "<table border=0 width = 60% align = center>";
  8.                                       echo "<tr>";
  9.                                       echo "<td  colspan = 6 align=left bgcolor= #F8E0E0> <b><font face = Arial, Helvetica, sans-serif  color = #cc0000 size = 2><b>USUARIOS EN ESPERA DE ACTIVACION:</b></font>";
  10.                                       echo "</td>";
  11.                                       echo "</tr>";
  12.                                        /*echo "<tr>";
  13.                                       echo "<td colspan=3 align=left bgcolor= #F8E0E0> <b><font face = Arial, Helvetica, sans-serif  color = #cc0000 size = 2><b>USUARIOS EN ESPERA DE ACTIVACION:</b></font>";
  14.                                       echo "</td>";
  15.                                       echo "</tr>";*/
  16.                                       echo "<br>";
  17.                                       if ($conteo > 0){
  18.                                        while ($fila = mysql_fetch_array($registro)){
  19.                                         $cod = $fila['codigo'];
  20.                                        echo "<tr>";
  21.                                        echo "<td width = 5 height = 5> <img src = Imagenes/triangulo.gif ></td>";
  22.                                        echo "<td>".$fila['codigo']."</td>";
  23.                                        echo "<td>".$fila['nombre']."</td>";
  24.                                        echo "<td>".$fila['apellido']."</td>";
  25.                                        echo "<td><a href = eventoactivar.php?codigo=".$fila['codigo'].">Activar</a></td>";
  26.                                        echo "<td><a href= eventoignorar.php?codigo=".$fila['codigo']." >Ignorar</a></td>";
  27.                                        echo "</tr>";
  28.                                         }
  29.                                      }
  30.                                      
  31.                                      else {
  32.                                        
  33.                                         echo "<tr>";
  34.                                         echo "<td align = center><font face = arial size = 2><b> NO HAY USUARIOS EN ESPERA DE ACTIVACION</font></td>";
  35.                                         echo "</tr>";
  36.                                      }
  37.                                       echo "</table>";
  38.  
  39.                                       $cerrar;
  40.                                     }
  #4 (permalink)  
Antiguo 22/05/2011, 21:14
Avatar de Maganius  
Fecha de Ingreso: septiembre-2010
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: confirmacion previa en javascript

El codigo OK viaja en la function confirmar()

que se encuentra en el js aqui:

<script language="javascript">
function confirmar(){
if(confirm('Seguro que desea activar el usuario')){document.location.href = 'EL MISMO NOMBRE DEL ARCHIVO.php?activar=ok';}
}
</script>
para que Codigo valla junto con OK para pasarle el parametro tendria que quedar asi:

EL MISMO NOMBRE DEL ARCHIVO.php?activar=ok&codigo=$fila['codigo']

el js tiene que ir adentro del WHILE para que valla generandose $fila['codigo']

<?php
while {
?>
<script language="javascript">
function confirmar(){
if(confirm('Seguro que desea activar el usuario')){document.location.href = 'EL MISMO NOMBRE DEL ARCHIVO.php?activar=ok&codigo=$fila['codigo']';}
}
</script>
<?php
}
?>
  #5 (permalink)  
Antiguo 23/05/2011, 01:41
 
Fecha de Ingreso: mayo-2011
Mensajes: 105
Antigüedad: 12 años, 11 meses
Puntos: 3
Respuesta: confirmacion previa en javascript

Oye Gracias!!! me sirvio bastante, pero hay un detalle que no logro solucionar y es que cuando le doy la opcion activar, la variable codigo se carga con el valor del registro siguiente.

Es decir, el problema no sucede mientras la consulta arroje un solo registro, pero cuando se muestra varios y se desea desactivar un usuario, por ejemplo uno del medio de la lista, la variable codigo que viaja por GET toma el valor del registro siguiente, entonces me elimina el usuario que no es.

Asi quedo mi codigo:

Código PHP:
Ver original
  1. while ($fila = mysql_fetch_array($registro)){
  2.                                        echo "<script language='javascript'>
  3.                                         function confirmar(){
  4.                                         if(confirm('¿Seguro que desea activar el usuario?')){document.location.href = 'eventoactivar.php?activar=ok&codigo=$fila[1]';}
  5.                                         }
  6.                                         function ignorar(){
  7.                                         if(confirm('¿Seguro que desea eliminar el usuario?')){document.location.href = 'eventoignorar.php?activara=ok&codigoa=$fila[1]';}
  8.                                         }
  9.                                         </script>";
  10.                                        echo "<tr>";
  11.                                        echo "<td width = 5 height = 5> <img src = Imagenes/triangulo.gif ></td>";
  12.                                        echo "<td width = 5 height = 5> <img src ='".$fila['0']."' width = 50 height =50 ></td>";
  13.                                        echo "<td align = center>".$fila['1']."</td>";
  14.                                        echo "<td align = center>".$fila['2']."</td>";
  15.                                        echo "<td align = center>".$fila['3']."</td>";
  16.                                        echo "<td align = center>".$fila['5']."</td>";
  17.                                        echo "<td align = center>".$fila['4']."</td>";
  18.                                        echo "<td align = center><a href=# onClick=confirmar()>Activar</a></td>";
  19.                                        echo "<td><a href= # onClick=ignorar()>Ignorar</a></td>";
  20.                                        echo "</tr>";


para mi no existe ningun problema... pero no le encuentro logica!!!

ayudaaa!!!
  #6 (permalink)  
Antiguo 23/05/2011, 09:10
Avatar de Maganius  
Fecha de Ingreso: septiembre-2010
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: confirmacion previa en javascript

No entiendo lo que dices... pon un ejemplo en html
por lo que veo en el codigo esta bien.
  #7 (permalink)  
Antiguo 23/05/2011, 11:46
 
Fecha de Ingreso: mayo-2011
Mensajes: 105
Antigüedad: 12 años, 11 meses
Puntos: 3
Respuesta: confirmacion previa en javascript

Es decir, cuando el while se ejecuta me aparece algo como esto:

Imagen Codigo nombre apellido programa motivo accion
xxxxx 0859832 Juan Gomez Quimica xxxx Activar
xxxxx 0859834 daniel Garcia Quimica xxxx Activar


pero si yo le doy activar al usuario "Juan" viaja el codigo del usuario de debajo, es decir daniel y me elimina obviamente daniel y no juan.

No se si sea en la construccion del while que el script este en el lugar errado, pero no se....

en la lista los codigos si aparecen correctamente, es decir en el ejemplo que te di, el codigo de juan y de daniel estan bien. Solo que el problema es que viaja por GET el que no es.

Puntualmente, que codigo html necesitas ver? es que yo uso una clase usuario la cual hace el metodo donde esta el while... en html solo hago un objeto de usuario y llamo al metodo para hacer la lista.

en la construccion del while hay un problema en la condicion de parada?
  #8 (permalink)  
Antiguo 23/05/2011, 12:05
 
Fecha de Ingreso: mayo-2011
Mensajes: 105
Antigüedad: 12 años, 11 meses
Puntos: 3
Respuesta: confirmacion previa en javascript

He hecho un analisis y el error persiste pero llegue a la conclusion de que la variable codigo que viaja en la funcion script le asigna el ultimo codigo de usuario.

es decir que para cada enlace activar en la funcion script confirmar queda cargado es el ultimo codigo... TODOS LOS ENLACES ESTAN CARGADOS CON EL ULTIMO CODIGO QUE EN EL WHILE SE ASIGNA!!!


Pase lo que pase, si le doy clic a cualquier usuario me va a borrar el ultimo de la lista....

Luego cuando la pagina se refresca ps ahora el ultimo es el antepenultimo y este se borra y asi sucesivamente....

eso es un error grave....
  #9 (permalink)  
Antiguo 23/05/2011, 12:44
Avatar de Maganius  
Fecha de Ingreso: septiembre-2010
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: confirmacion previa en javascript

Pruebalo asi:

Código HTML:
Ver original
  1. <a href=\"javascript:if(confirm('Seguro que desea activar el usuario')){document.location.href = 'eventoactivar.php?activar=ok&codigo=$fila[1]';}\">Activar</a>

Para ignorar as lo mismo
  #10 (permalink)  
Antiguo 23/05/2011, 12:51
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: confirmacion previa en javascript

Si ponés las funciones javascript dentro del bucle, en cada iteración estás sobreescribiéndolas y es por eso que la que tiene validez es la última.
Un ejemplo:
Código PHP:
<script type="text/javascript">
function 
uno(){alert('soy la función original');}
uno();//me sobreescribieron
function uno(){alert('me sobreescribieron');}
uno();//me sobreescribieron
</script> 
Probá así:
Código PHP:
<?php
while ($fila mysql_fetch_array($registro)){
    echo 
'<tr>';
    echo 
"<td width = 5 height = 5> <img src = Imagenes/triangulo.gif ></td>";
    echo 
'<td width = 5 height = 5> <img src ="'.$fila['0'].'" width = 50 height =50 ></td>';
    echo 
"<td align = center>".$fila['1']."</td>";
    echo 
"<td align = center>".$fila['2']."</td>";
    echo 
"<td align = center>".$fila['3']."</td>";
    echo 
"<td align = center>".$fila['5']."</td>";
    echo 
"<td align = center>".$fila['4']."</td>";
    echo 
'<td align = center><a href="eventoactivar.php?activar=ok&codigo='.$fila[1].'" onclick="return confirm(&quot;¿Seguro que desea activar el usuario?&quot;)">Activar</a></td>';
    echo 
'<td><a href="eventoignorar.php?activara=ok&codigoa='.$fila[1].'" onclick="return confirm(&quot;¿Seguro que desea eliminar el usuario?&quot;)">Ignorar</a></td>';
    echo 
"</tr>";
}
?>
  #11 (permalink)  
Antiguo 23/05/2011, 13:49
 
Fecha de Ingreso: mayo-2011
Mensajes: 105
Antigüedad: 12 años, 11 meses
Puntos: 3
Respuesta: confirmacion previa en javascript

Muchas gracias a panino y Maganius, cualquiera de las dos soluciones planteadas funcionan perfecto!! deberian hacer un articulo dedicado al manejo de alertas y confirmaciones en javascript y php para estos casos.... Nos sirvio bastante su ayuda

Etiquetas: confirmacion, previa
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:44.