Stack Overflow en español Asked on November 17, 2021
Buen dia tengo un problema con el inicio de session de mi programa
se supone que valida cuando es nuevo el registro en automatico me manda datos mi tabla pero no logro que me salga
los esta tomando con el id_profesor el cual valida el usuario de mi tabla
copio el codigo
<?php
include ("conecta.php");
if (mysqli_connect_errno()) {
echo "Error connecting to database. ".mysqli_connect_error();
}
session_start();
$usuario = mysqli_real_escape_string($conexion, $_POST['usuario']);
// No hagas modificaciones al password que tecleó el usuario
$password = $_POST['password'];
if (!$usuario || !$password) {
echo "Both fields must be filled out.";
return;
}
// Busca solo por nombre de usuario
$query = "SELECT rol, password from registro WHERE usuario='$usuario'";
$result = mysqli_query($conexion, $query);
$rows = mysqli_num_rows($result);
if ($rows == 1) {
// Leer consulta
$datos = mysqli_fetch_assoc($result);
// Verificar password
if(password_verify($password, $datos['password'])) {
// Guarda en sesión nombre y rol, lo vas a necesitar en otras páginas
$_SESSION['usuario'] = $usuario;
$_SESSION['rol'] = $datos['rol'];
// Comparar dato
if($datos['rol'] == 1) {
header("Location: admin/menu.php");
}
else if ($datos['rol'] == 2) {
$consulta="SELECT * FROM datos WHERE id_prof='".$_SESSION['usuario']."'";
$respuesta=mysqli_query($conexion,$consulta);
if(!$respuesta){
die('Algo salio mal'.mysqli_error($conexion));
else
{ if(!$rowlocal=mysqli_fetch_array($respuesta))
header("location:profesor/datos.php");
else
header("location:profesor/index.php");
}
}
header("Location: profesor/index.php");
}
else {
header("Location: investigaciones.php");
}
// Finalizar ejecución de script
exit;
}
}
// No es necesario un else, ni hacer la salida con echo
?>
<script type="text/javascript">
alert("intentelo de nuevo O solicita registro");
window.location.href="index.html";
</script>
en medio del codigo me sale el siguiente error que me sale
Parse error: syntax error, unexpected ‘else’ (T_ELSE) in C:Program FilesAmppswwwesfmverificar.php on line 49 se supone que el codigo debe manetner un formato el cual si es nuevo el usuario me aparesca el archivo datos.php
Tengo muchas cosas que pueden solucionar tu codigo y hacerlo mas ágil. Pero me di cuenta que falta algo que es fundamental. Y es el else que sigue al if()
del inicio.
Y además te mostrare como conectarte a la base de una forma segura. Con statements.
<?php
include ("conecta.php");
if (mysqli_connect_errno()) {
echo "Error connecting to database. ".mysqli_connect_error();
}else{
//No es necesario iniciar la sesion antes. Ya que el usuario no esta ni autentificado.
$usuario = $_POST['usuario']; /*No es necesario escapar las variables ya que los Prepared statements hacen eso por nosotros.*/
// No hagas modificaciones al password que tecleó el usuario
$password = $_POST['password'];
if (!$usuario || !$password) {
//No estabas devolviendo nada. La forma correcta es esta.
return "Both fields must be filled out.";
}
// Busca solo por nombre de usuario
$query = "SELECT rol, password from registro WHERE usuario = ?"; /*NUNCA uses este formato '$var'
Ya que puede traer muchos problemas por hackeos.*/
$conexion = //Aqui debes colocar la funcion que te abre la conexión dentro de conecta.php
$stmt = $conexion->prepare($query); //Preparamos la consulta
$stmt->bind_params("s", $usuario); // Le damos los parametros a usar
$stmt->execute(); //ejecutamos la consulta
$rows = $stmt->get_result()->fetch_assoc(); // Obtenemos los resultados y los guardamos en $rows.
if ($rows) {
// Verificar password
if(password_verify($password, $rows['password'])) {
// Guarda en sesión nombre y rol, lo vas a necesitar en otras páginas
$_SESSION['usuario'] = $usuario;
$_SESSION['rol'] = $rows['rol'];
// Comparar dato
if($rows['rol'] == 1) {
header("Location: admin/menu.php");
}
else if ($rows['rol'] == 2) {
$consulta="SELECT * FROM datos WHERE id_prof='".$_SESSION['usuario']."'";
$respuesta=mysqli_query($conexion,$consulta);
if(!$respuesta){
die('Algo salio mal'.mysqli_error($conexion));
else
{ if(!$rowlocal=mysqli_fetch_array($respuesta)){
header("location:profesor/datos.php");
}else{ //MUCHO CUIDADO CON LAS LLAVES.
header("location:profesor/index.php");
}
}
}
header("Location: profesor/index.php");
exit; //SIEMPRE USA EXIT; cuando redireccionas por header()
}
else {
header("Location: investigaciones.php");
exit;
}
// No es necesario finalizar la ejecución del script,
}
}
}// Aqui finaliza el else. Debido a que si no hay error en la BD, pues que continue ejecutando.
?>
<script type="text/javascript">
alert("intentelo de nuevo O solicita registro");
window.location.href="index.html";
</script>
Podes ver mas sobre statements preparados aquí. Y así estaría. Si no funciona algo escribime. No tengo problemas en explicar. Soy aficionado :D
Y aca abajo te adjunto que deberias de tener dentro de conecta.php
<?php
function OpenCon(){
$dbhost = "localhost";
$dbuser = "user";
$dbpass = "password";
$db = "database";
$conexion = new mysqli($dbhost, $dbuser, $dbpass,$db);
if($conn === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
return $conn;
}
function CloseCon($conexion){
mysqli_close($conexion);
}
?>
Por lo tanto, si te fijas en el codigo que yo te corregí, encontrarás que en un momento te pongo entre corchetes:
//Aqui debes colocar la funcion que te abre la conexión dentro de conecta.php
Bueno, esto se traduce a que debes colocar:
$conexion = OpenCon();
#Sigue el codigo.
Eso es todo. Recordá chequear POR FAVOR los corchetes.
Answered by idunno on November 17, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP