Foros del Web » Programando para Internet » PHP »

Verificar todas las opciones y ejecutarlas a la vez

Estas en el tema de Verificar todas las opciones y ejecutarlas a la vez en el foro de PHP en Foros del Web. Muy buenas :) Tengo una duda que me anda carcomiendo por dentro jajaja. El script que tengo está formado por varios if y lo que ...
  #1 (permalink)  
Antiguo 14/01/2011, 04:07
Avatar de Jask  
Fecha de Ingreso: abril-2006
Ubicación: Madrid
Mensajes: 773
Antigüedad: 18 años, 7 meses
Puntos: 15
Exclamación Verificar todas las opciones y ejecutarlas a la vez

Muy buenas :)

Tengo una duda que me anda carcomiendo por dentro jajaja.

El script que tengo está formado por varios if y lo que busco es que se compruebe todo y una vez hecha la comprobación y sea correcta ejecute lo que pido. Lo hago principalmente porque (es un script de crear usuario) al ejecutarse se tiene que editar un fichero e insertar una cadena de texto, luego se tiene que crear una carpeta en un directorio y luego se tiene que insertar el usuario creado en la BD por eso, si falla el último proceso, los otros 2 anteriores se habrán completado, y no interesa. Os dejo el código:

Código PHP:
<?php
## Comprueba si el directorio existe
                                
// Abreviatura de departamento a nombre completo
$tabla "pg_dpto";
$query_dpto mysql_query("SELECT * FROM $tabla WHERE dpto_shortname = '$dptoForm' ");
$query_dpto_print mysql_fetch_assoc($query_dpto);    
$abrev_departamento $query_dpto_print['dpto_folder_name']; # Imprime el nombre del dpto (la carpeta) donde se creará la carpeta del usuario

$directorio "/home/ftp/".$abrev_departamento."/".$user_ftp."/".$nick_connect;

if(
is_dir($directorio)){
echo 
"<div class='error-overview'>No se ha podido crear el usuario deseado ya que ya existe una carpeta con este nombre. Por favor intente utilizando otro nombre o cambiándolo de orden (apellido + nombre). <br><a href='javascript:history.back(1);'>Volver Atrás</a></div>";
}else{

## Query para insertar a la BD los campos del usuario en cuestión
$insertar_usuario mysql_query("INSERT INTO pg_usser (usser_name, usser_email, usser_dpto, usser_ftp, usser_nick, usser_pass, usser_pass_encrypted, usser_group, usser_folder_name, usser_folder_size) VALUES ('$user_name', '$user_email', '$user_dpto', '$user_ftp', '$nameDpto', '$user_pass', '$user_pass_encrypted', '$user_group', '$nick_connect', '$user_size') ") or die (mysql_error());



## Si se pueden insertar los usuarios en la BD...
if($insertar_usuario){

    
## Abreviaturas de los departamenos
    
$tabla "pg_dpto";
    
$query_dpto mysql_query("SELECT * FROM $tabla WHERE dpto_shortname = '$dptoForm' ");
    
$query_dpto_print mysql_fetch_assoc($query_dpto);    
    
$abrev_departamento $query_dpto_print['dpto_folder_name']; # Imprime el nombre del dpto (la carpeta) donde se creará la carpeta del usuario
    
    ## Comprobación si ftp.users se puede escribir
    
$archivo "ftp.users";
    if(
is_writable($archivo)){                                

        
## Modifica el archivo añadiendo usuarios
        
$contenido $nameWithoutAccent.":\$1\$".$user_pass_encrypted.":104:65534::/home/ftp/".$abrev_departamento."/".$user_ftp."/".$nick_connect.":/bin/false \n";
                                    
        
## Insercción del usuario, carpeta, en el archivo "$archivo"
        
if($escribir_archivo fopen($archivo"a")){
            if(
fwrite($escribir_archivo$contenido)){
                
                
## Parámetros para pasar al archivo BASH - new_folder.sh
                
$comprobacion 1;
                
$ruta "/home/ftp/".$abrev_departamento."/".$user_ftp."/";
                
$nombre_carpeta $nick_connect;
                
                
## Creación de la carpeta física según el nombre que se insertó
                
if(system("sh new_folder.sh $nombre_carpeta $comprobacion $ruta")){
                    
$ejecucion_correcta "se ejecutó el .sh";
                }else{
                    echo 
"<div class='error-overview'>El archivo <strong>sh</strong> no se pudo ejecutar, por lo que no se pudo crear la carpeta del usuario correspondiente. Por favor, contate con un administrador antes de seguir.</div>";
                }
                
            }else{
                echo 
"<div class='error-overview'>El archivo '$archivo' no se puede escribir. Por favor, contacte con un administrador.</div>";
            }
        }else{
            echo 
"<div class='error-overview'>El archivo '$archivo' no se puede abrir para su escritura. Contate con un administrador antes de seguir. </div>";
        }
// ** if($escribir_archivo = fopen($archivo, "a"))
        
                                                                            
            // Envío de Email al USUARIO !!! 
            /* *****************
            $name = $_REQUEST['us_name'];
            $de = "[email protected]";
            $para = $user_email;
            $user_ftp = $nameDpto;
            $subject ="Datos de Acceso al FTP";
            $user_ftp_pass = $_REQUEST['us_pass'];                    

                $dpt_query = mysql_query("SELECT dpto_name FROM pg_dpto WHERE dpto_shortname = '$user_dpto' ") or die (mysql_error());
                $dpt_print = mysql_fetch_assoc($dpt_query);
                $departamento = $dpt_print['dpto_name'];
            
                $header = "From: " . $de . " \r\n";
                $header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
                $header .= "Mime-Version: 1.0 \r\n";
                $header .= "Content-Type: text/html; charset=utf-8";
                
                $contenido = "<strong>Bauer - Datos de Acceso al FTP</strong>. <br><br>"; 
                $contenido .= "Este email contiene los datos de acceso a su nueva cuenta ftp. <br> Por favor <strong>NO BORRE NI REENVIE</strong> este email, ya que es confidencial. <br> Los datos aquí expuestos solamente los tendrá que conocer usted. <br><br>";
                $contenido .= "<strong>Datos de acceso al FTP</strong> <br><br>";
                $contenido .= "<strong>Servidor:</strong> ftp://datain.bauer.es/ <br>";
                $contenido .= "<strong>Departamento:</strong> ".$departamento."<br>";
                $contenido .= "<strong>Nombre de la Carpeta:</strong> ".$nick_connect."<br><br>";
                $contenido .= "<strong>Usuario:</strong> ".$user_ftp."<br>";
                $contenido .= "<strong>Contraseña:</strong> ".$user_ftp_pass;                                    
        
        
            if($name == "" || $de == "" || $subject == ""){
                error("Ha habido un problema al enviar el email de confirmación. Por favor, inténtalo de nuevo.");    
            }else{
                
                // Mail al usuario
                $emailok = mail($para, $subject, utf8_decode($contenido), $header);    

                // Selección email del admin
                $admin_query = mysql_query("SELECT admin_email FROM pg_admin WHERE admin_id = 1") or die (mysql_error());
                $admin_print = mysql_fetch_assoc($admin_query);
                $admin_email = $admin_print['admin_email'];
                
                // Contenido para insertar en Nagios (solo lo ven admins)
                $contenido .= "<br><br> Recuerda insertar las siguientes líneas en el archivo de configuración de Nagios: <br>";
                $contenido .=" Lineas de código AQUÍ";
                
                $emailadmin = mail($admin_email, "Nuevo usuario FTP", utf8_decode($contenido), $header);
                
                echo "<div id='flash'>
                    <div class='flash'>
                      <div class='notice'>El usuario y la cuenta FTP se han creado correctamente. <br> Se ha enviado un email al usuario con los datos de acceso al FTP.</div>
                      <div class='fourcorners'>
                        <div class='corner-1'><img alt='' SRC='images/corner-grn-1.gif'/></div>
                        <div class='corner-2'><img alt='' SRC='images/corner-grn-2.gif'/></div>
                        <div class='corner-3'><img alt='' SRC='images/corner-grn-3.gif'/></div>
                        <div class='corner-4'><img alt='' SRC='images/corner-grn-4.gif'/></div>
                      </div>
                    </div>
                  </div>";
            } ***************** */                                 // ** if($name == "" || $de == "" || $subject == ""){
    
}    // ** if(is_writable($archivo))

}else{
echo 
"<div class='error-overview'>Ha habido un problema interno al crear la cuenta. Si el problema persiste contacte con el Departamento de Informática.</div>";
// ** if($insertar_usuario)                                    

}// ** if(is_dir($nick_connect))
?>
__________________
Os iusti meditabitur sapientiam
Si te he ayudado, por qué no un poquito de Karma :) ?
  #2 (permalink)  
Antiguo 15/01/2011, 08:10
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 8 meses
Puntos: 101
Respuesta: Verificar todas las opciones y ejecutarlas a la vez

Podrías pasar en limpio la secuencia de condicionales? Se me hace medio lio interpretarlo. Cuales son las comprobaciones?

Dicho al paso, no veo que estes usando &&.... Pero tampoco digo que esta sea una solucion.
  #3 (permalink)  
Antiguo 15/01/2011, 08:53
Avatar de Jask  
Fecha de Ingreso: abril-2006
Ubicación: Madrid
Mensajes: 773
Antigüedad: 18 años, 7 meses
Puntos: 15
Respuesta: Verificar todas las opciones y ejecutarlas a la vez

Cita:
Iniciado por mayid Ver Mensaje
Podrías pasar en limpio la secuencia de condicionales? Se me hace medio lio interpretarlo. Cuales son las comprobaciones?

Dicho al paso, no veo que estes usando &&.... Pero tampoco digo que esta sea una solucion.
A limpio te referís sin comentarios ????

He pensado usar && pero no me termina de convencer esa opción.

Gracias.

EDIT

Código PHP:
$directorio "/home/ftp/".$abrev_departamento."/".$user_ftp."/".$nick_connect;

if(
is_dir($directorio)){
echo 
"<div class='error-overview'>No se ha podido crear el usuario deseado ya que ya existe una carpeta con este nombre. Por favor intente utilizando otro nombre o cambiándolo de orden (apellido + nombre). <br><a href='javascript:history.back(1);'>Volver Atrás</a></div>";
}else{

$insertar_usuario mysql_query("INSERT INTO pg_usser (usser_name, usser_email, usser_dpto, usser_ftp, usser_nick, usser_pass, usser_pass_encrypted, usser_group, usser_folder_name, usser_folder_size) VALUES ('$user_name', '$user_email', '$user_dpto', '$user_ftp', '$nameDpto', '$user_pass', '$user_pass_encrypted', '$user_group', '$nick_connect', '$user_size') ") or die (mysql_error());

if(
$insertar_usuario){

 
    
$tabla "pg_dpto";
    
$query_dpto mysql_query("SELECT * FROM $tabla WHERE dpto_shortname = '$dptoForm' ");
    
$query_dpto_print mysql_fetch_assoc($query_dpto);    
    
$abrev_departamento $query_dpto_print['dpto_folder_name'];
    
    
$archivo "ftp.users";
    if(
is_writable($archivo)){                                

        
$contenido $nameWithoutAccent.":\$1\$".$user_pass_encrypted.":104:65534::/home/ftp/".$abrev_departamento."/".$user_ftp."/".$nick_connect.":/bin/false \n";

        if(
$escribir_archivo fopen($archivo"a")){
            if(
fwrite($escribir_archivo$contenido)){

                
$comprobacion 1;
                
$ruta "/home/ftp/".$abrev_departamento."/".$user_ftp."/";
                
$nombre_carpeta $nick_connect;

                if(
system("sh new_folder.sh $nombre_carpeta $comprobacion $ruta")){
                    
$ejecucion_correcta "se ejecutó el .sh";
                }else{
                    echo 
"<div class='error-overview'>El archivo <strong>sh</strong> no se pudo ejecutar, por lo que no se pudo crear la carpeta del usuario correspondiente. Por favor, contate con un administrador antes de seguir.</div>";
                }
                
            }else{
                echo 
"<div class='error-overview'>El archivo '$archivo' no se puede escribir. Por favor, contacte con un administrador.</div>";
            }
        }else{
            echo 
"<div class='error-overview'>El archivo '$archivo' no se puede abrir para su escritura. Contate con un administrador antes de seguir. </div>";
        }   
    }

}else{
echo 
"<div class='error-overview'>Ha habido un problema interno al crear la cuenta. Si el problema persiste contacte con el Departamento de Informática.</div>";
}                             


__________________
Os iusti meditabitur sapientiam
Si te he ayudado, por qué no un poquito de Karma :) ?
  #4 (permalink)  
Antiguo 15/01/2011, 09:38
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Verificar todas las opciones y ejecutarlas a la vez

Cita:
al ejecutarse se tiene que editar un fichero e insertar una cadena de texto, luego se tiene que crear una carpeta en un directorio y luego se tiene que insertar el usuario creado en la BD
Podrias hacer que:
-Si la primera condicion (editar el fichero e insertar una cadena de texto no funciona), no proceder, se lo contrario procedo
**Nota: guardo el archivo original antes de editarlo en una variable
-Si se crea la carpeta, procedo, de lo contrario tomo el archivo guardado en la variable anterior, lo reemplazo y no procedo
-Si se ejecuta la consulta, procedo, de lo contrario, vuelvo el archivo a su estado original y borro el directorio creado en el paso 2.
  #5 (permalink)  
Antiguo 15/01/2011, 12:58
Avatar de Jask  
Fecha de Ingreso: abril-2006
Ubicación: Madrid
Mensajes: 773
Antigüedad: 18 años, 7 meses
Puntos: 15
Respuesta: Verificar todas las opciones y ejecutarlas a la vez

Cita:
Iniciado por Ronruby Ver Mensaje
Podrias hacer que:
-Si la primera condicion (editar el fichero e insertar una cadena de texto no funciona), no proceder, se lo contrario procedo
**Nota: guardo el archivo original antes de editarlo en una variable
-Si se crea la carpeta, procedo, de lo contrario tomo el archivo guardado en la variable anterior, lo reemplazo y no procedo
-Si se ejecuta la consulta, procedo, de lo contrario, vuelvo el archivo a su estado original y borro el directorio creado en el paso 2.
Había pensado algo parecido a lo que me comentas. Me quería ahorrar el hecho de borrar si sale mal pero creo que va a ser algo imposible jaja.

Gracias, probaré esto :)

un saludo !!
__________________
Os iusti meditabitur sapientiam
Si te he ayudado, por qué no un poquito de Karma :) ?
  #6 (permalink)  
Antiguo 15/01/2011, 13:03
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Verificar todas las opciones y ejecutarlas a la vez

Si fuera solamente agregar datos a una base de datos podrías haber usado transacciones, pero como la tarea es crear archivos y directorios, no queda otra alternativa.

O si alguien conoce una mejor forma, que exponga sus ideas.
  #7 (permalink)  
Antiguo 17/01/2011, 03:14
Avatar de Jask  
Fecha de Ingreso: abril-2006
Ubicación: Madrid
Mensajes: 773
Antigüedad: 18 años, 7 meses
Puntos: 15
Respuesta: Verificar todas las opciones y ejecutarlas a la vez

Cita:
Iniciado por Ronruby Ver Mensaje
Podrias hacer que:
-Si la primera condicion (editar el fichero e insertar una cadena de texto no funciona), no proceder, se lo contrario procedo
**Nota: guardo el archivo original antes de editarlo en una variable
-Si se crea la carpeta, procedo, de lo contrario tomo el archivo guardado en la variable anterior, lo reemplazo y no procedo
-Si se ejecuta la consulta, procedo, de lo contrario, vuelvo el archivo a su estado original y borro el directorio creado en el paso 2.
Ahora que me doy cuenta no se puede editar el fichero primero ya que este contiene todos los valores de los usuarios, ya se directorio, contraseña, etc.

Creo que sería mejor primero insertar el usuario en la BD, crear la carpeta e insertar el usuario. Es más fácil borrar un usuario de una BD o la carpeta creada que no una cadena de caracteres insertada al final de un archivo, no ???

Saludos :)
__________________
Os iusti meditabitur sapientiam
Si te he ayudado, por qué no un poquito de Karma :) ?

Etiquetas: Ninguno
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 21:22.