Foros del Web » Programando para Internet » PHP »

Problemas o ??????

Estas en el tema de Problemas o ?????? en el foro de PHP en Foros del Web. Tengo un problema con un servidor en internet, no se si sera la programacion o el servidor, puesto que de manera local me sale el ...
  #1 (permalink)  
Antiguo 15/09/2004, 02:23
Avatar de JuanKa  
Fecha de Ingreso: septiembre-2004
Mensajes: 468
Antigüedad: 20 años, 2 meses
Puntos: 1
Problemas o ??????

Tengo un problema con un servidor en internet, no se si sera la programacion o el servidor, puesto que de manera local me sale el logueo de usuarios perfectamente.

Aca va el programa y me dice que el error esta en el texto rojo

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/dinfopin/public_html/Php/autentificar.php on line 9



<?
include('config.php'); //incluimos el config.php que contiene los datos de la conexión a la db
$user=$_POST["txt_usuario"];
$pass=$_POST["txt_clave"];

//echo $user; echo $pass;


$consulta=mysql_query("SELECT * FROM usuarios WHERE nick='$user' and contrasena='$pass' ");
if($user_ok = mysql_fetch_array($consulta)) //si existe comenzamos con la sesion, si no, al index

{
session_register("usuario"); //registramos la variable usuario que contendrá el nick del user
session_register("idusuario"); //registramos la variable idusuario que contendrá la id del user
session_register("level"); //registramos la variable level que contendrá el level del user
session_register("nom"); //registramos la variable level que contendrá el level del user
session_register("ape"); //registramos la variable level que contendrá el level del user

//damos valores a las variables de la sesión
$_SESSION[usuario] = $user_ok["nick"]; //damos el nick a la variable usuario
$_SESSION[idusuario] = $user_ok["id"]; //damos la id del user a la variable idusuario
$_SESSION[level] = $user_ok["nivel"]; //damos el level del user a la variable level
$_SESSION[nom] = $user_ok["nombres"]; //damos el level del user a la variable level
$_SESSION[ape] = $user_ok["apellidos"]; //damos el level del user a la variable level

Header("Location: verificar.php"); //volvemos al login donde nos saldrá nuestro menú de usuario
}
else
{
include('cabecera.php');
echo "<table width='770' border='0' cellpadding='0' cellspacing='0' bgcolor='#E6E6E6' align='center'>";
echo "<tr>";
echo "<th>";

echo "<br>"."<br>"."<br>"."<br>"."<br>"."<br>"."<br>"." <br>";
echo "<table width='500' border='2' align='center'>";
echo "<tr>";
echo "<th>";

echo "<center><strong><font color=\"#990000\" face=\"Verdana\">Su Usuario y/o Clave son incorrectos<br><META HTTP-EQUIV=Refresh CONTENT=\"4; URL= ../index.php\">\n</font></strong></center>";
echo "<br>"."<center><strong><font color=\"#0000ff\" face=\"Verdana\">Espere unos segundos...</font></strong></center>";
echo "</th>";
echo "</tr>";
echo "</table>";
echo "<br>"."<br>"."<br>"."<br>"."<br>"."<br>"."<br>"." <br>";

echo "</th>";
echo "</tr>";
echo "</table>";
include('pie_pagina.php');
}
?>
  #2 (permalink)  
Antiguo 17/09/2004, 16:24
Avatar de yoshipp  
Fecha de Ingreso: agosto-2004
Mensajes: 8
Antigüedad: 20 años, 3 meses
Puntos: 0
Casi todas las funciones devuelven un codigo indicando si hubo algun error. Lo normal es q este mal el nombre de la base de datos, el usuario o la clave, y ni siquiera conecte correctamente a la base de datos en el mysql_connect. Decia un profe q tuve q mas de un 50% deel codigo simplemente se encarga de comprobar los errores, o deberia.
  #3 (permalink)  
Antiguo 17/09/2004, 17:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
En principio .. el uso de sesiones que haces NO es correcto ..

No debes mezclar session_register() si usas $_SESSION (los arrays superglobales) .. (Si usas PHP 4.1.0 o superior .. usa sólo $_SESSION pero no los mezcles)

Por lo demás .. no sé si en ese tal "config.php" harás un:

session_start();

pero es NECESARIO que lo uses antes de pretender acceder a una variable de sesión (crear/leer) vía $_SESSION .

La función session_register() hace no requiere de un session_start() .. o puede ser que uses session.auto_start en tu php.ini a ON (inicio de sesiones automático siempre) .. Por eso te funciona en un servidor y en otro no ..

más info:
www.php.net/session

Por lo demás .. este tipo de construcciones tampoco son correctas ..
consulta=mysql_query("SELECT * FROM usuarios WHERE nick='$user' and contrasena='$pass' ");
if($user_ok = mysql_fetch_array($consulta)) //si existe comenzamos con la sesion, si no, al index
{

debes hacer:

Código PHP:
$consulta=mysql_query("SELECT COUNT(*) FROM usuarios WHERE nick='$user' and contrasena='$pass' ");
if (
mysql_result($consulta,0) == 1){
$user_ok mysql_fetch_array($consulta);

// etc ...
header ("Location: ....");
exit;

Es más optimo usar COUNT() y contar el total de registros que arrojó la consulta vía SQL (que arroja un sólo registro/campo con ese tatal y por eso se accede con mysql_result() .. ) que hacer un mysql_num_rows() (que también podrías usar). A su vez .. tus usuarios han de ser únicos (supongo) así que comparo (IF) a 1 por qué eso espero .. 1 sólo resultado . ni más ni menos.

El exit; despues del header() te asegura que se termina la ejecución del script en ese punto .. el resto una vez enviado un "header()" de Location en principio lo que dices ahí es "saltar/ir hacia otro script/página". PHP, en ese caso sigue ejecutando el código restante .. en tu caso como está bajo un condicional (if) y el flujo del código llega este al final .. no tendrías problemas si usas o no un "exit" ahí, pero .. en otros casos sí, por eso es recomendable usarlo siempre .. así ahorras también "else" en muchos casos.

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 21:41.