Autor Tema: [Consulta]  (Leído 1677 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Zhamir

  • Novato
  • *
  • Mensajes: 2
  • Puntuación: 0
    • Ver Perfil
[Consulta]
« : 08 de noviembre de 2013, 03:15:40 pm »
Buenas tardes, escribo éste mensaje motivado a que desde hace días estoy presentando inconvenientes en un formulario de PHP en el cual me sale un error en una línea inexistente, es decir, poseo 69 líneas de código en mi formulario, y al intentar visualizar los resultados de mi codificación me encuentro con el siguiente error: Parse error: parse error in C:\wamp\www\r33\index.php on line 70

Utilizo el WampServer y el código de mi formulario es el siguiente:

Código: [Seleccionar]
<?php session_start();

//encabezado para que no use la cache de archivos temporales de internet
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0"false); 
header("Pragma: no-cache"); 
// archivo requerido para la conexion con la base de datos
require_once('conexion.php');
// archivo requerido para la funciones
require('funciones.php');
//inicio de la validacion
if ($_REQUEST['usuario']=='' AND $_REQUEST['passwrd']=='') {$status="Ingrese usuario y contraseña";}
elseif (
$_REQUEST['usuario']=='') {$status="No ingresó usuario";}
elseif (
$_REQUEST['passwrd']=='') {$status="No ingresó contraseña";}
else {
$status=$_REQUEST['status'];
$usuario=strtolower($_REQUEST['usuario']);
$passwrd=md5($_REQUEST['passwrd']);
$userpre=$_REQUEST['userpre'];
$intento=$_REQUEST['intento'];
$busqueda mysql_query("SELECT * FROM usuarios WHERE (pass='$passwrd' AND login='$usuario' AND STATUS_USUARIO='ACTIVO')"); 
if (!
$busqueda) {$status=mysql_error();}
//si la contraseña o el usuario es invalido
elseif (mysql_num_rows($busqueda)==0) {
$cnt001 mysql_query("SELECT * FROM usuarios WHERE LOGIN='$usuario'");
if (!
$cnt001) {$status2=mysql_error();}
elseif (
mysql_num_rows($cnt001)>0) {
$cnt002 mysql_query("INSERT INTO temp (TEMP_LOGIN) VALUES ('$usuario')");
if (!
$cnt002) {$status=mysql_error();}
//revisa si tiene mas de 3 intentos de entrada
$cnt003 mysql_query("SELECT * FROM temp WHERE TEMP_LOGIN='$usuario'"); 
if (!
$cnt003) {$status=mysql_error();}
//si el usuario tiene mas de 3 intentos fallidos no le permite el ingreso
elseif (mysql_num_rows($cnt003)>=3) {$status='<img src=atencion.gif align="absmiddle"> <b style="color: #FF0000;">¡Usuario Bloqueado!</b>';} else {$status="Usuario o contraseña invalido";}
};
}
else {
//revisa si tiene mas de 3 intentos de entrada
$cnt003 mysql_query("SELECT * FROM temp WHERE TEMP_LOGIN='$usuario'"); 
if (!
$cnt003) {$status2=mysql_error();}
//si el usuario tiene mas de 3 intentos fallidos no le permite el ingreso
elseif (mysql_num_rows($cnt003)>=3) {$status='<img src=atencion.gif align="absmiddle"> <b style="color: #FF0000;">¡Usuario Bloqueado!</b>';} else {
//borra los intentos previos
$qry002=mysql_query("DELETE FROM temp WHERE TEMP_LOGIN='$usuario'");
if (!
$qry002) {$status=mysql_error();}
//inicia  el contador de inactividad de la sesion
$_SESSION['hora']=time();
//establece los valores de las cookies
while($row mysql_fetch_array($busqueda)) {
setcookie("r33_01",encrypt($row["ID_USUARIO"]),time()+28800);
setcookie("r33_02",encrypt($row["LOGIN"]),time()+28800);
setcookie("r33_03",encrypt(mb_convert_case($row["NOMBRE"],MB_CASE_TITLE)),time()+28800);
setcookie("r33_04",encrypt($row["ROL"]),time()+28800);
setcookie("r33_05",encrypt("conectado"),time()+28800);
//setcookie("r33_04",mb_convert_case($row["ROL"],MB_CASE_TITLE),time()+28800);
//redireciona a la pagina principal

//encabezado html con tiempo de expiracion y cierre predefinidos
?>


<div class="wrap">

<link rel="stylesheet" href="estilos2.css">



<form action="" method="post" class="login">

<div><label>Usuario</label><input name="user" type="text" ></div>

<div><label>Contrase&ntildea</label><input name="password" type="password"></div>

<div><input name="login" type="submit" value="Entrar"></div>

</form>

    </div>

El error me sucede cuando ingreso las validaciones del usuario, que si se dejó algún campo en blanco, si se han equivocado 3 veces al intentar ingresar al sistema.

Agradezco su mas pronta respuesta, gracias.

Desconectado enunez80

  • Novato
  • *
  • Mensajes: 1
  • Puntuación: 0
    • Ver Perfil
Re:[Consulta]
« Respuesta #1 : 08 de noviembre de 2013, 04:27:33 pm »
Saludos Zhamir, no he revisado el código que publicaste en detalle, pero a simple vista parece que no tienes la llave de cierre del último bloque while, coloca la llave para cerrar el bloque que inicia con la instrucción while($row = mysql_fetch_array($busqueda)) {, por la estructura de tu código debería ir justo antes de la etiqueta de cierre de php (?>). Espero que esto te sirva de ayuda.

Desconectado Zhamir

  • Novato
  • *
  • Mensajes: 2
  • Puntuación: 0
    • Ver Perfil
Re:[Consulta]
« Respuesta #2 : 08 de noviembre de 2013, 04:38:11 pm »
Saludos enunez80, efectivamente me falta cerrar ese while, sin embargo aún persiste mi inconveniente, error en una línea inexistente, de igual manera muchas gracias por tu pronta respuesta, me has ayudado a evitar un futuro inconveniente.  ;D

Edito: verifiqué nuevamente mi código y eran varias sentencias que no había cerrado, se me ha solventado el inconveniente, gracias :D
« Última Modificación: 08 de noviembre de 2013, 05:01:47 pm por Zhamir »

Desconectado flavioSalas

  • Novato
  • *
  • Mensajes: 35
  • Puntuación: -1
    • Ver Perfil
Re:[Consulta]
« Respuesta #3 : 09 de noviembre de 2013, 04:05:35 am »
Que tal amigo! viendo tu codigo me doy cuenta que eres nuevo en php y que te has apoyado en manuales, libros o profesores que estan desactualizados
no te preocupes! todos alguna vez comenzamos a darnos golpes desde el comienzo

no se en verdad que tan certera sera la respuesta que voy a darte, hay parte en el codio (sobre todo en la estructura de la base de datos) que desconozco
y que hacen imposble una mejor respuesta.
 pero aqui te va una interpretacion personal de tu script, tal vez te ayude a mejorar lo que has hecho o... tal vez te sirva de un carajo!
 solo tengo que hablarte un poco de inyeccion sql, cuando tu usas las funciones de mysql con datos de formularios tu debes intentar hacer muda cualquier
comilla simple, porque el interprete de mysql puede creer que se concatena una instruccion con otra cuando ve la posibilidad de abrir o cerrar parantesis en
el query, en el manual oficial de php se habla de eso, busca ayuda alli, te implemente una simple (y tonta expresion regular que intenta silenciar comillas simples dentro del query) pero esa solucion es mediocre, lo mejor es aprender a usar la PDO y usar el metodo blind.

esperos que esas de esos carajos que intenta hacerlo y aprender mas... y no solo copiar y pegar cualquier disparate aqui te va una interpretacion y mejora de tu codigo

Código: [Seleccionar]
<?php

#encabezado para que no use la cache de archivos temporales de internet
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0"false); 
header("Pragma: no-cache"); 
#requires:
require_once('conexion.php');
require('funciones.php');
#creo la variable status
$status null;
# verificar que existen los datos del formulario:
# no usar request! request es ambiguo, puede ser post o get usar post si es un envio de de login
if(!isset($_POST['usuario']) or !isset($_POST['passwrd']) 
or !isset($_POST['userpre']) or !iset($_POST['intento'])){
exit("Formulario truncado!");
}
# aprende a filtrar los datos de formularios es muy facil inyectar sql si no estas preparado
#investiga como mejorar esto! cuando usas funciones de mysql_xxx es mas lavorioso la seguridad
$replace=array( "<'>","<\">");
$byText= array("''","\"\"");
$_POST['usuario']   =preg_replace($replace,$byText,$_POST['usuario']);
$_POST['password']=preg_replace($replace,$byText,$_POST['password']);
#aprende a usar el operador ternario
$status = (empty($_POST['usuario']) ?  "Ingrese usuario y contraseña" :status;
$status = (empty($_POST['passwrd'])) ? "No ingresó contraseña" status;
#pasando a minuscula el usuario
$usuario=strtolower($_POST['usuario']);
# es bueno que intentes codificar por md5 una contraseña, pero es un asco usar el md5 pelado
# la siguiente accion te crea un mejor cifrado: esta la invente yo! y es un colaito de varias :)
$password = (md5(md5($password)));
$password = crypt($password $md5);
$password hash("ripemd160",$md5);
#imagino que esto son input type hidden:
$userpre=$_POST['userpre'];
$intento=$_POST['intento'];
#busqueda? estas usando mysql_query , que verguenza! intenta actualizar hacia la PDO o mysqli!
# lo dejo tal cual para seguir el ritmo del trabajo: $busqueda = $sql , voy a usar esa variable por
# convension entre programers
$sql "SELECT * FROM usuarios WHERE  ";
$sql.= "pass='{$passwrd} AND login='{$usuario}' ";
$sql.= "AND STATUS_USUARIO='ACTIVO')"#precausion mysql si lo corres en linux puede dar error
# las columnas se diferencian mayusculas de minusculas, estas seguro que el campo STATUS_USUARIO
# esta creado en mayusculas?
#
# continuamos observa que puedes ahorra codigo si omites el  x==0 en la sentencias (mysql_num_rows);
# de igual mansera tu puedes ejecutar el query y el retorno hacer un condicional si es empty:
# casos posibles:
# 1 averiguando si hay registros:
if(!mysql_num_rows($sql)){
# ... codigo si no hay num_rows....
# }
#
# 2 ejecutando el query y viendo si hay un resultado;
# esta forma te la recomiendo y solo haces una consulta a la base de datos:
 $resource mysql_query($sql);
# ves como uso la misma variable $resource para el resultado final?  
$resource mysql_fetch_assoc($resource);
# aqui verificamos si existe algun registro
$resource = (!empty($resource)) ? false $resource;
# aqui tu condicional: si es valido o invalido:
if(!$resource){
# revisar que el usuario no tenga mas de tres intentos de logeo
$sql "SELECT * FROM usuarios WHERE LOGIN='$usuario'"
#otra vez! los campos no son indiferentes a mayusculas y minuscas en mysql (cuando corre en linux)
# no es lo mismo login que LOGIN, revisa esto amigo! lo dejo tal cual para seguir el ilo de tu codigo
$numErrorLogin mysql_query($sql);
$numErrorLogin =mysql_fetch_assoc($sql);
# aqui valido el numero de errores: para ello resumo el arreglo de respuesta
$numErrorLogin = (!$numErrorLogin[0]['TEMP_LOGIN'])? $numErrorLogin[0]['TEMP_LOGIN']++;
# si el numero de errores de loge es >=3
if($numErrorLogin >=3){
$status='<img src=atencion.gif align="absmiddle">';|
$status.=' <b style="color: #FF0000;">¡Usuario Bloqueado!</b> ';
}
# si el error de logeo es menor a tres entonces aumento uno al total de errores de logeo
else{
mysql_query("INSERT INTO temp (TEMP_LOGIN) VALUES ('$usuario')");
# no conosco tu base de datos pero deberia ser algo asi
$status "usuario invalido";
}
}
  
# si el login fue exitoso entonces comienza ha cagar el trabajo creando tus cookies
else{
# aqui crea variables de cookies... 
# amigo es mejor usar variables de session, es mas seguro y mas facil de implementar
# en vez de crear una cookie que puede ser manipulada del lado del cliente.

}
# bueno la variable  $status debe de servir de algo no?
if(is_null($status)){
header('location:dondeQuierasRedirigir.php');
}
else{
#imprimo si me da la gana el form...
echo $status;
}

Cualquier cosas me mandas un mensaje, para eso estamos no?
[/b]
« Última Modificación: 09 de noviembre de 2013, 04:29:45 am por flavioSalas »

Desconectado flavioSalas

  • Novato
  • *
  • Mensajes: 35
  • Puntuación: -1
    • Ver Perfil
Re:[Consulta]
« Respuesta #4 : 09 de noviembre de 2013, 04:07:01 am »
   recuerda investigar PDO!
« Última Modificación: 09 de noviembre de 2013, 04:31:05 am por flavioSalas »