creare login semplice

ciao a tutti, sono nuovissimo!

vorrei creare un login semplice (ci sarà un'unica pwd per tutti), se possibile senza db, ma non avendo grande esperienza non so proprio come muovermi....

ho la index che permette l'accesso all'area riservata, dalla quale poi sarà possibile modificare alcune descrizioni. come devo implementare il tutto? ho cercato guide e tutorial ma quel poco che ho trovato non mi è stato di grande aiuto....

grazie

inviato 8 anni fa
gabar-el
X 0 X

vuoi usare solo una password o nome utente e password?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

anche un nome utente se possibile. magari anche più di uno. si può impostarne tipo 3 o 4? e una pwd uguale per tutti?

grazie

risposto 8 anni fa
gabar-el
X 0 X

sai creare un form in HTML per inserire nome e password?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

si, ce l'ho anche già pronto, solo che non butta da nessuna parte al momento....

risposto 8 anni fa
gabar-el
X 0 X

Allora, il form di login deve puntare ad un script PHP del genere:

<?php
$utenti = array('marco'=>'password1', 'nicola'=>'password2','alberto'=>'password3');

if(key_exists($_POST['nome_utente'], $utenti) && $utenti[$_POST['nome_utente']] == $_POST['password']) {
   session_start();
   $_SESSION['uente_loggato'] == true;
}
?>

dove ho supposto che il form è dotato di due campi input di testo, di nome "nome_utente" e "password"

Per proteggere le pagine private devi iniziare gli script così:

<?php
session_start();
if(empty($_SESSION['uente_loggato'])) {
   die("Devi prima effettuare il login");
}
?>
risposto 8 anni fa
Gianni Tomasicchio
X 0 X

grazie, stasera ci provo. sei stato molto chiaro. coppie nome valore! (me lo ricordo dagli ultimi studi che ho fatto)

 :bye:

risposto 8 anni fa
gabar-el
X 0 X

ciao, sono riuscito a mettermici solo ora. ricevo questo errore:

Fatal error: Call to undefined function key_exsists() in C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\miacartella\gestione\gestione.php on line 4

la linea in questione è questa:

if(key_exsists($_POST['user'], $utenti) && $utenti[$_POST['user']] == $_POST['password'])

grazie

risposto 8 anni fa
gabar-el
X 0 X

si, scusa, sostituisci quella funzione con array_key_exists()

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

non riesco a decifrarla e ottengo errori.

io scrivo così:

if(array_key_exsists()
   {
      session_start();
      $_SESSION['user_loggato'] == true;
   }
risposto 8 anni fa
gabar-el
X 0 X

Mi hai preso proprio alla lettera! Intendevo dire di sostituire solo il nome della funzione, lasciando inalterati i parametri passati

<?php
$utenti = array('marco'=>'password1', 'nicola'=>'password2','alberto'=>'password3');

if(array_key_exists($_POST['nome_utente'], $utenti) && $utenti[$_POST['nome_utente']] == $_POST['password']) {
   session_start();
   $_SESSION['uente_loggato'] == true;
}
?>
risposto 8 anni fa
Gianni Tomasicchio
X 0 X

no, è che avevo già provato così, ma avevo scritto male lo script.

ora funzia, ma sebbene metta i giusti user e pwd mi viene detto che prima devo effettuare il login.

forse sbaglio a inserire gli script. ho messo entrambi gli script che mi hai spiegato nella pagina che elabora, all'inizio pagina. prima uno poi l'altro. ho forse fatto male?

risposto 8 anni fa
gabar-el
X 0 X

non ho ben decifrato questo passaggio:

$_SESSION['uente_loggato'] == true;
risposto 8 anni fa
gabar-el
X 0 X

Ennesimo errore  :P (si vede che ho scritto il codice al volo?)

Cambia == in =

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

in entrambi? io l'ho dato a entrambi e funzia, ma funzia sempre, anche quando la pwd è errata. sembra riconoscere solo lo user. se sbaglio pwd o non scrivo niente entro cmq, ma in testata ho questo errore:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\miacartella\gestione\gestione.php:11) in C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\miacartella\gestione\gestione.php on line 12
risposto 8 anni fa
gabar-el
X 0 X

La modifica era da fare solo per:

$_SESSION['uente_loggato'] == true;

da cambiare in

$_SESSION['uente_loggato'] = true;

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

se sbaglio user e pwd o solo la pwd ottengo questo:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\miacartella\gestione\gestione.php:11) in C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\miacartella\gestione\gestione.php on line 12

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\miacartella\gestione\gestione.php:11) in C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\miacartella\gestione\gestione.php on line 12
Devi prima effettuare il login

se sbaglio lo user ottengo la pagina ma con questa testata:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\miacartella\gestione\gestione.php:11) in C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\miacartella\gestione\gestione.php on line 12

se faccio il login corretto tutto ok....

grazie

risposto 8 anni fa
gabar-el
X 0 X

riporta il codice di gestione.php, almeno fino alla riga 12

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

eccolo:

<?php
$utenti = array('utente1'=>'pwd1', 'utente2'=>'pwd2', 'utente3'=>'pwd3');

if(array_key_exists($_POST['user'], $utenti) && $utenti[$_POST['user']] == $_POST['password'])
   {
      session_start();
      $_SESSION['user_loggato'] = true;
   }
?>

<?php
session_start();
if(empty($_SESSION['user_loggato']))
   {
      die("Devi prima effettuare il login");
   }
?>

thanks

risposto 8 anni fa
gabar-el
X 0 X

Hai messo i 2 script nella stessa pagina!!!!!! Invece DEVI mettere il primo nella pagina di login e il secondo in tutte le pagine accessibili solo agli utenti loggati

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ops.... :D

ora l'ho messo nella pagina del login, ma non riesco mai a fare il login..... indipendentemente da cosa scrivo....

 :'(

risposto 8 anni fa
gabar-el
X 0 X

up please....  ???

risposto 8 anni fa
gabar-el
X 0 X

Ciao,

nella pagina di login devi mettere questo codice:

  session_start();
  $utenti = array('utente1'=>'pwd1', 'utente2'=>'pwd2', 'utente3'=>'pwd3');

  if(array_key_exists($_POST['user'], $utenti) && $utenti[$_POST['user']] == $_POST['password'])
  {
    $_SESSION['user_loggato'] = true;
    # Redirect ad una pagina di  benvenuto.... 
  }

nelle altre pagine questo:

session_start();
if(empty($_SESSION['user_loggato']))
{
   die("Devi prima effettuare il login");
}

Ricordati di mettere sempre come prima istruzione session_start();

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

grazie zeta

ricevo direttamente questi errori (sebbene veda il resto della pagina):

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\miacartella\index.php:19) in C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\miacartella\index.php on line 20

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\miacartella\index.php:19) in C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\miacartella\index.php on line 20

inoltre non capisco l'utilizzo di questo passaggio:

$_SESSION['user_loggato'] = true;

user_loggato da dove arriva? che roba è?

se provo cmq a fare il login ricevo il messaggio che prima devo effettuare il login....  >:(

grazie

risposto 8 anni fa
gabar-el
modificato 8 anni fa
X 0 X

Il messaggio che mi segnali indica che prima del comando session_start() c'è del codice che genera output.

Ti consiglio di spostarlo all'inizio del file come da mio ultimo post  O0

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

mi sa che per oggi ho dato. sono fuso!  :uglystupid:

vero, avevo lo script di connessione al db, ma inserendo i giusti user e pwd mi dice che devo effettuare prima il login!

 :buck:

risposto 8 anni fa
gabar-el
X 0 X

non che sia meno fuso, ma rieccomi....

continuo a non riuscire a fare il login nonostante metta le giuste user e pwd.

il mio codice al momento è questo:

codice nella pagina col form (primissimo codice della pagina):

<?php
session_start();
$utenti = array('user'=>'pwd', 'user2'=>'pwd2', 'user3'=>'pwd3');

if(array_key_exists($_POST['user'], $utenti) && $utenti[$_POST['user']] == $_POST['password'])
   {
      $_SESSION['user_loggato'] = true;
   }
?>

codice nella pagina a cui il form rimanda (primissimo codice della pagina):

<?php
session_start();
if(empty($_SESSION['user_loggato']))
   {
      die("Devi prima effettuare il login");
   }
?>

che strano, mi sembra di decifrare il codice a grandi linee, ma perchè non funzia?  ???

grazie

risposto 8 anni fa
gabar-el
X 0 X

Ciao,

ho provato il codice questa mattina e posso assicurarti che funziona.

L'unica cosa che ti posso consigliare di controllare è il codice che utilizzi per creare il form di login. Magari c'è un errore nel nome dei campi.

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

cavolo, se mi dici così vado in calo.....

il form è questo:

<form method="post" action="gestione/gestione.php">
               <fieldset>
               <legend>effettua il login</legend>
               <div><label>user:</label> <input type="text" name="user" id="user"/></div>
               <div><label>password:</label> <input type="text" name="password" id="password"/></div>
               <div><input type="submit" class="submit" value="Invia"/><input type="reset" class="reset" value="Cancella"/></div>
               </fieldset>
            </form>

non ci vedo errori....

non capisco il passaggio di user_loggato, come lo decifro "a parole"? ovvero cosa fa, cosa indica?

può essere che va in conflitto con altro codice php? no eh?

grazie

risposto 8 anni fa
gabar-el
X 0 X

Ciao,

ho provato il tuo codice e funziona...

Ho creato una pagina con il form, una pagina con il codice per il login e una pagina di esempio.

Ecco il codice della pagina form:

<html>
<head>
</head>
<body>
<form method="post" action="test.php">
               <fieldset>
               <legend>effettua il login</legend>
               <div><label>user:</label> <input type="text" name="user" id="user"/></div>
               <div><label>password:</label> <input type="text" name="password" id="password"/></div>
               <div><input type="submit" class="submit" value="Invia"/><input type="reset" class="reset" value="Cancella"/></div>
               </fieldset>
            </form>
</body>
</html>

pagina di controllo login:

<?
session_start();
$utenti = array('user'=>'pwd', 'user2'=>'pwd2', 'user3'=>'pwd3');

if(array_key_exists($_POST['user'], $utenti) && $utenti[$_POST['user']] == $_POST['password'])
{

   $_SESSION['user_loggato'] = true;
        # Carico una pagina iniziale
   header("Location: ./login.php");
}
?>

Codice della pagina iniziale:

<?
session_start();
f(empty($_SESSION['user_loggato']))
{
   die("Devi prima effettuare il login");
}
?>

 :bye:

Zeta

P.S.: io non ci tengo a farti perdere la voglia di programmare in php è solo che senza sapere che codice hai scritto risulta difficile essere di aiuto e qualche volta (succede molto anche a me  :'() si commettono errori sulle cose semplici. Bye

risposto 8 anni fa
zeta80
X 0 X

ok, qualcosa che non va c'è, perchè ho provato a creare 2 pagine solo con quel login e a me non funzia. mi sa che mi sto perdendo in un bicchier d'acqua. cmq

la pagina col form è a questo indirizzo: http://tinylink.com/?3MAzmDrb2Z

e ha esattamente questo codice:

<?php
session_start();
$utenti = array('user1'=>'pwd1', 'user2'=>'pwd2', 'user3'=>'pwd3');

if(array_key_exists($_POST['user'], $utenti) && $utenti[$_POST['user']] == $_POST['password'])
   {
      $_SESSION['user_loggato'] = true;
   }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento senza titolo</title>
</head>

<body>
<form method="post" action="prova_login_gestisci.php">
               <fieldset>
               <legend>effettua il login</legend>
               <div><label>user:</label> <input type="text" name="user" id="user"/></div>
               <div><label>password:</label> <input type="text" name="password" id="password"/></div>
               <div><input type="submit" class="submit" value="Invia"/><input type="reset" class="reset" value="Cancella"/></div>
               </fieldset>
            </form>
</body>
</html>

la pagina protetta è a questo link: http://tinylink.com/?1NcDZdkPu4

ed ha esattamente questo codice:

<?php
session_start();
if(empty($_SESSION['user_loggato']))
   {
      die("Devi prima effettuare il login");
   }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento senza titolo</title>
</head>

<body>
ci sei stato dentro!
</body>
</html>

forse manca qualcosa che tu dai per scontato e io no.... cosa è per es. questo codice che hai scritto?

# Carico una pagina iniziale

   header("Location: ./login.php");

grazie

risposto 8 anni fa
gabar-el
X 0 X

Ciao,

ho capito dov'è il problema.

Il comando header che ti ho scritto io serve per richiamare il percorso di una pagina di tuo interesse. Nel tuo caso, la prima pagina di login. Qui trovi tutta la documentazione che ti serve: http://it.php.net/manual/it/function.header.php

Ora passiamo al tuo codice. La pagina di login è corretta a parte un piccolo punto: la parte di codice che assegna il valore $_SESSION['user_loggato'] = true; non viene mai eseguito per il semplice fatto che tu nell'azione del form hai inserito il percorso della prima pagina di login mentre dovevi richiamare la pagina stessa. In questo modo saresti entrato nella parte di codice citata prima e poi avresti potuto scrivere il comando:

header("Location: prova_login_gestisci.php");

A questo punto il primo controllo della pagina prova_login_gestisci.php viene saltato poiché la condizione è vera e quindi stampi la tua pagina.

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

grazie per l'impegno zeta!  :clapping:

già, funziona ora! avrei dovuto capirlo visto che mi restituiva il messaggio che prima dovevo fare il login, messaggio che appartiene alla pagina protetta, e che generalmente è dato per chi accede direttamente a quella pagina, altrimenti si ritorna appunto alla pagina in cui fare il login. ho messo nel form l'url della pagina stessa, ma non c'è una variabile globale (dico bene?) tipo php self o qualcosa del genere per rimandare appunto alla stessa pagina?

grazie

 :bye:

risposto 8 anni fa
gabar-el
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda