Problema con Apache y PHP

bonilleta

Buenas a todos, bueno estoy creando una página para el proyecto final. Os hago un esquema de lo que estoy utilizando para crearla:

          -Apache (PHPMyAdmin)
          -Dreamveawer CC
          -Lenguaje PHP

La question es que me encuentro en la fase de AUTENTIFICACION DE USUARIOS (CONECTAR USUSARIO, CONEXION MYSQL ETC)

Tengo todo creado (tabla de ususarios en phpmyadmin, la conexion mysql (funciona) , y las paginas que son : login (donde esta el formulario) , la pagina donde se redirige una vez has insertado correctamente el user, y la pagina de error cuando fallas la autentificacion.

Ya tengo la pagina donde se redirige en acceso restringido.

En la pagina de login tengo el formulario con los dos campos usuario y contraseña etc etc. La question es que, cuando aun no he creado el "conectar usuario", puedo visualizar la pagina login.php correctamente en el servidor con sus links y sus menus etc. Pero cuando creo el "conectar usuario", cuando trato de visualizar la pagina login.php en el servidor de golpe el servidor lanza un mensaje y pone EL SERVIDOR APACHE HA DEJADO DE FUNCIONAR, y seguidamente en la pagina pone problema al cargar la pagina.

Tengo bien hecho el "conectar usuario" que no es nada dificil por si acaso dejo capturas:

Aver si me podeis ayudar gracias!

Merkury

Mas que screenshots, que no sirven para nada, pega el codigo del login.php

2 respuestas
Tunnecino

Suena a error de servidor, por que algo en tu código no está bien, como dice #2, sin el código como que no vamos a poder ver el error.

Luego, no es lo mismo Apache que PHPMyAdmin, lo suyo también sería que tuvieses bien configurado un vhost o al menos los logs de apache, para ver exactamente el error que te tira.

1 respuesta
bonilleta

#2 #3 Aqui os pongo el codigo de la Conexion de Usuario. El servidor que utilizo como prueba es EasyPhp en el qual dentro incluye PhpMyadmin y Mysql.

<?php virtual('/Connections/conexion_iniciarsesion.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } ?> <?php // *** Validate request to login to this site. if (!isset($_SESSION)) { session_start(); } $loginFormAction = $_SERVER['PHP_SELF']; if (isset($_GET['accesscheck'])) { $_SESSION['PrevUrl'] = $_GET['accesscheck']; } if (isset($_POST['usuario'])) { $loginUsername=$_POST['usuario']; $password=$_POST['contraseña']; $MM_fldUserAuthorization = ""; $MM_redirectLoginSuccess = "/introducirproductos.php"; $MM_redirectLoginFailed = "/erroriniciarsesion.php"; $MM_redirecttoReferrer = false; mysql_select_db($database_conexion_iniciarsesion, $conexion_iniciarsesion);
$LoginRS__query=sprintf("SELECT usuario, `contraseña` FROM login WHERE usuario=%s AND `contraseña`=%s", GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "-1"));
$LoginRS = mysql_query($LoginRS__query, $conexion_iniciarsesion) or die(mysql_error()); $loginFoundUser = mysql_num_rows($LoginRS); if ($loginFoundUser) { $loginStrGroup = "";
if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();} //declare two session variables and assign them $_SESSION['MM_Username'] = $loginUsername; $_SESSION['MM_UserGroup'] = $loginStrGroup; if (isset($_SESSION['PrevUrl']) && false) { $MM_redirectLoginSuccess = $_SESSION['PrevUrl']; } header("Location: " . $MM_redirectLoginSuccess ); } else { header("Location: ". $MM_redirectLoginFailed ); } } ?>

introducirproductos.php (es la pagina que te redirige cuando autentificas correctamente)
erroriniciarsesion.php (cuando falla el login la pagina que sale)
conexion_iniciarsesion (es el archivo que crea la conexion a la base de datos( funciona porque lo comprueba el programa)

Gracias de antemano

Stricken

Por curiosidad... ¿Eso te lo ha generado Dreamweaver?

1 respuesta
B

No lo hagas con Dreamweaver, suele dar bugs.

Prueba este, https://pilaresdelcodigo.wordpress.com/2014/04/30/sistema-de-usuarios-v2-phpmysqlbootstrap/

bonilleta

#5 Si lo genera mediante la herramienta que tiene conectar usuario.

1 respuesta
Stricken

#7 Pues te recomiendo que lo hagas a mano, si yo fuera parte del tribunal que corrige eso te suspendía, otra cosa es que lo que estudies no tenga nada que ver con esto y hayas hecho una web porque sí.

Pueden ser mil cosas, pero prueba a quitar la ñ de contraseña.

1 respuesta
DarkSoldier

dime que no estudias DAW please

1 respuesta
E

Iba a decir que, bonito necromancer de un thread de 2002, pero me he fijado y es de hace un par de días.

3 1 respuesta
bonilleta

#7 #8 #9 #10jajaja no aver no estudio DAW ni programación ni nada parecido sino pareceria un poco mongolo preguntando cosas que tendría que aprender estudiando yo mismo. Enfin, dejando aparte lo que estudio, he hecho el codigo a mano como me dijisteis,ahora la conexion es correcta y todo bien, lo unico que me falla es que ponga lo que ponga en los campos siempre me lleva a la misma pagina, es decir ,ponga el usuario bien o mal, siempre lleva a la pagina de error. Os inserto codigo aver si encontrais 1000 fallos.

<?PHP
require ('../conexion.php');
mysql_query("SET NAMES 'utf8'");

//$usuario=$fila['usuario']; 
//$password=$fila['password'];  <-NO SE SI SERIA DE ESTA MANERA O LAS  DE ABAJO

$usuario=$_POST["usuario"];
$password=$_POST["password"];

//$usuario=$filas($_POST['usuario']); 
//$password=$filas($_POST['password']);

$consulta="SELECT * FROM login";

//$consulta = "SELECT * FROM login WHERE usuario='$usuario' and password='$password'";

$respuesta= mysql_query($consulta, $mysql) or die("Inicio de Sesión erróneo"); <-DUDO QUE ESTÉ CORRECTO

$fila=mysql_fetch_object($respuesta);


if($usuario==$fila->usuario && $password==$fila->password)
{	
	header('Location: ../introducirproductos/formularioproductos.php'); AQUI ES LA PAGINA QUE EN TEORIA LLEVA CUANDO AUTENTIFICAS CORRECTAMENTE
}
else 
{
	header('Location: erroriniciarsesion.php'); <- ESTA ES LA PAGINA DE ERROR
} 

?>
E

Los comentarios del código es la forma correcta de hacerlo.

Se me ocurre una idea, que tal si pruebas haciendo comparaciones directamente sobre el código?

$usuario=$_POST["usuario"];
if $usuario == "pepe" {
    echo "correcto";
}

Ve probando cosillas ;)

N

Así a bote pronto tu desde el login envías la contraseña, el mail (o usuario) y login, que viene a ser el valor del formulario, es decir, si el formulario tiene algo o simplemente le ha dado a enviar sin escribir nada.

Si alguno de los campos no está lleno devolverá un false y te reenviará a la pagina de control de errores.

Si por el contrario ambos están llenos (que estén en un formato válido es cosa del front-end) entonces creas el la db y trabajas sobre ella. Haces la query con el mail (username) y la contraseña (En este caso como es un ejemplo básico la he puesto a pelo pero lo suyo es usar algún tipo de encrypt) y, COMO SOMOS BUENOS PROGRAMADORES Y NO HAY DATOS DUPLICADOS EN LA DB, si el Array() de rows devuelto tiene solo una fila (->numRows) el login habrá sido correcto y lo redireccionaremos donde pertoque. Si el numRows es menor de 1 (No contemplo ni de lejos que sea >1, si eso te pasa deja el SQL para otras personas xD) cazamos el error y redireccionamos a la pagina de error ya nombrada.

<?php
session_start();
  require_once('../database.php');
  require_once('../functions.php');

  if(empty($_POST['login']){
    echo "NO PASS OR NO MAIL";

if(empty($_POST['passwd'])){
  $_SESSION['noPasswdError']=true;
}

if (empty($_POST['mail'])){
  $_SESSION['noMailError']=true;
}

redirect('login-signin.php');
/*Una página que muestra el pertocante error e invita al usuario o a darse de alta o a recuperar la pass*/

  }else{
    $db=new database();

$db->query("SELECT * FROM usuario WHERE mail='".$_POST['mail']."' AND paswd='".$_POST['passwd']."'");

if($db->numRows()<1){
  $_SESSION['loginError']=true;
  redirect('login-signin.php');
}else{
    $rows=$db->rows();
    redirect(/*Donde sea*/);

}
  }

?>

Esta es la función redirect que uso para que no me de problemas de headers ni js ni hostias el servidor


function redirect($url)
	{
	    if (!headers_sent())
	    {    
header('Location: '.$url); exit; } else {
echo '<script type="text/javascript">'; echo 'window.location.href="'.$url.'";'; echo '</script>'; echo '<noscript>'; echo '<meta http-equiv="refresh" content="0;url='.$url.'" />'; echo '</noscript>'; exit; } }
1 respuesta
MTX_Anubis

#13 Ninguna validación es exclusiva del front end porque se pueden saltar. Si se hacen en el front end es para mejorar la experiencia del usuario.

La validación de datos de entrada normalmente se hace en los controladores o inyectándola antes de que se llame a estos (ojo que la de negocio debería hacerse en otra parte) pero nunca se deja en exclusiva al front end porque cualquier usuario puede saltársela.

2 respuestas
N

#14 Esta claro que si, por ejemplo, desahilitas js en el browser mierda para todos. Pero viendo que está empezando no voy a ponerme a enseñarle un regex kilométrico(boomer ¡AH!) por que igual me envía a capar ranas xD

bonilleta

Bueno he provado y de momento asi funciona, aunque me gustaria poder arreglar mi codigo creado de antes ya que asi se donde esta el fallo y donde la he cagado. #14 me ha servido de mucha ayuda aunque desde mi ignorancia es diferente codigo,es decir,hace lo mismo pero planteado de una manera diferente, como he dicho me sirve pero y si me resolveis la duda con el codigo que había propuesto? Mas que nada para saber donde hay fallos.

Pero de todas maneras muchas Gracias :D

Usuarios habituales

  • bonilleta
  • NoGoonie
  • elraro
  • Ekisu
  • DarkSoldier
  • Stricken
  • Tunnecino