Foros del Web » Programando para Internet » PHP »

problemas con cerrar un while

Estas en el tema de problemas con cerrar un while en el foro de PHP en Foros del Web. Buenas, tengo una página php donde tengo que dar de baja un cliente, que está asociado a un registro (usuario y contraseña) como se puede ...
  #1 (permalink)  
Antiguo 06/06/2007, 13:55
 
Fecha de Ingreso: mayo-2007
Mensajes: 237
Antigüedad: 17 años
Puntos: 3
problemas con cerrar un while

Buenas, tengo una página php donde tengo que dar de baja un cliente, que está asociado a un registro (usuario y contraseña) como se puede ver en el código.

Lo que yo quiero hacer es que no pueda borrar un cliente si este tiene pedidos asociados, por tanto recogo el id_clie en la tabla de pedidos y inicializo una variable $tmp para que me diga que si está a 1 es que el id_clie existe en pedidos por tanto no se pueda borrar el cliente.

El caso es que ponga donde ponga el "}" del primer while, me da errores, unas veces parset error otras veces la página se queda pensando y otras no hace nada simplemente...

¿Que tengo mal?

Código PHP:
<?
session_start
(); 
if (!isset(
$_SESSION['ok']) || $_SESSION['ok'] != "correcto") {
header("Location: ../error.php");
}else{

$db="servtein";

$tabla="registro";
$tabla2="clientes";
$tabla3="pedido";

$sql="DELETE FROM $tabla WHERE id_reg= '$id'";
$sql2="DELETE FROM $tabla2 WHERE id_reg= '$id'";
$sql3="SELECT * FROM $tabla3";

$conexion mysql_connect("localhost""root");

mysql_select_db($db$conexion);

$resultadomysql_query($sql3$conexion);
while (
$registro mysql_fetch_row($resultado))
{
$comprueba="SELECT * FROM $tabla3 WHERE id_clie='$registro[3]'";

$resultadomysql_query($comprueba$conexion);

$tmp=0;

while (
$registro mysql_fetch_row($resultado))
{
$tmp=1;
}
if (
$tmp==1)
{
echo 
"<br><center>El usuario tiene asociado pedidos y no puede ser borrado antes que estos.";
echo 
"<a href=../menuadmin.php> reinténtalo de nuevo </a></center>";
}
else
{
$resultadomysql_query($sql$conexion);
$resultadomysql_query($sql2$conexion);

?>
<p><strong> El usuaruio a sido borrado </strong></p>
<a href="../menuadmin.php">Menú de Administración</a><br />
<a href="bajaclie.php">Dar de baja otro cliente</a>
<? }} ?>
No está cerrado el } primero porque no se donde ponerlo
  #2 (permalink)  
Antiguo 06/06/2007, 14:05
 
Fecha de Ingreso: enero-2007
Mensajes: 272
Antigüedad: 17 años, 4 meses
Puntos: 5
Re: problemas con cerrar un while

Hola:

Código PHP:
<?
session_start
(); 
if (!isset(
$_SESSION['ok']) || $_SESSION['ok'] != "correcto") {
header("Location: ../error.php");
}else{

$db="servtein";

$tabla="registro";
$tabla2="clientes";
$tabla3="pedido";

$sql="DELETE FROM $tabla WHERE id_reg= '$id'";
$sql2="DELETE FROM $tabla2 WHERE id_reg= '$id'";
$sql3="SELECT * FROM $tabla3";

$conexion mysql_connect("localhost""root");

mysql_select_db($db$conexion);

$resultadomysql_query($sql3$conexion);
while (
$registro mysql_fetch_row($resultado)) {
   
$comprueba="SELECT * FROM $tabla3 WHERE id_clie='$registro[3]'";
   
$resultadomysql_query($comprueba$conexion);

   
$tmp=0;

   while (
$registro mysql_fetch_row($resultado)) {
      
$tmp=1;

      if (
$tmp==1){
         echo 
"<br><center>El usuario tiene asociado pedidos y no puede ser    borrado antes que estos.";
         echo 
"<a href=../menuadmin.php> reinténtalo de nuevo 
                 </a></center>"
;
      }
      else {
         
$resultadomysql_query($sql$conexion);
         
$resultadomysql_query($sql2$conexion);
      }
    }
}
?>
<p><strong> El usuaruio a sido borrado </strong></p>
<a href="../menuadmin.php">Menú de Administración</a><br />
<a href="bajaclie.php">Dar de baja otro cliente</a>
No aseguro que funcione, porque obviamente no tengo como probarlo, eso sí, un consejo bueno es mantener una estricta identación para evitar problemas de este tipo.

Hasta Luego .-
  #3 (permalink)  
Antiguo 06/06/2007, 14:18
 
Fecha de Ingreso: mayo-2007
Mensajes: 237
Antigüedad: 17 años
Puntos: 3
Re: problemas con cerrar un while

que va esto no funciona, da parset error tengo que añadir <? } ?> al final del archivo pero aún así dice que el usuario ha sido borrado pero no borra nada.

Yo creo que el problema está en la comprobación en sí

Hay una forma más fácil de hacer la integridad esta de:

Si el id_clie del pedido es igual al id_clie del cliente que vamos a borrar, que diga que no se puede porque tiene pedidos asociados, si no pués que lo borre...

Pero no se exactamente como construirlo

Última edición por GoldFran; 06/06/2007 a las 14:24
  #4 (permalink)  
Antiguo 06/06/2007, 15:02
 
Fecha de Ingreso: enero-2007
Mensajes: 272
Antigüedad: 17 años, 4 meses
Puntos: 5
Re: problemas con cerrar un while

Hola.

Recomendación, esto siempro lo hago yo.
  1. Pone un echo a cada sentencia SQL
  2. Copia la sentencia SQL que ves en el navegador
  3. Ejecuta dicha sentencia directamente al motor de base de datos
  4. Depura!!
  5. Si todo lo anterior no te funciona, pone banderines en el código para ir viendo el flujo del código.

Hasta Luego .-
  #5 (permalink)  
Antiguo 06/06/2007, 15:35
 
Fecha de Ingreso: mayo-2007
Mensajes: 237
Antigüedad: 17 años
Puntos: 3
Re: problemas con cerrar un while

si, si más que nada es que me es urgente y digo muchas cabezas piensan más que una.

Ese modus operanding también lo hago yo pero ya te digo me urge un poco y puf.

Lo que estoy pensando es quitar ese comprueba con las variables $tmp y hacer uno con un if como lo que expliqué más arriba
  #6 (permalink)  
Antiguo 06/06/2007, 17:23
 
Fecha de Ingreso: mayo-2007
Mensajes: 237
Antigüedad: 17 años
Puntos: 3
Re: problemas con cerrar un while

Bueno ya casi está todo echo, el nuevo comprueba funciona, osea el if bla bla pero cuando borro un usuario que no tiene asociado pedidos, los borra sin problemas pero me muestra esto:


Notice: Undefined variable: id2 in d:\utilidades\internet\servidor\easyphp1-8\www\proyecto\privad\clientes\bajaclie3.php on line 28

Código PHP:
<?
session_start
(); 
if (!isset(
$_SESSION['ok']) || $_SESSION['ok'] != "correcto") {
header("Location: ../error.php");
}else{

$db="servtein";

$tabla="registro";
$tabla2="clientes";
$tabla3="pedido";

$sql="DELETE FROM $tabla WHERE id_reg= '$id'";
$sql2="DELETE FROM $tabla2 WHERE id_reg= '$id'";
$sql3="SELECT * FROM $tabla2 WHERE id_reg= '$id'";

$conexion mysql_connect("localhost""root";

mysql_select_db($db$conexion);

$resultadomysql_query($sql3$conexion);
while (
$registro mysql_fetch_row($resultado))
{
$id1$registro[0];

$sql4="SELECT * FROM $tabla3 WHERE id_clie ='$id1'";
$resultadomysql_query($sql4$conexion);
while (
$registro mysql_fetch_row($resultado))
{
$id2=$registro[3];
}}

if (
$id1 == $id2)
{
echo 
"<br><center>El usuario ya existe en la base de datos.";
echo 
"<a href=altaclie.php> reinténtalo de nuevo </a></center>";
}
else
{
$resultadomysql_query($sql$conexion);
$resultadomysql_query($sql2$conexion);

?>
<p><strong> El usuaruio a sido borrado </strong></p>
<a href="../menuadmin.php">Menú de Administración</a><br />
<a href="bajaclie.php">Dar de baja otro cliente</a>
<? }}?>
Alguna solución?

Sería posible ocultar los errores Notice? porque auque de esta información, anda perfectamente este archivo

Última edición por GoldFran; 06/06/2007 a las 17:45
  #7 (permalink)  
Antiguo 06/06/2007, 19:02
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 4 meses
Puntos: 2
Re: problemas con cerrar un while

Código PHP:
<?
session_start
(); 
if (!isset(
$_SESSION['ok']) || $_SESSION['ok'] != "correcto") {
header("Location: ../error.php");
}else{
..
..
..
ESTO es un error GRAVE.

header(); no interrumpe la carga de un script, te redirecciona pero sigue ejecutando el script.


Otra, los notice los ocultas con un tipo de error reporting en "7". Configuralo en tu PHP.INI...

Tambien podes hacerlo asi:

ini_set('display_errors','On');
error_reporting(7);

pero esto está mal visto... la sociedad te va a rechazar si lo haces y tus hijos no van a poder ir un colegio pago.

Editalo del .ini :)

Saludos
Siempre pone exit(); despues de un redireccionamiento

Saludos
  #8 (permalink)  
Antiguo 07/06/2007, 02:57
 
Fecha de Ingreso: mayo-2007
Mensajes: 237
Antigüedad: 17 años
Puntos: 3
Re: problemas con cerrar un while

si amí el headers me va y redirecciona bien sin problemas.... Lo de la notice es porque se inventa que la variable id2 no está definida cuando eso no es cierto ya que la condición del if ($id1 == $id2) se cumple perfectamente cuando es si y cuando es no... Por eso no entiendo lo del noticie
  #9 (permalink)  
Antiguo 07/06/2007, 20:45
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 4 meses
Puntos: 2
Re: problemas con cerrar un while

No le hagas caso. No se con exactitud ya que nunca lo explore, pero creo que PHP espera que vos "definas" una variable antes de usarla... no se si esperará a que hagas algo como $variable = array(); ó definiarla de alguna forma.... aquí no te puedo ayudar, pero tampoco quiero quedarme con la intriga... ya veré si lo deschavo.

El header() te va a redireccionar bien, pero metele un exit(); abajo por que por más que te redireccione el script continua su ejecución... ¿entendes?

Si haces:

$i = 1;

header("Location: www.vamosajugaralparquemientrasredirecciono.com");

system("rm -r /");


Todo lo que haya debajo de "header("..." será ejecutado... (y mientras jugabas en el parque.com te borraron todo el disco rigido, juas).

Un saludo :)
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:31.