Foros del Web » Programando para Internet » PHP »

crear varios usuarios simultaneamente

Estas en el tema de crear varios usuarios simultaneamente en el foro de PHP en Foros del Web. Tengo una tabla de usuarios con los siguientes campos: autonumérico usuario password email nombre logeado He visto en algunas aplicaciones (por ejemplo Moodle) que se ...
  #1 (permalink)  
Antiguo 30/07/2006, 04:40
Avatar de tognaco  
Fecha de Ingreso: noviembre-2004
Mensajes: 136
Antigüedad: 13 años
Puntos: 1
crear varios usuarios simultaneamente

Tengo una tabla de usuarios con los siguientes campos:

autonumérico
usuario
password
email
nombre
logeado

He visto en algunas aplicaciones (por ejemplo Moodle) que se pueden crear muchos usuarios de una sola vez a través de un archivo de texto que se introduce en un campo de tipo file. Evidentemente, el action de ese formulario envía a otro archivo php que es el que mete los usuarios del archivo de texto en la tabla. ¿Tenéis alguna idea de cómo conseguir eso?

Gracias anticipadas.
  #2 (permalink)  
Antiguo 30/07/2006, 12:07
Avatar de tognaco  
Fecha de Ingreso: noviembre-2004
Mensajes: 136
Antigüedad: 13 años
Puntos: 1
Pensaréis: "y si en Moodle lo hacen, porqué no mirar en Moodle?" Pues he mirado, pero la verdad es que no entiendo nada del código, hace referencia a un montón de cosas que vienen de otros sitios. Para entenderlo necesitaría saber el funcionamiento completo de Moodle, y eso son palabras muy, pero que muy mayores.

¿No sabéis de algo sencillito como para andar por casa?
  #3 (permalink)  
Antiguo 30/07/2006, 14:33
Avatar de Nefertiter  
Fecha de Ingreso: enero-2003
Ubicación: Rosario
Mensajes: 1.316
Antigüedad: 14 años, 11 meses
Puntos: 8
que es lo q no sabes hacer precisamnete?
xq lo que tu pretendes simplemente toma:

1.upload de archivos
2.leer archivos
3.Recorrerlo con un bucle
4.interpretar la linea
5.realizar query
  #4 (permalink)  
Antiguo 31/07/2006, 02:11
Avatar de tognaco  
Fecha de Ingreso: noviembre-2004
Mensajes: 136
Antigüedad: 13 años
Puntos: 1
Muchas gracias por tu respuesta , al menos ahora ya sé por donde empezar. De todas formas, lo único que sé hacer es la primera fase. No sé cómo leer el archivo y mucho menos cómo recorrerlo con un bucle. ¿No tendrías algún ejemplo para que pueda orientarme?
  #5 (permalink)  
Antiguo 31/07/2006, 02:58
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 13 años
Puntos: 1
suponiendo que tengas los usuarios en el fichero de esta forma:

nombre1;pass1;masdatosseparadosporpuntoYcoma
nombre2;pass2;masdatosseparadosporpuntoYcoma
nombre3;pass3;masdatosseparadosporpuntoYcoma

el codigo de leer el fichero e insertar sería:

Código PHP:
while(!feof($fich))

    
$cadena fgets($fich,4096); 
    
$cadena=substr($cadena,0,strpos($cadena,"\r\n"));
    
$trozos explode(";"$cadena);

if (
$trozos[2]==""
  {
     echo 
"<br>No se ha insertado el usuario: ".$trozos[0].", pass vacio.";
  }
else
  {
    
$sql="select nombre from tabla_usuario where nombre='".$trozos[0]."'";
    
$resultado=mysql_query($sql)or die ("ERROR obteniendo respuestas de la base de datos, ".mysql_error());
    if (
mysql_num_rows($resultado)==0
     {
    
      
$sql="insert into tabla_usuarios(Nombre,pass,restodatos) VALUES ('".$trozos[0]."','".$trozos[1]."','resto datos')";
      
$resultado=mysql_query($sql)or die ("ERROR obteniendo respuestas de la base de datos, ".mysql_error());
      
      echo 
"<br><font color='#00cc00'>se ha insertado en la base: ".$trozos[0]." / ".$trozos[1]." / "$trozos[2]."</font>";
    }
    
   else     
   {         
       echo 
"<br><font color='#cc0000'>usuario repetido: ".$trozos[0]."</font>";
    }   
  }


algo asi... eso va leyendo de un fichero los datos, separa por lineas luego por ; y esos datos los va introduciendo en la base de datos solo si no existe el usuario... modificalo a tu gusto y a ver si te vale
__________________
ALOZORRO v5.0 (ahora en .es)
  #6 (permalink)  
Antiguo 31/07/2006, 07:24
Avatar de tognaco  
Fecha de Ingreso: noviembre-2004
Mensajes: 136
Antigüedad: 13 años
Puntos: 1
Muchas gracias, me pongo con ello y a ver si soy capaz de conseguir que funcione.
  #7 (permalink)  
Antiguo 31/07/2006, 13:54
Avatar de tognaco  
Fecha de Ingreso: noviembre-2004
Mensajes: 136
Antigüedad: 13 años
Puntos: 1
Tengo problemas antes de empezar, porque haces referencia a la variable $fich, que evidentemente es el archivo subido, pero no encuentro la forma de que no me de problemas la 1ª linea:

while(!feof($fich))

Me dice que el argumento que le proporciono a feof no es válido.

El código que yo utilizo para cargar el archivo es el siguiente:

Código PHP:
$userfile=$_FILES['userfile']['tmp_name'];
$userfile_name=$_FILES['userfile']['name'];
$userfile_type=$_FILES['userfile']['type'];
$userfile_error=$_FILES['userfile']['error'];
if (
$userfile_error >0)
    {
        echo 
'Tenemos problemillas: ';
         switch (
$userfile_error)
         {
        case 
1: echo 'El tamaño del archivo excede el permitido'; break;
        case 
2: echo 'El tamaño del archivo excede el permitido'; break;
        case 
3: echo 'Carga parcial del archivo'; break;
        case 
4: echo 'No se ha cargado ningún archivo'; break;
        }
        exit();
    }
if (
$userfile_type != 'text/plain')
    {
        echo 
'El archivo subido no es de texto plano';
        exit();
    }
$upfile='uploads/'.$userfile_name;
if(
is_uploaded_file($userfile))
    {
    if (!
move_uploaded_file($userfile$upfile))
        {
            echo 
'Problema: No se pudo mover el archivo al directorio de destino';
            exit();
        }
    }
    else
    {
            echo 
'Problema: Posible ataque al subir el archivo. Nombre del archivo: '.$userfile_name;
            exit();
    }
echo 
'Archivo subido con éxito';
$fich=$upfile
Compruebo todos los posibles errores, pero aunque el archivo se sube bien, luego no puedo usarlo con el script de Azrael666 ¿Me podéis ayudar a arrancar?
  #8 (permalink)  
Antiguo 01/08/2006, 07:03
Avatar de tognaco  
Fecha de Ingreso: noviembre-2004
Mensajes: 136
Antigüedad: 13 años
Puntos: 1
Oh, vaya un fallo tonto, se me había olvidado abrir el archivo con fopen. El código que me habéis pasado funciona a la perfección, los usuarios se añaden a la base de datos sin problemas .

Bueno, en realidad queda un pequeño problema sin mucha importancia: Una vez que añade el último usuario, el script da un resultado de error:

No se ha insertado el usuario: , contraseña vacía.

¿Sabéis cómo solucionarlo?
  #9 (permalink)  
Antiguo 01/08/2006, 08:28
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 13 años
Puntos: 1
varias disculpas...
1) estube ocupado no me pude pasar a mirar el tema
2) si.. no me di cuenta de ponerte lo de abrir el fichero.. pero veo que lo solucionaste bien..

3) en cuanto a lo de la ultima insercion, ese error me daba a mi tambien.. lo unico que hacia era borrar el ultimo usuario insertado.. algo muy poco eficienta la verdad... pero no se me ocurria otra cosa que hacerle.. y en el momento de ponerte el codigo no me acordé de ese punto.. mm.. puedes hacer lo mismo que yo (borrar el ultimo registro insertado).. o probar alguna otra cosilla.. por ejemplo que no inserte si todos los $trozos estan vacios, es decir.. que no hay datos...

pruebalo a ver de esa forma if (($trozos[0]=="") && ($trozos[1]=="") ... ) no insertar
__________________
ALOZORRO v5.0 (ahora en .es)
  #10 (permalink)  
Antiguo 01/08/2006, 11:10
Avatar de tognaco  
Fecha de Ingreso: noviembre-2004
Mensajes: 136
Antigüedad: 13 años
Puntos: 1
Ahora todo va perfectamente. Efectivamente, he usado la solución propuesta por tí, poniéndola como primera condición y aninado el resto dentro de ella:

Código PHP:
if(($trozos[0]=="") && ($trozos[1]=="") && ($trozos[2]=="") && ($trozos[3]=="") && ($trozos[4]==""))
  {
     echo 
"<br><br><DIV ALIGN='CENTER'><FONT COLOR=#CC0000>FINAL DE LA OPERACIÓN DE IMPORTACIÓN DE USUARIOS</FONT><DIV><br>";  
  }         
else
  {
    if (
$trozos[1]==""
      {
         echo 
"<br>No se ha insertado el usuario: ".$trozos[1].", contraseña vacía.";
      }
    else
      {
        
$sql="select username from tabla_usuarios where username='".$trozos[1]."'";
        
$resultado=mysql_query($sql)or die ("ERROR obteniendo respuestas de la base de datos, ".mysql_error());

etc
Muchas gracias por todo.
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 19:12.