Skocz do zawartości
Zaloguj się, aby obserwować  
Explor1

Php i baza

Polecane posty

Witam, ja mam problem z skryptem php na polaczenie sie do bazy. Oto on:

 

<?php

function db_connect() {

$conn = mysql_connect("94.........74","cs......l_cms","...");

if(!$conn)

{

echo mysql_error();

exit;

}

if(!$db = mysql_select_db("cs......_cms"))

{

echo mysql_error();

exit;

}

return $conn;

}

function get_user($useremail,$userpassowrd)

{

db_connect();

$query = sprintf("

SELECT * FROM users WEHERE email='$useremail' AND password = '$userpassowrd'"

);

$result = mysql_query($query);

$row = mysql_fetch_assoc($result);

return $row;

}

$a = get_user('nazwa@o2.pl','haslo');

print_r($a);

echo '<br>';

echo $a['name'];

?>

Problem w tym że on nic nie zwraca.

Ma ktoś może jakiś prosty gotowiec albo widzia błąd?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Z jakiego gotowca to kopiowane?

http://www.talkphp.com/general/1062-securing-your-mysql-queries-sprintf.html

 

<?php
function db_connect() {
global $conn;

	if($conn)
		return $conn;
$conn = mysql_connect("localhost","test","test" ) or die('Could not connect to mysql server.' );
mysql_select_db("test") or die('Could not select database.');
return $conn;
}

function get_user($useremail,$userpassowrd) {
global $conn;
db_connect();

$query = sprintf("SELECT * FROM users WHERE email='%s' AND password = '%s'"
				, mysql_real_escape_string($useremail),
				mysql_real_escape_string($userpassowrd)
);
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
return $row;
}
$a = get_user('asd','asd');
print_r($a);
echo '<br>';
echo $a['name'];
?>

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dlaczego bez pdo ?

 

dbconnect.php

$dsn = 'mysql:host=localhost; dbname=test';
$dbuser = 'test';
$dbpassword = 'test';

 

function get_user($useremail,$userpass) {
   	require_once("dbconnect.php");
   	$dbh = new PDO($dsn,$dbuser,$dbpassword);
   	$stmt = $dbh->prepare("SELECT 1 FROM users WHERE email= :e_mail AND password = :haslo");
   	$stmt->bindParam(':e_mail',$useremail);
   	$stmt->bindParam(':haslo',$userpass);
   	$stmt->execute();
   	$ifmailexist = $stmt->fetch();
   	return($ifmailexist[0]);

}

$a = get_user('asd','asd');
echo $a;
echo '<br>';
echo $a['name'];

Nie testowałem, ale powinno banglać bez problemu.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Brałem to z videotutoriale.

Po poprawieniu tego wehere mam komunkikat:

[b]Warning[/b]:  mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in [b]/home/k.../domains/k....zxy.me/public_html/db/db_fns.php[/b] on line [b]51[/b]

A kod w tych okolicach to:

 

 

Linia 50

$result = mysql_query($query);

Linia 51

$row = mysql_fetch_assoc($result);

Linia 52(Pusta)

Linia 53

  return $row;

 

 

-----------------------------------

Jak użyłem tego skryptu od Portka to mam taki sam blad i na tych samych linijkach kodu.

Edytowano przez Explor1 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Przyczyny mogą być dwie - jeśli chodzi o twój kod.

Jedna z nich to taka, że jeśli używasz sobie wewnątrz funkcji zmiennej $db, to bez zadeklarowania jej jako globalnej, to po zakończeniu wywołania funkcji się ona "zniszczy".

A ten komunikat (tak właściwie ostrzeżenie) oznacza także, że po prostu baza danych zwróciła ci w rezultacie ZERO rekordów, i nijak tego nie da się rozbić na tablicę asocjacyjną.

W tym przypadku chyba najbezpieczniej było by użyć zapytania

SELECT COUNT(email) FROM users WHERE (...)

Wtedy rezultat zawsze będzie komórką 1x1 z ilością rekordów.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Odnośnie wyciągania hasła, to pytanie czy siedzi w bazie jako plain text czy było szyfrowane md5 lub sha1.

Wtedy trzeba wywołać funkcję szyfrowania md5/sha1 aby porównać skróty.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Jak użyłem tego skryptu od Portka to mam taki sam blad i na tych samych linijkach kodu.

Skrypt przed podaniem Tobie sprawdziłem, działał poprawnie i dane które miał wyświetlić wyświetlił. Być może email się nie zgadza, tudzież hasło? Skrypt nie ma zdefiniowanej procedury na wypadek jeżeli w bazie odpowiedniego wiersza nie będzie.

 

 

function get_user($useremail,$userpassowrd) {
global $conn;
db_connect();

$query = sprintf("SELECT * FROM users WHERE email='%s' AND password = '%s'"
				, mysql_real_escape_string($useremail),
				mysql_real_escape_string($userpassowrd)
);
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
if ($row)
	return $row;
return $error;
}
$a = get_user('asd','asd');
if ($a) {
print_r($a);
echo '<br>';
echo $a['name'];
} else { echo "Błędny email, lub hasło!"; }

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Hmm................... A jest skrypt na sprawdzenie połączenia z bazą ?

Fiercio był bym wdzięczny gdybyś dokończył mi to zapytanie.

 

-----------------------------------------

Podmieniłem teraz email i hasło na takie które mam kolejne na liscie i jest ten sam problem.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Chciałem sprawdzić czy wogole jest połączenie z baza i użyłem takiego skryptu:

<?php
if(!mysql_connect('94.23.92.159','karolo_cms','haslo')){
return 'niepolaczono';
} else {
return 'polaczono';
}
?>

I jak użyłem go to mam taki komunikat:

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'karolo_cms'@'94-23-92-159.kimsufi.com' (using password: YES) in /home/karolo/domains/karolo.zxy.me/public_html/db/test.php on line 2

 

A jak zamiast IP podałem localhost to nic mi nie zwróciło.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bez sensu jest ten skrypt który podałeś, bo ani tam funkcji nie używasz która miałaby zwrócić wartość, ani jej nie wywołujesz.

Zauważyłem też że w ogóle nie przyglądasz się temu, co wklepujesz.

Gdyby w skrypcie zawarta była komenda drop table, to zwrócił byś na to uwagę ?

 

Jeśli chcesz sprawdzić połączenie z bazą, to nie kombinuj z funkcjami tylko połącz się z nią i poinformuj o tym w prosty sposób

<?php
$connection = mysql_connect("serwer","uzytkownik","haslo");
if (!$connection) { 
echo "blad polaczenia z baza";
}else echo "polaczono z baza";
?>

Jeśli FAQ na witrynie hostingu nie informuje o tym, bazy stoją na tej samej maszynie, więc "localhost" jest nazwą hosta.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Sprawdziłem już wcześniej i połączenie mam dobre

<?php
if(!mysql_connect('localhost','login','haslo')){
echo "niepolaczono";
} else {
echo "polaczono";
}
?>

Sprawdze może zrobiłem jakies literówki jak robilem baze

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×