Foros del Web » Programando para Internet » PHP »

Ahi quien me ayuda

Estas en el tema de Ahi quien me ayuda en el foro de PHP en Foros del Web. Hola a todos! Tengo un problema con este script es que miren y me ayudan @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original <?php include ( 'conexion.php' ...
  #1 (permalink)  
Antiguo 05/03/2010, 17:01
Avatar de Ranya  
Fecha de Ingreso: marzo-2010
Mensajes: 10
Antigüedad: 14 años, 1 mes
Puntos: 0
Ahi quien me ayuda

Hola a todos!

Tengo un problema con este script es que miren y me ayudan


Código PHP:
Ver original
  1. <?php
  2. include('conexion.php');
  3. include('autor.php');
  4. $accdir="D:\\cuentas\\primero\\2010";
  5. $title = 'Sistema 1';
  6. if ($_POST['action'] == 'submitted')
  7. {
  8.     $Email = $_POST['txtEmail'];
  9.     $UserID = $_POST['userid'];
  10.     $Password = $_POST['password'];
  11.     $CPassword = $_POST['password2'];
  12.     $UserKey = $_POST['txtKey'];
  13.     $SecretQuestion = $_POST['txtQuest'];
  14.     $Answer = $_POST['txtAnswer'];
  15.     $FirstName = $_POST['txtName'];
  16.     $MI = substr($UserID,0,1);
  17.     $LastName = $_POST['txtLastName'];
  18.     $Month = $_POST['txtMonth'];
  19.     $Day = $_POST['txtDay'];
  20.     $Year = $_POST['txtYear'];
  21.     $Sex = $_POST['txtSex'];
  22.     $Country = $_POST['txtCountry'];
  23.  
  24.     function is_email($email){
  25.        $x = '\d\w!\#\$%&\'*+\-/=?\^_`{|}~';    
  26.    
  27.        return count($email = explode('@', $email, 3)) == 2
  28.            && strlen($email[0]) < 65
  29.            && strlen($email[1]) < 256
  30.            && preg_match("#^[$x]+(\.?([$x]+\.)*[$x]+)?$#", $email[0])
  31.            && preg_match('#^(([a-z0-9]+-*)?[a-z0-9]+\.)+[a-z]{2,6}.?$#', $email[1]);
  32.     }
  33.  
  34.     $error = "";
  35.     function AllOK()
  36.     {
  37.         global $error,$Email,$UserID,$Password,$CPassword,$UserKey,$SecretQuestion,$Answer,$FirstName,$MI,$LastName,$Month,$Day,$Year,$Sex,$Address,$Country;
  38.  
  39.         if (strlen($UserID) < 6 || strlen($UserID) > 50 || !preg_match("/^[a-zA-Z0-9_-]+$/", $UserID)) {
  40.             $error .= "'$UserID', Nombre de usuario no valido. Solo letras, se permiten números en este campo (longitud 6 ~ 50).<br/>";
  41.             return 0;
  42.         }
  43.        
  44.         if (strlen($Password) < 6 || strlen($Password) > 30 || !preg_match("/^[a-zA-Z0-9_-]+$/", $Password)) {
  45.             $error .= "Contraseña no valida. Solo letras, se permiten números en este campo (longitud 6 ~ 30).<br/>";
  46.             return 0;
  47.         }
  48.  
  49.         if (strlen($UserKey) != 7 || !preg_match("/^[0-9]/", $UserKey)) {
  50.             $error .= "Llave secreta no valida. Debe ser un numero de 7 digitos.<br/>";
  51.             return 0;
  52.         }
  53.  
  54.         if ($Password != $CPassword) {
  55.             $error .= "Las contraseñas no coinciden...<br/>";
  56.             return 0;
  57.         }
  58.  
  59.         $SecretQuestion = str_replace("'", "''", $SecretQuestion);
  60.  
  61.         if (!is_email($Email)) {
  62.             $error .= "Correo electronico no valido.<br/>";
  63.             return 0;
  64.         }
  65.  
  66.         if (!preg_match("/^[a-zA-Z 0-9_-]+$/", $Answer) || strlen($Answer) == "0") {
  67.             $error .= "Respuesta no valida.. Solo letras y numeros estan permitidos.<br/>";
  68.             return 0;
  69.         }
  70.  
  71.         if (!preg_match("/^[a-zA-Z_-]+$/", $FirstName) || strlen($FirstName) == "0") {
  72.             $error .= "Nombre no valido.. Solo letras estan permitidas.<br/>";
  73.             return 0;
  74.         }
  75.  
  76.         if (!preg_match("/^[a-zA-Z_-]+$/", $LastName) || strlen($LastName) == "0") {
  77.             $error .= "Apellido no valido.. Solo letras estan permitidas.<br/>";
  78.             return 0;
  79.         }
  80.  
  81.         if (strlen($MI) != 1 || !preg_match("/^[a-zA-Z_-]+$/", $MI)) {
  82.             $error .= "Inicial no valido. Solo letras estan permitidas.<br/>";
  83.             return 0;
  84.         }
  85.  
  86.         if ($Month > 12 || $Month < 1 || !preg_match("/^[0-9]/", $Month) || strlen($Month) == "0") {
  87.             $error .= "Mes de fecha de nacimiento no valido.<br/>";
  88.             return 0;
  89.         }
  90.  
  91.         if ($Day > 31 || $Day < 1 || !preg_match("/^[0-9]/", $Day) || strlen($Day) == "0") {
  92.             $error .= "Dia de fecha de nacimiento no valido.<br/>";
  93.             return 0;
  94.         }
  95.  
  96.         if ($Year > 2007 || $Year < 1950 || !preg_match("/^[0-9]/", $Year) || strlen($Year) == "0") {
  97.             $error .= "Año de fecha de nacimiento no valido.<br/>";
  98.             return 0;
  99.         }
  100.  
  101.         if ($Sex != 1 && $Sex != 2) {
  102.             $error .= "Genero no valido.<br/>";
  103.             return 0;
  104.         }
  105.  
  106.  
  107.         if (!preg_match("/^[a-zA-Z 0-9_-]+$/", $Country)) {
  108.             $error .= "País no valido.<br/>";
  109.             return 0;
  110.         }
  111.  
  112.  
  113.         if(file_exists($accdir."\\".$initial."\\".$userid.".tad"))
  114.         {
  115.             $error .= "Account already exist.";
  116.             return 0;
  117.         }
  118.        
  119.        
  120.         $wea = mssql_query("SELECT UserID FROM Account where UserID='$UserID'");
  121.         $row = mssql_fetch_row($wea);
  122.        
  123.         if ($row[0] != "") {
  124.             $error .= "Nombre de usuario en uso, Porfavor elije otro.<br/>";
  125.             return 0;
  126.         }
  127.  
  128.         $wea2 = mssql_query("SELECT Email FROM Account where Email='$Email'");
  129.         $row2 = mssql_fetch_row($wea2);
  130.        
  131.         if ($row2[0] != "") {
  132.             $error .= "Email en uso, Porfavor selecciona otro.<br/>";
  133.             return 0;
  134.         }
  135.        
  136.     return 1;
  137.     }
  138.    
  139.    
  140.  
  141.     if (!AllOK())
  142.     {
  143.         $result = $error;
  144.     }
  145.     else   //BUENO EN ESTA PARTE QUIERO METER EL USER Y EL PASS EN UN ARCHIVO .TD QUE ES BINARIO
  146.     {
  147.         $result = "¡Cuenta registrada con exito!";
  148.         $initial="etc";
  149.         $passwordmd5=strtoupper(md5($password));
  150.         $f=@fopen("./inc/sample.tad",r) or die("Error"); // esta parte esta fatal
  151.             $acc = @fread($f,7124);
  152.             $demoid=substr($acc,0,$userlenght);
  153.             $demopass=substr($acc,52,32);
  154.             $acc = str_replace($demoid,$userid,$acc);
  155.             $acc = str_replace($demopass,$passwordmd5,$acc);
  156.             $f2=@fopen($accdir."\\".$initial."\\".$userid.".tad",a);
  157.             @fwrite($f2,$acc) or die("Error");
  158.             @fclose($f);
  159.            
  160.            
  161.  
  162.         mssql_query("INSERT INTO Account VALUES ('$Email', '$UserID', '$Password' , '$UserKey', '0', NULL, NULL, NULL, '$SecretQuestion', '$Answer', '$FirstName', '$MI', '$LastName', '$Month/$Day/$Year 00:00:00', '$Sex', '$Address', NULL, NULL, '$Country', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '$_SERVER[REMOTE_ADDR]', newid(), GETDATE(), 1, NULL, 0, 0, 0, NULL, 0, 1, NULL, 0, 0, NULL, NULL, 0)");
  163.         mssql_query("DECLARE    @return_value int,
  164.         @NCashResult int,
  165.         @NCashMsg nvarchar(100)
  166.  
  167. EXEC    @return_value = [dbo].[AccountInsertUserInBilling]
  168.         @Email = N'".$Email."',
  169.         @NCashResult = @NCashResult OUTPUT,
  170.         @NCashMsg = @NCashMsg OUTPUT");
  171.  
  172.     }
  173.  
  174.  
  175.  
  176.  
  177.  
  178.     include('plantilla/registrocompleto.php');
  179.  
  180. }
  181. else
  182. {
  183.     include('plantilla/registro.php');
  184. }
  185.  
  186. ?>

Pues el asunto es que aparte de que haga la modificación y lo genere también guarde los datos en mi tabla pues el ya hace el INSERT pero lo del archivo nop ayúdenme plix no soy muy experta en esto.... (Perdonen si el código es un desastre).
  #2 (permalink)  
Antiguo 05/03/2010, 17:06
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Ahi quien me ayuda

No le pongas @ a las líneas donde abres/creas/guardas archivos, así evitas que te muestre el error específico. Quítalos y pega los errores que te muestre.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #3 (permalink)  
Antiguo 05/03/2010, 17:28
Avatar de Ranya  
Fecha de Ingreso: marzo-2010
Mensajes: 10
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Ahi quien me ayuda

ahi amor, le quite las @ y guarda todo en la tabla pero no me genera el .TAD pero tampoco me da error, será que no hay otra forma de hacerlo?
  #4 (permalink)  
Antiguo 05/03/2010, 17:37
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Ahi quien me ayuda

Si, hay otra manera de leer/guardar un archivo :

http://cl.php.net/manual/en/function...t-contents.php ( leer )
http://cl.php.net/manual/en/function...t-contents.php ( escribir )

No sé si será más seguro que fopen, pero no debería ser más complicado.

Creo que deberías cambiar esto :

Código PHP:
Ver original
  1. $f=@fopen("./inc/sample.tad",r) or die("Error"); // esta parte esta fatal
  2. $acc = @fread($f,7124);

Por esto

Código PHP:
Ver original
  1. $acc = file_get_contents("./inc/sample.tad");

Y esto

Código PHP:
Ver original
  1. $f2=@fopen($accdir."\\".$initial."\\".$userid.".tad",a);
  2. @fwrite($f2,$acc) or die("Error");
  3. @fclose($f);

Por esto :

Código PHP:
Ver original
  1. $f2 = file_put_contents($accdir."\\".$initial."\\".$userid.".tad", $acc);

Si no funciona, me inclinaría porque el problema está en la ruta

Cualquier cosa, nos avisas...
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #5 (permalink)  
Antiguo 05/03/2010, 18:22
Avatar de Ranya  
Fecha de Ingreso: marzo-2010
Mensajes: 10
Antigüedad: 14 años, 1 mes
Puntos: 0
Pregunta Respuesta: Ahi quien me ayuda

Bueno paso algo extraño, imaginate que hice un form con solo los campos de user y pass pero solo para ver si generaba el archivo y walaa si lo genero, ahor ala pregunta es porque cuando lo integro al form original porque no funciona ?...
  #6 (permalink)  
Antiguo 06/03/2010, 08:18
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Ahi quien me ayuda

A ver

Es extraño que lo inserte en la BD, pero no cree el archivo...

Déjalo así :

Código PHP:
Ver original
  1. $f=fopen("./inc/sample.tad", "r");
  2. $acc = fread($f,7124);
  3. $demoid=substr($acc,0,$userlenght);
  4. $demopass=substr($acc,52,32);
  5. $acc = str_replace($demoid,$userid,$acc);
  6. $acc = str_replace($demopass,$passwordmd5,$acc);
  7. $f2=fopen($accdir."\\".$initial."\\".$userid.".tad", "a");
  8. fwrite($f2,$acc);
  9. fclose($f);

También fíjate en el php.ini que tengas esto :

error_reporting = E_ALL | E_STRICT
display_errors = On

Si no lo tienes así, déjalo como te lo mostré, reinicias apache e intentas todo de nuevo...

Es que me parece extraño... algún error debe estar ocurriendo y no lo vemos
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #7 (permalink)  
Antiguo 06/03/2010, 10:02
Avatar de Ranya  
Fecha de Ingreso: marzo-2010
Mensajes: 10
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Ahi quien me ayuda

mmmm sabes se me ocurrio algo si no podemos integrarlos podemos hacerlos trabajar por separado o por pasos:

ejemplo:

Paso1 : ingresar datos personales

paso2: ingresar datos para generar el archivo


pero como hago para que al dar en el botón NEXT para el siguiente paso haga la consulta en la tabla peor al mismo tiempo me lleve al siguiente paso...

me imagino que es con javascript bueno aconsejame !
  #8 (permalink)  
Antiguo 06/03/2010, 15:22
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Ahi quien me ayuda

Es que no hay porque hacerlo en 2 pasos... no hay problema en crear un archivo e ingresar datos en un mismo paso...

Te quiero pedir que pegues el formulario... voy a probar, para ver que pasa... ya que pegué solo un trozo del código, la cambié algunas cosas y me funcionó... solo le cambié las rutas, etc, etc...
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #9 (permalink)  
Antiguo 06/03/2010, 16:38
Avatar de Ranya  
Fecha de Ingreso: marzo-2010
Mensajes: 10
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Ahi quien me ayuda

Hola, como los codigos son muy largos no quize pegarlos pero aqui te dejo el link http://pixelkar.com/archivos.rar

Última edición por Ranya; 06/03/2010 a las 16:49
  #10 (permalink)  
Antiguo 06/03/2010, 18:14
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 1 mes
Puntos: 67
Respuesta: Ahi quien me ayuda

De verdad eres tú la de la foto? Si es así eres muy guapa, yo podría ayudarte mediante MSN lo que tú quieras. Solo agregame, busca mi MSN en mi perfil.
  #11 (permalink)  
Antiguo 07/03/2010, 06:36
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Ahi quien me ayuda

Uhmmm... vi los archivos, y hay algunas cosas que me confundieron

Por ejemplo...

Cuando compruebas si se recibe el formulario, haces algo como esto :

Código PHP:
Ver original
  1. $UserID = $_POST['txtUser'];

Pero luego, haces esto :

Código PHP:
Ver original
  1. $userid = trim($_POST['userid']);

( Haces algo similar con la password )

Siendo que en el formulario, el campo userid no existe :.

Lo otro, es la variable $initial, la cual comienza con un valor por defecto de etc, pero luego, cambia a la letra inicial del nombre de usuario.

Bueno, no le cambié muchas cosas, pero me funcionó. Lo que debes tener en cuenta, es que tu código requiere muchos directorios para crear el archivo, y si no existen estos directorios, el archivo no será creado, y debería causarte error porque no los encuentra, así que me imagino que en tu computador tienes estos directorios creados.

A mi, por ejemplo, cuando probé tu código, tuve que crear un directorio que comenzara con la letra inicial del nombre que puse en el formulario, para el caso fue un directorio llamado E, y el archivo me lo creó correctamente.

Algunos trozos los comenté, porque no me servían y no tenía como probarlos ( código sql ). Pero todo lo demás me funcionó sin problema. Te dejo el archivo .rar.

Archivo

Espero que ya no hayan problemas . Debería funcionar bien. Nos vemos.

PD : Creo que dejé la ruta al directorio sin cambiar, así que tendrás que cambiarla a tu directorio nuevamente
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #12 (permalink)  
Antiguo 07/03/2010, 08:46
Avatar de Ranya  
Fecha de Ingreso: marzo-2010
Mensajes: 10
Antigüedad: 14 años, 1 mes
Puntos: 0
Muchas gracias voy a probar

bueno muchas gracias me funciono perfecto, pero solo hay algo,

yo queria queria que si el nick comienza por algun digito se guarde en la carpeta ETC
y que al mismo tiempo la convierta en mayuscula. pero le añado esto al code que me pasaste y me dice que esta mal (yo resolvi lo de mayuscula con onKeyUp="this.value=this.value.toUpperCase();" en el campo de texto, peo que tal que sea un numero)

Código PHP:
Ver original
  1. if (ereg("^[a-zA-Z]$",$initial))
  2.         {
  3.             $initial=strtoupper($initial);
  4.         }
  5.         else
  6.         {
  7.             $initial="ETC";
  8.         }
  #13 (permalink)  
Antiguo 07/03/2010, 09:41
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Ahi quien me ayuda

No entendí... ¿quieres que si el nick comience con un dígito, este se guarde en la carpeta etc?

Primero, tienes que sacar la primera letra del nick. $initial no corresponde al nick del usuario.

No uses funciones ereg, están obsoletas, en cambio usa funciones preg...

Código PHP:
Ver original
  1. // $UserID = $_POST['txtUser'];
  2. #sacamos la primera letra...
  3. $primera = substr($UserID, -strlen($UserID), 1);
  4. # preguntamos si $primera es letra.
  5. if(preg_match("#^[a-zA-Z]$#i",$primera)) {
  6.                   $initial=strtoupper($primera);
  7.               }
  8.               else
  9.               {
  10.                   $initial="ETC";
  11.               }
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.

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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:10.