| Subiectul anterior :: Subiectul următor |
| Autor |
Mesaj |
xtcs
Data înscrierii: 05/Mai/2008
Mesaje: 5
|
| Trimis: Lun Mai 05, 2008 7:46 am Titlul subiectului: problema script login |
|
|
va salut
am incercat sa folosesc un script de login dar imi da urmatoarea eroare : "Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\Program Files\EasyPHP 2.0b1\www\login.php on line 20."
Ce este gresit in script?
multumesc
Cod:
<?php
session_start();
if(isset($_POST['submit'])){
$mysql = mysql_connect("localhost","root","####");
mysql_select_db("baza",$mysql);
if(!empty($_POST['username'])){
$username = htmlspecialchars($_POST['username']);
} else {
$username = false;
echo '<p>Please insert the username</p>';
}
if(!empty($_POST['password'])){
$password = $_POST['password'];
} else {
$password = false;
echo '<p>Please insert the password</p>';
}
if($username && $password){
$query = mysql_query("SELECT * FROM `users` WHERE `username` = '".mysql_escape_string($username)."' AND `password` = '".MD5($password)."' ");
$row = mysql_fetch_assoc($query);
if(@mysql_num_rows($query) == 1){
$_SESSION['login'] = true;
header("Location:index.php");
} else {
echo '<p>Please insert again the username and passsword </p>';
}
}
}
?>
|
|
| Sus |
|
mihaitha
Data înscrierii: 04/Mai/2007
Mesaje: 1801
Locație: Sibiu
|
| Trimis: Lun Mai 05, 2008 8:14 am Titlul subiectului: |
|
|
Inlocuieste asa (ma gandesc ca iti dai seama unde trebuie sa inlocuiesti):
Cod: $query = mysql_query("SELECT * FROM `users` WHERE `username` = '".mysql_escape_string($username)."' AND `password` = '".MD5($password)."' ") or die (mysql_error()); Acolo iti da o eroare mysql pe care tu nu o captezi. Vezi ce e cu ea. |
|
| Sus |
|
xtcs
Data înscrierii: 05/Mai/2008
Mesaje: 5
|
| Trimis: Lun Mai 05, 2008 8:55 am Titlul subiectului: |
|
|
mersi mult am gasit eroarea aveam in baza de date user iar in cod era username.Dar acum chiar daca introduc date corecte din baza de date imi da
"Please insert again the username and passsword".Baza de date e formata din tabela users cu id(index primar),user,pass si mail. |
|
| Sus |
|
dunno
Data înscrierii: 14/Feb/2008
Mesaje: 9
|
| Trimis: Lun Mai 05, 2008 9:29 am Titlul subiectului: |
|
|
Mie functia mysql_real_escape_string imi resteaza uneori variabila.
Poate se intampla si cu mysql_escape_string.
Incearca o filtrare cam asa si vezi daca merge:
Cod:
if(!is_numeric($username))
{
$username = @mysql_real_escape_string($username);
}
$username = htmlspecialchars($username, ENT_QUOTES);
$query = mysql_query("SELECT * FROM `users` WHERE `username` LIKE '".$username."' AND `password` = '".md5($password)."' ") or die (mysql_error());
Cu operatorul "=" daca nu introduci username-ul exact ca in baza de date (este case sensitive), nu il recunoaste ca valid; l-am inlocuit cu "LIKE".
Poate merge |
|
| Sus |
|
xtcs
Data înscrierii: 05/Mai/2008
Mesaje: 5
|
| Trimis: Lun Mai 05, 2008 9:55 am Titlul subiectului: |
|
|
| mersi dar tot nu merge |
|
| Sus |
|
vectorialpx
Data înscrierii: 01/Mar/2005
Mesaje: 3014
Locație: țopăi pe tasta DELETE
|
| Trimis: Lun Mai 05, 2008 10:41 am Titlul subiectului: |
|
|
`username` LIKE '".$username."' ... p-asta nu am mai vazut-o...
si daca e CS ce?!
mihaita are dreptate... pune un or die(mysql_error()) si un error_reporting(E_ALL) ca sa vezi ce e gresit... apoi te poti baza pe script |
|
| Sus |
|
xtcs
Data înscrierii: 05/Mai/2008
Mesaje: 5
|
| Trimis: Lun Mai 05, 2008 2:28 pm Titlul subiectului: |
|
|
asa cum am spus mai sus numai apare nici o eroare la script insa chiar daca introduc un nume de utilizator si o parola care se afla in baza de date scriptul nu le gaseste si afiseaza "echo '<p>Please insert again the username and password </p>' ",deci merge numai pe else.
Sa fie ceva in neregula pe la aceste if-uri?
Cod:
if($username && $password){
$query = mysql_query("SELECT * FROM `users` WHERE `username` = '".mysql_escape_string($username)."' AND `password` = '".MD5($password)."' ") or die (mysql_error());
$row = mysql_fetch_assoc($query);
if(@mysql_num_rows($query) == 1){
$_SESSION['login'] = true;
header("Location:index.php");
} else {
echo '<p>Please insert again the username and passsword </p>';
}
}
}
|
|
| Sus |
|
dunno
Data înscrierii: 14/Feb/2008
Mesaje: 9
|
| Trimis: Lun Mai 05, 2008 8:23 pm Titlul subiectului: |
|
|
vectorialpx a scris: `username` LIKE '".$username."' ... p-asta nu am mai vazut-o...
si daca e CS ce?!
da, eu folosesc asa ceva si merge :D
si, daca e "CS" iar el introduce in formular ZM iar in baza de date e zm, inainte neefectuand o unformizare (strtolower, de exmplu), ar putea sa nu ii mearga autentificarea
on topic:
incearca sa adaugi un LIMIT 1 la $query |
|
| Sus |
|
vectorialpx
Data înscrierii: 01/Mar/2005
Mesaje: 3014
Locație: țopăi pe tasta DELETE
|
| Trimis: Lun Mai 05, 2008 9:53 pm Titlul subiectului: |
|
|
@mysql_num_rows($query) == 1 // detest codul inutil
de ce ai pus @ in fata?... daca resursa exista atunci totul e ok... daca nu, afisezi eroare, cum ca query-ul e incorect or else
ia afiseaza tu mysql_num_rows ala... sa vezi ce iese
dunno, CS = case sensitive [sorry de prescurtare]... nu e nimic rau daca e case sensitive |
|
| Sus |
|
xtcs
Data înscrierii: 05/Mai/2008
Mesaje: 5
|
| Trimis: Mar Mai 06, 2008 7:30 am Titlul subiectului: |
|
|
am refacut baza de date si acum totul merge perfect(cu toate ca inainte baza era identica)
thanks all |
|
| Sus |
|
PHPRomania Bot
Bot Member
Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google |
| Trimis: Mie Dec 26, 2007 7:01 pm Titlul subiectului: Ad |
|
|
|
|
|
| Sus |
|
| |