[PHP] login con la classe medoo.in

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
Salve, ho scritto semplice script per autenticazione utente..
Mi da solo un errore essendo che sto convertendo un codice scritto in mysql, con la classe medoo.in che è fantastica.. l'unico che mi da un errore se provo ad sbagliare password e nome..

PHP:
<?php include($_SERVER["DOCUMENT_ROOT"] . '/inc.php'); ?>
<?php include("theme/header.php"); ?>
  <table align="center" bgcolor="#CCCCCC" border="0" cellpadding="0"
  cellspacing="1" width="300">
  <tr>
    <td>
      <form method="post" name="">
        <table bgcolor="#FFFFFF" border="0" cellpadding="3"
        cellspacing="1" width="100%">
        <tr>
          <td align="center" colspan="3"><strong>User
            Login</strong></td>
          </tr>
          <tr>
            <td width="78">Username</td>
            <td width="6">:</td>
            <td width="294"><input id="username" name=
              "username" type="text"></td>
            </tr>
            <tr>
              <td>Password</td>
              <td>:</td>
              <td><input id="password" name="password" type=
                "password"></td>
              </tr>
              <tr>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td><input name="submit" type="submit" value=
                  "Login"> <input name="reset" type="reset" value=
                  "reset"></td>
                </tr>
              </table>
            </form>
          </td>
        </tr>
      </table>
      <?php
      if (isset($_POST['submit']))
      {
        session_start();
        $username=$_POST['username'];
        $password=$_POST['password'];


          $datas = $db->select("login", [
            "username",
            "password"
        ], [
            "username" => $username,
          "password" => $password
        ]);
            foreach($datas as $data)
          {
              $_SESSION['login_user']=$data["username"];
          }
        if ($data != 0)
        {
          echo "<script language='javascript' type='text/javascript'> location.href='home.php' </script>";
        }
        else
        {
          echo "<script type='text/javascript'>alert('User Name Or Password Invalid!')</script>";
        }
      }
?>
<?php include("theme/footer.php"); ?>

Mi da l'errore su $data != 0

PHP:
 foreach($datas as $data)
          {
              $_SESSION['login_user']=$data["username"];
          }
        if ($data != 0)
        {
          echo "<script language='javascript' type='text/javascript'> location.href='home.php' </script>";
        }
        else
        {
          echo "<script type='text/javascript'>alert('User Name Or Password Invalid!')</script>";
        }
      }

avete idea come posso risolvere il problema? Grazie mille ..

sto usando xampp windows 7.1.15 php.

grazie e buona settimana.
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
if ($data != 0)
{
echo
"<script language='javascript' type='text/javascript'> location.href='home.php' </script>";
}
Non è definita in quanto l'hai utilizzata dinamicamente all'interno del foreach e non fuori; quindi invece di scrivere $data!=0 dovresti scrivere la logica di login in modo un pò differente, del tipo:
  • Salvare la password con un qualche algoritmo d hashing (va bene anche md5 sha1 sha256 etc...)
  • Effettui la select solo sull'username e non sulla tupla username-password
  • Recuperi la password dal db, elabori la password inviata $_POST['password']
  • Confronti le password, se ok continui, altrimenti hai sbagliato qualcosa.
Devi prevedere:
  1. Username non trovato
  2. Username vuoto
  3. Username valido
  4. Password vuota
  5. Password errata
  6. Password corretta
Per essere elegante controllerei anche le sessioni, in caso di login da più dispositivi. Tornando al tuo problema potresti scrivere così:
PHP:
 $datas = $db->select("login", [
            "username",
            "password"
        ], [
            "username" => $username
        ]);

$result=['status'=>'no_login','code'=>401];

//verifico se esiste l'username cercato
//ipotizzo che al massimo con la stessa user esista un solo utente, quindi per forza maggiore dovrò
//avere un solo risultato in posizione $datas[0]
if(isset($datas[0]['password'])){
//confronto le password
    if($datas[0]['password']==$password){
//se sono uguali ok
        $result=['status'=>'success','code'=>200];
    }else $result=['status'=>'error','code'=>401,'reason'=>'password errata'];

}else{
 //username non trovato
$result=['status'=>'error','code'=>401,'reason'=>'username errata'];
}

//per le sessioni::::::

if($result['status']=='success'){
//sessione utente ok
}else{
//sessione utente not ok
}
 

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
ok, ti ringrazio molto.. ma come faccio ad settare le sessioni ? vorrei login_user etc.. ora sto provando poi dopo metto sicurezza etc.. solo che con medoo.in , non si trova tanti esempi .. ma c'è solo la documentazione online. Grazie mille e buona giornata.

EDIT: E poi come posso fare stampare gli errori?
Grazie
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
solo che con medoo.in , non si trova tanti esempi ..
Se vedi nella documentazione di medoo ci sono tutti i metodi che servono

PHP:
//errori
$conn->error();

//se vuoi fare il debug
$conn->debug()->select();

//log azioni etc..
$conn->log();
Hai tutto il materiale nella documentazione, per errori inerenti a PHP
PHP:
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Scusa se rispondo solo oggi, per comodità io lavoro con risposte asincrone, quindi eredito spesso questa scrittura....
Nel tuo sistema di template dovrai prevedere dei break-point per eventuali messaggi così da dare feedback visivo all'utente.
tipo
HTML:
<tr>
    <td>
      <form method="post" name="">
        <table bgcolor="#FFFFFF" border="0" cellpadding="3"
        cellspacing="1" width="100%">
        <tr>
          <td align="center" colspan="3"><strong>User
            Login</strong></td>
          </tr>
          <tr>
            <td width="78">Username</td>
            <td width="6">:</td>
            <td width="294"><input id="username" name=
              "username" type="text">
              <?php
                if($status['code']!=200){
                      echo $status['reason']['username']
                 }
               ?>
</td>
            </tr>
            <tr>
              <td>Password</td>
              <td>:</td>
              <td><input id="password" name="password" type=
                "password">
                  
<?php
                if($status['code']!=200){
                      echo $status['reason']['password']
                 }
               ?>
</td>
              </tr>
              <tr>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td><input name="submit" type="submit" value=
                  "Login"> <input name="reset" type="reset" value=
                  "reset"></td>
                </tr>
Più o meno quella è la risposta dell'elaborazione e quindi dovresti modificare il form più o meno in questo modo!
Visto che hai utilizzato medoo.in (cosa che non può altro che farmi piacere), ti invito a darti una letta al pattern mvc, e/o quantomeno all'utilizzo di un Template Engine, così da separare Viste (pagine html) dai modelli (connessione / elaborazione dati). Ti segnalo Smarty o Blade, e una piccola spiegazione qui con l'utilizzo di Smarty.
 
Discussioni simili
Autore Titolo Forum Risposte Data
L [PHP] login con password_verify PHP 3
L [PHP] login con varie entrate PHP 3
L [PHP] login con password_verify - password_hash PHP 5
M [PHP] Problemi con il riconoscimento login. PHP 21
F Problema con pagine login in PHP PHP 2
M [PHP] Problemi con login facebook PHP 0
L [PHP] login e protezione pagine con session PHP 3
I [PHP] login con sessione singola PHP 1
D [PHP] Login Multiutente con pagina privata PHP 5
S [PHP] Problemi con Login e pagina Utente PHP 5
webmachine [PHP] Problemi con Login e pagina Utente PHP 3
F Problemi login con lo script php PHP 2
M Script php login con password in scadeza ogni tre mesi PHP 2
D aiuto con pag di login in php PHP 1
M Login con php PHP 2
E [PHP + MySql] Sito con login e sessioni PHP 8
L [PHP/MYSQL] Login con ricordo utente PHP 1
I [PHP]Problema sito con form login in ogni pagina PHP 7
S [PHP] Stampa a video Nome e Cognome in seguito a login PHP 1
M [PHP] header (location..) non funzionante dopo login PHP 3
L [PHP] Visualizzare utente dopo login PHP 0
F [PHP] Login senza database PHP 3
F [php] sicurezza password form login PHP 2
M [PHP] Metodo migliore per fare login a un DB Mysql PHP 1
Y [PHP] Errore di login dopo aver inserito Codice AdSense PHP 0
W [PHP] Login sicuro al web Service SOAP PHP 20
P [PHP] Limitare login ad un solo utente per volta PHP 12
I [PHP] [Javascript] login da smartphone a web PHP 3
P [PHP] Reindirizzamento post Login PHP 3
bubino8 [WordPress] [PHP] Login diretto da bottone WordPress 4
D problemi login php 5.6 mysql PHP 1
I [PHP] Login Facebook SDK returned an error: No URL set! PHP 0
G PHP Login PHP 1
Laskot Login php e redirect PHP 1
K [PHP] Unica sessione login forum/sito PHP 1
bubino8 [PHP] Login Automatico PHP 1
M [PHP] Sessione Login PHP 15
C [PHP] Aprire la pagina dopo aver fatto il login PHP 1
fabry1986 [PHP] login PHP 2
Punix pagine login-logout php principiante PHP 4
ANDREA20 [PHP] Echo login PHP 2
P [PHP] aiuto creazione login PHP 16
M login.php PHP 12
otto9due [risolto] Problema sessioni php e login PHP 5
D creazione di una login in php PHP 1
M Pagina di registrazione e login in php PHP 4
C Creare Login php PHP 0
D Pagina login php-mysql PHP 1
helpdesk Nessuna session start in login PHP PHP 12
max_400 il login in php è sicuro? PHP 14

Discussioni simili