problemi con login

Ciao  a tutti.

il mio problema è il seguente:

ho creato dapprima una pagina che mi permette di accede ad un'altra pagina,dopo aver inserito username e password.

Questo file lo ho chiamato index.php.

<?php

   $conn=mysql_connect('localhost','root','') or die("Errore nella connessione a Mysql: " .mysql_error());

      // echo " La connessione  a MySQL è avvenuta con successo!" ,"<br>\n";

   mysql_select_db('gestione',$conn) or die ("Errore nella selezione del db :". mysql_error());

    //echo"La connessione al database gestione è avvenuta con successo!";

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>Gestione</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<body bgcolor="#FFFFCC">

<div align="center" ><img src="spettacoli.png"></div>

<br><br><br><br><br><br><br><br><br><br><br>

<form action="lista.php" method="post">

<table border="0" align="center">

<tr><td>Nome utente</td><td><input type="text" name="nome" size="20"></td></tr>

<tr><td>Password</td><td><input type="password" name="pass"  maxlength="50" size="20"></td></tr>

<tr><td colspan="2" align="center"><input type="submit" value="Invia"> </td></tr>

</table>

</form>

</body>

</html>

ho creato una tabella amministarore con attributi  nome='ciao' e pass='progetto'

Quello che vorrei fare è  passare alla seconda pagina solo se  nome='ciao' e pass='progetto',altrimenti errore.Quindi ho fatto questo codice in php :

                   <?php

   $query='SELECT nome FROM amminister';

   $query1='SELECT pass FROM amminister';

   $ris=mysql_query($query,$conn);

   $ris1=mysql_query($query1,$conn);

   echo"<br>";

   $pass = $_POST['pass'];

   $nome = $_POST['nome'];

   if(Snome==$ris)

   {

   if($pass==$ris1){

      echo " I dati son stati inseriti correttamente";}

      }

   else {echo "Errore!";}

   ?>

Ovviamente questa funzione l'ho collocata nella pagina lista.php alla quale punta il form creato nel file index.php

ma nn mi funziona.

 :'( :'( :'( :'( :'( :'( :'( :'( :'( :'(

  :'( :'( :'( :'( :'( :'( :'( :'( :'( :'(

aiutatemi

   

inviato 10 anni fa
flaky
X 0 X

Il problema è concettuale penso, nella funzione:

$query='SELECT nome FROM amminister';
   $query1='SELECT pass FROM amminister';
   $ris=mysql_query($query,$conn);
   $ris1=mysql_query($query1,$conn);
   echo"<br>";
   $pass = $_POST['pass'];
   $nome = $_POST['nome'];
   if(Snome==$ris)
   {
   if($pass==$ris1){
   
      echo " I dati son stati inseriti correttamente";}
      }
   else {echo "Errore!";}
   ?>

Ci sono degli 'errori'...

Innanzitutto, crei due query per estrarre 2 dati dalla stessa tabella, potresti fare il tutto in un'unica query, diminuendo anche il tempo di caricamento della pagina ( 1 richiesta in meno ), poi sbagli a confrontare i dati, ossia, confronti i dati proventienti dalla form di login con $res1 e $res che sarebbero i 'risultati' di mysql_query, qui mi sa che hai un po' di confusione sul fatto di cosa ritorna la funzione mysql_query...

Ti posto un pezzo della documentazione ufficiale ( http://it.php.net/manual/it/function.mysql-query.php ):

Solo per le istruzioni SELECT, SHOW, DESCRIBE o EXPLAIN, mysql_query()  restituisce un nuovo identificativo di risultato che si può passare a mysql_fetch_array() e ad altre funzioni che si occupano dei risultati delle tabelle

Prova a modificare il tuo script così e vedi se va:

$query='SELECT nome,pass FROM amminister';
$ris=mysql_query($query,$conn);

//Così ricavi le righe i risultati della query
$row = mysql_fetch_array($res);
$passDb = $row['pass'];
$nomeDb = $row['nome'];

   echo"<br>";
   $pass = $_POST['pass'];
   $nome = $_POST['nome'];
   if($nome==$nomeDB && $pass == $passDb)
   {
      echo " I dati son stati inseriti correttamente";}
      }
   else {echo "Errore!";}
   ?>

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

 Mi sa che hai ragione Lore. Ho un po' di confusione sul fatto di cosa ritorna la funzione mysql_query.

visto che serviva per eseguire una query,pensavo che mi tornasse come risultato il valore contenuto nel database.(però nn ho capito ancora cosa restituisce).E' mysql_fect_array(risultato)  che mi permette di leggere il risultato della query!

Il fatto è che ci sto lavorando da stamattina zenza risultato e l'ho modificata così tante volte che non c'ho capito + nulla.

Cmq grazie per la risposta che mi hai dato Lore.

:bye:

risposto 10 anni fa
flaky
X 0 X

credo che per i login sia meglio fare così

$user = $_POST['ser'];

$pass = $_POST['pass'];

$query = 'SELECT * FROM utenti WHERE username='$user' AND password='$password';

$select = mysql_query($query);

..... ecc ....

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

credo che per i login sia meglio fare così

$user = $_POST['ser'];

$pass = $_POST['pass'];

$query = 'SELECT * FROM utenti WHERE username='$user' AND password='$password';

$select = mysql_query($query);

..... ecc ....

Hai ragione, cercavo di modificare il codice che aveva postato lui, 'logicamente' quello che hai segnato tu è il metodo migliore, ma qui entrerebbero in gioco altre variabili, quali il fatto di filtrare i dati passati dal post, di criptare la password per avere una maggior sicurezza ecc ecc...

Quello che hai segnato rimane comunque, penso, il metodo migliore, io cercavo solo di interpretare quello che voleva fare, senza stravolgere troppo il suo codice... ;)

 :bye:

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

Lore ho provato

    $query='SELECT nome,pass FROM amminister';

    $ris=mysql_query($query,$conn);

    //Così ricavi le righe i risultati della query

$row = mysql_fetch_array($res);

$passDb = $row['pass'];

$nomeDb = $row['nome'];

   echo"<br>";

   $pass = $_POST['pass'];

   $nome = $_POST['nome'];

   if($nome==$nomeDB && $pass == $passDb)

   {

      echo " I dati son stati inseriti correttamente";}

      }

   else {echo "Errore!";}

   ?>

 però non mi funziona ancora.Il fatto è che se la password è arrata,allora mi stampa errore. Quando è esatto sia lo username e nome,mi dovrebbe dire '" I dati son stati inseriti correttamente",ma mi dice sempre errore!

 :'( :'(

risposto 10 anni fa
flaky
X 0 X

    $query='SELECT nome,pass FROM amminister';

    $ris=mysql_query($query,$conn);

    /*

    Ho sbagliato a scrivere, ho fatto mysql_fetch_array($res) , ma sarebbe dovuto essere:

   */

    $row = mysql_fetch_array($ris);

ecc ecc...

Prova facendo la modifica che ti ho detto.

Se non dovesse funzionare fai un po' di debug, ad esempio,

stampa la query e provala direttametne da phpmyadmin ( per vedere se funziona la query ),

oppure, se ancora non dovesse funzionare controlla che estragga correttamente i valori dal DB e che recuperi i valori passati via POST e tutti i controlli del caso  O0

PS cmq facendo così ho cercato di seguire la tua linea di lavoro, il metodo 'migliore' per effettuare la login e la password, però, sarebbe quello consigliato da trashofmaster ( guarda il suo post ).

Prova a far funzionare il tuo script, una volta che funziona  quello, prova anche ad utilizzare quello consigliato da trashofmaster...

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

Si avevo già aggiustao quella aprte enon funzionava.

I dati dal database li prende,perchè ho provato a   stamparli e me li stampa,e anche quelli che immetto io

direttamnete

vengono stampati,però cmq il confornto non lo fa.Mi fa direttamente l'else e quindi mi da ocme risultato sempre errore!

Però per sicurezza ricontrollo!

risposto 10 anni fa
flaky
X 0 X

Rgazzi, come da regolamento, ho ritenuto opportuno spostare la discussione nel forum PHP (perché in realtà non si tratta di un problema di database) e rinominarla :police:

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Rgazzi, come da regolamento, ho ritenuto opportuno spostare la discussione nel forum PHP (perché in realtà non si tratta di un problema di database) e rinominarla :police:

 :bye:

si bravo gianni , stavo per dirlo io che questo topic centrava poco con i DB

ora flaky ti posto un po di codice così prendi spunto

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Lore ho ricontrollato tutto.Adesso funziona.

Grazie a te  e tutte le altre persone che mi hanno risposto.  :)

risposto 10 anni fa
flaky
X 0 X

ciao anche io devo fare un login

ho seguito quello che avete scrito voi ma nn sono riuscito

nn ho capito dove sono gli errori :'(

se potete darmi una mano...

grazie :)

risposto 10 anni fa
claudio
X 0 X

ciao anche io devo fare un login

ho seguito quello che avete scrito voi ma nn sono riuscito

nn ho capito dove sono gli errori :'(

se potete darmi una mano...

grazie :)

Ricevi degli errori? Riporta il codice che stai usando.

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

<?php

   $conn=mysql_connect('localhost','root','') or die("Errore nella connessione a Mysql: " .mysql_error());

      // echo " La connessione  a MySQL è avvenuta con successo!" ,"<br>\n";

   mysql_select_db('gestione',$conn) or die ("Errore nella selezione del db :". mysql_error());

    //echo"La connessione al database gestione è avvenuta con successo!";

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>Gestione</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<body bgcolor="#FFFFCC">

<div align="center" ><img src="spettacoli.png"></div>

<br><br><br><br><br><br><br><br><br><br><br>

<form action="lista.php" method="post">

<table border="0" align="center">

<tr><td>Nome utente</td><td><input type="text" name="nome" size="20"></td></tr>

<tr><td>Password</td><td><input type="password" name="pass"  maxlength="50" size="20"></td></tr>

<tr><td colspan="2" align="center"><input type="submit" value="Invia"> </td></tr>

</table>

</form>

</body>

</html>

ho creato una tabella amministarore con attributi  nome='ciao' e pass='progetto'

Quello che vorrei fare è  passare alla seconda pagina solo se  nome='ciao' e pass='progetto',altrimenti errore.Quindi ho fatto questo codice in php :

                   <?php

   $query='SELECT nome FROM amminister';

   $query1='SELECT pass FROM amminister';

   $ris=mysql_query($query,$conn);

   $ris1=mysql_query($query1,$conn);

   echo"<br>";

   $pass = $_POST['pass'];

   $nome = $_POST['nome'];

   if(Snome==$ris)

   {

   if($pass==$ris1){

      echo " I dati son stati inseriti correttamente";}

      }

   else {echo "Errore!";}

   ?>

risposto 10 anni fa
claudio
X 0 X

è stesso di flaky

risposto 10 anni fa
claudio
X 0 X
è stesso di flaky

Nel senso che hai gli stessi problemi di flaky?

Se fosse così, hai provato ad adottare i suggerimenti che gli avevamo consigliato per risolvere?

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

si ma nn va

risposto 10 anni fa
claudio
X 0 X
si ma nn va

Posta la parte di codice interessata, se no è un po' difficile aiutarti...

ciao

risposto 10 anni fa
Lore
Lore
1
X 0 X

           <?php

   $query='SELECT nome FROM amminister';

   $query1='SELECT pass FROM amminister';

   $ris=mysql_query($query,$conn);

   $ris1=mysql_query($query1,$conn);

   echo"<br>";

   $pass = $_POST['pass'];

   $nome = $_POST['nome'];

grazie

risposto 10 anni fa
claudio
X 0 X

Allora ragazzi, lasciate stare quel codice e date un'occhiata a questo approccio:

<?php
// connessione al server MySQL
mysql_connect('localhost','root','')
   or die("Errore nella connessione a Mysql: " .mysql_error());

// selezione del DB
mysql_select_db('gestione')
   or die ("Errore nella selezione del db :". mysql_error());

// recupero del nome e della password dal POST del form
$nome = $_POST['nome'];
$pass = $_POST['pass'];

// se non ci ha già pensato il PHP ...
if(!get_magic_quotes_gpc())
{
   // ... proteggo i dati inserendo dei backslash prima di eventuali apici
   $nome = addslashes($nome);
   $pass = addslashes($pass);
}

// preparo la query che restituisce le righe della tabella contenenti il nome e la password inviate
$query="SELECT nome FROM amminister WHERE nome='$nome' AND password = '$pass'";

// eseguo la query
$ris = mysql_query($query);

// se ho ottenuto almeno un risultato dalla query ...
if(mysql_num_rows($ris))
{
   // ... significa che i dati erano corretti ...
   echo " I dati son stati inseriti correttamente";
}
else
{
   // ... altrimenti no ;-)
   echo "Errore!";
}
?>
risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\programmi\easyphp1-8\www\log\lista.php on line 29

Errore!

if(mysql_num_rows($ris))

{

   // ... significa che i dati erano corretti ...

   echo " I dati son stati inseriti correttamente";

}

else

{

   // ... altrimenti no ;-)

   echo "Errore!";

}

?>

risposto 10 anni fa
claudio
X 0 X

Cambia:

$ris = mysql_query($query);

con

$ris = mysql_query($query)

   or die("Errore nella query: " .mysql_error());

e vedi che errore ricevi.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Quel warning vuol dire che c'è un errore nella query, prova a stamparla e a provarla direttamente in mysql e vedi che errore ti restituisce...

@Gianni sicuramente il metodo da te postato è il migliore per fare login, solo che cercavo di non sconvolgere il codice fatto da claudio cercando di sistemare il suo codice, tutto qui...

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X
@Gianni sicuramente il metodo da te postato è il migliore per fare login, solo che cercavo di non sconvolgere il codice fatto da claudio cercando di sistemare il suo codice, tutto qui...

Figurati, l'avevo capito. Ma ho pensato che fosse meglio ripartire da qualcosa di più solido, anche per i futuri utenti che leggeranno la discussione.  :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

grazie

mi da quest errore qua:

Errore nella query: Colonna sconosciuta 'password' in 'where clause'

risposto 10 anni fa
claudio
X 0 X

Ora dovrebbe essere chiaro il problema, vero?

Modifica la query così:

$query="SELECT nome FROM amminister WHERE nome='$nome' AND pass = '$pass'";

dove ho supposto che la colonna delle password si chiami pass

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

grazie 1000

adesso va

ma se non hai la password come fai a farti una nuova con php al mio database?

risposto 10 anni fa
claudio
X 0 X
ma se non hai la password come fai a farti una nuova con php al mio database?

Devi studiarti prima PHP e MySQL!  ;)

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

grazie ancora  :bye:

risposto 10 anni fa
claudio
X 0 X

Claudio nn dovevi scrivere il mio stesso codice php visto che io ho domandato agli altri eprchè non mi funzionava.

Cmq poi l'ho corretto e il codice in php è questo:

<  ?php

   /* valore dei dati inseriti dall'utente */

   $nome=$_POST['nome'];

   $pass=$_POST['pass'];

   /* Dati estratti dal database */

   $query='SELECT nome,pass FROM amminister ';

   $ris=mysql_query($query,$conn); /* Esecuzione della query */

   $row=mysql_fetch_array($ris);   /* Si ricavano i risultati della query */

   /* assegnati i valori di nome e pass ottenuti da $row */

   $passDB = $row['pass'];

   $nomeDB = $row['nome'];

   if($nome==$nomeDB && $pass==$passDB)

   {

       ...................

   } ?>

Ovviamente al posto dei puntini devi mettere le istruzioni che devi esguire(tipo inserimento,cancellazione,modifica..)

risposto 10 anni fa
flaky
X 0 X

flaky, quello script è sbagliato perché la query [tt]SELECT nome,pass FROM amminister[/tt] restituisce tutte le coppie nome, password presenti nella tabella.

Poi però prendi solo la prima poiché esegui l'istruzione mysql_fetch_array una sola volta. A questo punti controlli se la coppia nome, password coincide con quella passata dall'utente.

E' ovvio che se la tabella contiene più nomi la cosa non funziona. Infatti chi ti assicura che l'unico risultato estratto dal DB coincide con i dati dell'utente che sta effettuando il login?

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Lo so,ma lui ha riprodotto inizialmente la parte di codice sbagliata che io avevo posto in passato prima che voi mi aiutaste a correggerla.E quindi io non ho fatto altro che correggere quella parte di codice.

A me serviva per un'altro scopo,e quindi mi funziona.

risposto 10 anni fa
flaky
modificato 10 anni fa
X 0 X

tranquillo O0

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda