[PHP] aiuto creazione login

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Salve a tutti,

Dovrei fare una pagina di login che poi una volta connessi si reindirizza al profilo della persona connessa. Ho il seguente esempio che so che funziona ma nel nuovo form no. Considerate che lo sto facendo con mysqli, quindi sicuramente va modificato qualche cosa. Inoltre non ho nemmeno la criptazione della password come sta in questo esempio. Qiesto è il codice:

PHP:
<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8">
        <title>Login</title>
                <link href="style2.css" rel="stylesheet" type="text/css">

    </head>
    <body>
        <div class="intestazione">
            <div class="float_left">
                <?php require_once "data.php";?>
        </div>
     
                  <div class="float_right">
      <span>
          <h1>
        Username: <input type="text" id="login" name="login" autofocus>
        Password: <input type="password" id="password" name="password" >
</span> </div> </h1>       
          </hr>

        <?php
       require_once("db_connect.php");
       //echo "</hr>";
       
       ob_start();//visto che usi header popo l'l'uotput html
session_start();//aggiungi questa e
if(isset($_POST['log'])){
   
   $usn=htmlspecialchars(trim($_POST['username']));
//  $pas=md5(trim($_POST['password']));      Questo è l'esempio che avevo  e questa riga qua sotto è stata modificata

    $password=(trim($_POST['password']));
   
  //$nome = mysql_real_escape_string(strtolower(trim ($_POST['nome'])));
    $q=mysql_query("SELECT * FROM utenti WHERE username='$usn' AND password='$pas' AND attivo = 1"); 
   
    if(mysql_num_rows($q) > 0){
        $riga=mysql_fetch_array($q);//aggiungi questa e

        $_SESSION['id'] = $riga['id'];
       
        $_SESSION['nome'] = $riga['nome'];
   
        header("location: paginaris.php");
    }else{
        header("location: failed.php");
    }
    exit();
}else{
   

ob_end_flush();
}
?>
    <input type="submit" name="log" value="Invio dati" id="submit" class="centering" />

    </body>
</html>

Sembra che il tasto "invio" non vada. Mi potreste dare una manoa risolvere per favore ??? Ho visto che è fatto con il vecchio metodo mysql come accennavo prima. Grazie.
 
Allora,

Nuova situazione e login corretto. Questo è la correzione che ho fatto:

PHP:
<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8">
        <title>Login</title>
                <link href="style2.css" rel="stylesheet" type="text/css">

    </head>
    <body>
      
<form method="POST" autocomplete="off" action="<?php $_SERVER['PHP_SELF'] ?>">

        <div class="intestazione">
            <div class="float_left">
                <?php require_once "data.php";?>
        </div>
    
                  <div class="float_right">
      <span>
          <h1>
        Username: <input type="text" id="login" name="login" autofocus>
        Password: <input type="password" id="password" name="password" >
</span> </div> </h1>      

        <?php
       require_once("db_connect.php");
       //echo "</hr>";
   ob_start();//visto che usi header popo l'l'uotput html
session_start();//aggiungi questa e


if(isset($_POST['log'])){

$username = htmlspecialchars(trim($con, $_POST['username']));
$password = htmlspecialchars(trim($con, $_POST['password']));

  
  //$nome = mysql_real_escape_string(strtolower(trim ($_POST['nome'])));
    $q=mysql_query("SELECT * FROM utenti WHERE username='$username' AND password='$password' AND attivo = 1");
  
    if(mysql_num_rows($q) > 0){
        $riga=mysql_fetch_array($q);//aggiungi questa e

        $_SESSION['id'] = $riga['id'];
      
        $_SESSION['nome'] = $riga['nome'];
  
        header("location: paginaris.php");
    }else{
        header("location: failed.php");
    }
    exit();
}    
  
?>
    <input type="submit" name="log" value="Invio dati" id="submit" class="centering" />

    </body>
    </form>
</html>

Se digito il mio nome la mia password mi dice failed e mi visualizza la pagina: "errore 404". Ora mi domando se tutto è corretto (spero) perchè non mi fa connettere e non mi reinderizza al profilo ???? Spero che voio mi possiate aiutare grazie. Ricordo che la password non è criptata attualmente. La dovrp criptare. Se mi mettete anche l'esempio per quando sarà criptata in sha1 mi fate una cortesia. Grazie.
 
Scusate ho sbagliato tutto,

Mi sembrava di avere corretto il tutto onvece solo qualche riga. Questo è il codcie completo di login corretto e rivisto:

PHP:
<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8">
        <title>Login</title>
                <link href="style2.css" rel="stylesheet" type="text/css">

    </head>
    <body>
       
<form method="POST" autocomplete="off" action="<?php $_SERVER['PHP_SELF'] ?>">

        <div class="intestazione">
            <div class="float_left">
                <?php require_once "data.php";?>
        </div>
     
                  <div class="float_right">
      <span>
          <h1>
        Username: <input type="text" id="login" name="login" autofocus>
        Password: <input type="password" id="password" name="password" >
</span> </div> </h1>


        <?php
       require_once("db_connect.php");
     //  echo "</hr>";
   ob_start();//visto che usi header popo l'l'uotput html
session_start();//aggiungi questa e


if(isset($_POST['log'])){

$username = htmlspecialchars(trim($con, $_POST['username'])); 
$password = htmlspecialchars(trim($con, $_POST['password'])); 

   
  //$nome = mysql_real_escape_string(strtolower(trim ($_POST['nome'])));
    $q=mysqli_query("SELECT * FROM utenti WHERE username='$username' AND password='$password' AND attivo = 1"); 
   
    if(mysqli_num_rows($con, $q) > 0){
        $riga=mysqil_fetch_array($con,$q);//aggiungi questa e

        $_SESSION['id'] = $riga['id'];
       
        $_SESSION['nome'] = $riga['nome'];
   
        header("location: paginaris.php");
    }else{
        header("location: failed.php");
    }
    exit();
}     
   
?>
    <input type="submit" name="log" value="Invio dati" id="submit" class="centering" />

    </body>
    </form>
</html>

Perdonatemi per la distrazione.
 
ciao
intanto prova così
PHP:
<?php
ob_start();
session_start();
require_once("db_connect.php");
if(if(isset($_POST['log'])){
    $username = htmlspecialchars(trim($_POST['username']));
    $password = sha1($_POST['password']);//quando fai l'nsert di registrazione dell'utente devi criptare la pass prima dell'insert
    $q=mysqli_query($conn,"SELECT * FROM utenti WHERE username='$username' AND password='$password' AND attivo = 1");
    if(mysqli_num_rows($q) > 0){
        $riga=mysqil_fetch_array($q);
        $_SESSION['id'] = $riga['id'];
        $_SESSION['nome'] = $riga['nome'];
        header("location: paginaris.php");
    }else{
        header("location: failed.php");
    }
    exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
<link href="style2.css" rel="stylesheet" type="text/css">
</head>
<body>
<form method="POST" autocomplete="off" action="<?php $_SERVER['PHP_SELF'] ?>">
        Username: <input type="text" id="login" name="login" autofocus>
        Password: <input type="password" id="password" name="password" >
    <input type="submit" name="log" value="Invio dati" id="submit" class="centering" />
</form>
<?php
ob_end_flush():
?>
</body>
</html>
poi ho tolto i vari div, h1, span perchè li avevi un po' incasinati (devi rifarli) però attento a come li metti, esempio
tu hai fatto <span><h1></span></h1> è un errore, corretto <span><h1></h1></span>
poi attento hai messo il tag </form> dopo il tag </body>
 
Ciao Borgo e salve a tutti,

Allora ho ritestato di nuovo il tuo codice ma mi da pagina failed.php quando digito username e password. Questo è il codice modificato senza criptazione della password e con la versione nuona mysqli. Se ci sono delle modifiche da fare ben vengano, graze. in teoria quando mi connetto dovrebbe comparire sul browser paginaris.php e non failed failed solo se è errato username e passowrd. Ecco il codice:

PHP:
<?php
ob_start();
session_start();
require_once("db_connect.php");
if(isset($_POST['log'])){
    $username = htmlspecialchars(trim($_POST['username']));
    //$password = sha1($_POST['password']);//quando fai l'nsert di registrazione dell'utente devi criptare la pass prima dell'insert
    $password = htmlspecialchars(trim($_POST['password']));//quando fai l'nsert di registrazione dell'utente devi criptare la pass prima dell'insert
    
    $q=mysqli_query($con,"SELECT * FROM utenti WHERE username='$username' AND password='$password' AND attivo = 1");
    if(mysqli_num_rows($con, $q) > 0){
        $riga=mysqil_fetch_array($q);
        $_SESSION['id'] = $riga['id'];
        $_SESSION['nome'] = $riga['nome'];
        header("location: paginaris.php");
    }else{
        header("location: failed.php");
    }
    exit();
}

?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
<link href="style2.css" rel="stylesheet" type="text/css">
</head>
<body>
<form method="POST" autocomplete="off" action="<?php $_SERVER['PHP_SELF'] ?>">
        Username: <input type="text" id="login" name="login" autofocus>
        Password: <input type="password" id="password" name="password" >
    <input type="submit" name="log" value="Invio dati" id="submit" class="centering" />
</form>
<?php
ob_end_flush();
?>
</body>
</html>
 
Allora ho apportato alcune piccole modifiche ma il risultato è sempre lo stesso non mi fa logare. Questo è l'errore che mi da attualmente:

object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(11) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) }

Questo è il codice ricorretto e modificato:

PHP:
<?php
ob_start();
session_start();
require_once("db_connect.php");
if(isset($_POST['log'])){
    $username = htmlspecialchars(trim($_POST['username']));
    //$password = sha1($_POST['password']);//quando fai l'nsert di registrazione dell'utente devi criptare la pass prima dell'insert
    $password = htmlspecialchars(trim($_POST['password']));//quando fai l'nsert di registrazione dell'utente devi criptare la pass prima dell'insert
    
    //$q=mysqli_query($con,"SELECT * FROM utenti WHERE username='$username' AND password='$password' AND attivo='1'");
    
 $q=mysqli_query($con,"SELECT * FROM utenti WHERE username='$username' AND password='$password' AND attivo = 1") or die(mysqli_error()); 
 var_dump($q);   
 if(mysqli_num_rows($q) == 1){
        $riga=mysqili_fetch_array($q);
        $_SESSION['id'] = $riga['id'];
        $_SESSION['nome'] = $riga['nome'];
        
  /*     header("location: paginaris.php");
    }else{
        header("location: failed.php");
    }
    exit();
*/
 }
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
<link href="style2.css" rel="stylesheet" type="text/css">
</head>
<body>
<form method="POST" autocomplete="off" action="<?php $_SERVER['PHP_SELF'] ?>">
        Username: <input type="text" id="login" name="login" autofocus>
        Password: <input type="password" id="password" name="password" >
    <input type="submit" name="log" value="Invio dati" id="submit" class="centering" />
</form>
<?php
ob_end_flush();
?>
</body>
</html>

Ho dovuto decomentare i reindirizzamenti sennò non mi mostrava l'errore. Qualcuno mi sa risolvere questo dilemma ??? Importante, quando clicco su "accetta i termini ecc. ecc.", attivo diventa da 0 a 1 automaticamente senza dover fare un update o inviare un'email di conferma.
 
pap io di solito divido in due pezzio la query cosi con il var dump individuo meglio il problema ad esempio
PHP:
$query = "SELECT * FROM tabella  order BY resa DESC,pt desc";
var_dump($query);
$result1 = $db->query($query);

comunque sia secondo me sono gli apici nella select

PHP:
$q=mysqli_query($con,"SELECT * FROM utenti WHERE username='".$username."' AND password='".$password"' AND attivo = 1") or die(mysqli_error());

dentro gli apici singoli va messo
PHP:
".$username."
 
Ciao Borgo,

Ho scoperto il motivo c'ho lavorato tutto il giorno ieri con l'aiuto di un mio amico. In pratica nell'input dello Username c'è un errore madornale da parte mia. Ossia ho lasciato l'id e il Name uguali al copia e incolla della password in pratica mi sono dimenticato di sostituirli. Ora riesco a connettermi. Però mi da degli errori su mysqli. Che non capisco dove sbaglio. I classici errori di ripetizione. Ora non ho il pc sottomano. Evidentemente ho messo troppi $con nelle query e in mysqli_fetch ecc. Perdonami la dicitura non la ricordo. Devo sistemare quelli
Nel pome posto ol listato x correttezza vedo l'aiuto che mi hai dato.
 
Salve a tutti e ciao Borgo,

Come accennavo nel pome ti invio il codice semi corretto. Mi da un sacco di errori di questo tipo:

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, object given in at line 68 Warning: mysql_query() expects parameter 1 to be string, object given pin at linee 83 Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given at line 83
E questo come accennavo è il file semicorretto:

Codice:
<?php
ob_start();
session_start();
require_once("db_connect.php");
if(isset($_POST['log'])){
    $username = htmlspecialchars(trim($_POST['username']));
    //$password = sha1($_POST['password']);//quando fai l'nsert di registrazione dell'utente devi criptare la pass prima dell'insert
    $password = htmlspecialchars(trim($_POST['password']));//quando fai l'nsert di registrazione dell'utente devi criptare la pass prima dell'insert
   
    $q=mysqli_query($con,"SELECT * FROM utenti WHERE username='$username' AND password='$password' AND attivo = 1");
 $nr = mysqli_num_rows($q);
    if( $nr > 0){
        $riga=mysqli_fetch_array($q,MYSQLI_ASSOC);
        $_SESSION['id'] = $riga['id'];
        $_SESSION['nome'] = $riga['nome'];
        header("location: paginaris.php");
    }else{
        header("location: failed.php");
    }
    exit();
}

?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
<link href="style2.css" rel="stylesheet" type="text/css">
</head>
<body>
<form method="POST" autocomplete="off" action="<?php $_SERVER['PHP_SELF'] ?>">
        Username: <input type="text" id="username" name="username" autofocus>
        Password: <input type="password" id="password" name="password" >
    <input type="submit" name="log" value="Invio dati" id="submit" class="centering" />
</form>
<?php
ob_end_flush();
?>
</body>
</html>

Dove sbaglio per il mysqli ???? C'è qualcosa di troppo ????? Grazie spero di ricevere un aiuto per chiarimenti.
 
io non sono espertissimo ai livelli di borgo,cricic etc, cerco di darti qualche spunto in base anche alla mia esperienza e leggendo il manuale http://php.net/manual/it/mysqli-result.fetch-array.php secondo me è sbagliato come fai al connessione

prova cosi
PHP:
$db = new mysqli($DBhost, $DBuser, $DBpass, $DBName);
if ($db->connect_errno) {
    die('Connect Error: ' . $db->connect_errno);
}
$query = "SELECT * FROM utenti WHERE username='".$username."' AND password='".$password."' AND attivo = '1'";
$q = $mysqli->query($query);
  while($riga= $q->fetch_array(MYSQLI_ASSOC)){
       $_SESSION['id'] = $riga['id'];
        $_SESSION['nome'] = $riga['nome'];
   }

a me così non ha mai dato errori
 
Salve a tutti,

Allora io mi sono ricordato stanotte che avevo la paginaris.php dove stanno gli errori. A voglia a cercarli sulla pagina del login. Ora posto la pagina chiamata paginaris.php:

PHP:
<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8">
        <title>Benvenuto nel tuo profilo</title>
    </head>
    <body>
       
       
        <?php
require_once ("db_connect.php");

 
    session_start();
if(isset($_COOKIE["ultimoaccesso"])) {
    $valore_cookie = date("d/m/Y - H:i:s");
    setcookie ("ultimoaccesso", $valore_cookie, time() + 365 *24*3600);
    $ultimo_cookie = $_COOKIE["ultimoaccesso"];
    $me= "Il tuo ultimo accesso è stato il:  $ultimo_cookie";
} else {
    $valore_cookie = date("d/m/Y - H:i:s");
    setcookie ("ultimoaccesso", $valore_cookie, time() + 365 *24*3600);
    $me= "Non ti sei mai collegato a questa pagina";
}

session_start();

if(isset($_SESSION['nome'])) {

$array = mysqli_query($con, "SELECT * FROM utenti WHERE id=".$_SESSION['id']." '");

 
 //  $array=mysql_fetch_array($array);
   
}


  $array =  strtoupper($_SESSION['nome'] );    
 if(isset($_SESSION['nome']))  {  

  //  echo "<div class=\"messaggio\"><h1>";

   
echo "BENVENUTO ".$array."<br />";
   
    echo $me;
 

}else{
    header("Location:failed.php");    
    exit();  
 
//}

}

//Visualizza l'avatar contenuto nel db

//$query =mysql_query("SELECT immagine FROM immagine WHERE id = $id");
 
// Codice che unisce due o più tabelle

$query =mysqli_query($con, "SELECT utenti.id, utenti.nome, immagine.immagine FROM utenti INNER JOIN
 immagine ON utenti.id =  immagine.id_nome WHERE id_nome = ".$_SESSION['id']);


while($foto=mysqli_fetch_array($query))
   
{

 ?>
    <br> <br>      
    <img src="immages/<?php echo$foto["immagine"]?>" class="immages">
   
   
   
<?php
}

// Ricerca e visualizza l'utente che si è connesso con le info

$row = mysqli_fetch_array(mysql_query("SELECT * FROM utenti WHERE id='".$_SESSION['id']."'"));
echo "<br> <br>";


        echo "Nome e cognome: ".$row['cognome'] . " ".$row['nome'];
       
        echo "<br>";
        echo "Username: ". $row['username'];
        echo "<br>";
        ec
        ?>
    </body>
</html>

Nella connessione al db mysqli adopero la variabile $con Scusate ma sti giorni ci sto poco e faccio un casino bestiale. Come dimenticarmi di ringraziarvi e di risegnalare gli errori. Eccoli:

Il tuo ultimo accesso è stato il: 04/09/2016 - 20:47:38 Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean at line 68 Warning: mysql_query(): Access denied for user ''@'localhost' (using password: NO) at line 83 Warning: mysql_query(): A link to the server could not be established at line 83 Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given at line 83

La connessione avviene senza alcun errore e i dati immessi per la connessione sono corretti. Grazie ancora a tutti.
 
Ragazzi chiamatemi pure pirla o cojone (scusate i termini). Ho risolto i problemi e i vari errori.

1) Non c'era su una riga il myslqi ma solo mysql

2) La classe immagini non esiste attualmente e quindi mi creava problemi

3) Risolto il problema. Decommentato la classe che richiamava le immagini e fatte aggiunte di connessioni alle query e messo la "i" finale dove mancava non mi da nessun tipo di problema.

Per me la discussione si può chiudere allagrande con un bel "RISOLTO". Grazie a tutti dell'attenzione e dei suggerimenti datomi. Se volete posso postare il nuovo listato funzionante. Eccolo:

PHP:
<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8">
        <title>Benvenuto nel tuo profilo</title>
    </head>
    <body>
       
       
        <?php
require_once ("db_connect.php");

 
    session_start();
if(isset($_COOKIE["ultimoaccesso"])) {
    $valore_cookie = date("d/m/Y - H:i:s");
    setcookie ("ultimoaccesso", $valore_cookie, time() + 365 *24*3600);
    $ultimo_cookie = $_COOKIE["ultimoaccesso"];
    $me= "Il tuo ultimo accesso è stato il:  $ultimo_cookie";
} else {
    $valore_cookie = date("d/m/Y - H:i:s");
    setcookie ("ultimoaccesso", $valore_cookie, time() + 365 *24*3600);
    $me= "Non ti sei mai collegato a questa pagina";
}

session_start();

if(isset($_SESSION['nome'])) {

$array = mysqli_query($con, "SELECT * FROM utenti WHERE id=".$_SESSION['id']." '");

 //  $array=mysql_fetch_array($array);  
   
}


  $array =  strtoupper($_SESSION['nome'] );     
 if(isset($_SESSION['nome']))  {   

  //  echo "<div class=\"messaggio\"><h1>";

   
echo "BENVENUTO ".$array."<br />";
   
    echo $me;
   

}else{
    header("Location:failed.php");     
    exit();   
//}

}

//Visualizza l'avatar contenuto nel db

//$query =mysql_query("SELECT immagine FROM immagine WHERE id = $id");
// Codice che unisce due o più tabelle

$query =mysqli_query($con, "SELECT utenti.id, utenti.nome, immagine.immagine FROM utenti INNER JOIN
 immagine ON utenti.id =  immagine.id_nome WHERE id_nome = ".$_SESSION['id']);


/*while($foto=mysqli_fetch_array($query))
   
{

 ?>
    <br> <br>       
    <img src="immages/<?php echo$foto["immagine"]?>" class="immages">
   
   
   
<?php
}*/

// Ricerca e visualizza l'utente che si è connesso con le info

$row = mysqli_fetch_array(mysqli_query($con,"SELECT * FROM utenti WHERE id='".$_SESSION['id']."'"));
echo "<br> <br>";


        echo "Nome e cognome: ".$row['cognome'] . " ".$row['nome'];
       
        echo "<br>";
        echo "Username: ". $row['username'];
        echo "<br>";
        ec
        ?>
    </body>
</html>

Grazie ancora.
 

Discussioni simili