Explor1 0 Zgłoś post Napisano Październik 18, 2010 Witam, ja mam problem z skryptem php na polaczenie sie do bazy. Oto on: <?phpfunction 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
Portek 0 Zgłoś post Napisano Październik 18, 2010 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
grykom 0 Zgłoś post Napisano Październik 18, 2010 SELECT * FROM users WEHERE email='$useremail' AND password = '$userpassowrd'" WEHERE? Udostępnij ten post Link to postu Udostępnij na innych stronach
Jay 13 Zgłoś post Napisano Październik 19, 2010 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
Explor1 0 Zgłoś post Napisano Październik 19, 2010 (edytowany) 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 Październik 19, 2010 przez Explor1 (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
kafi 2425 Zgłoś post Napisano Październik 19, 2010 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
Jay 13 Zgłoś post Napisano Październik 19, 2010 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
Portek 0 Zgłoś post Napisano Październik 19, 2010 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
Explor1 0 Zgłoś post Napisano Październik 19, 2010 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
kafi 2425 Zgłoś post Napisano Październik 19, 2010 Żeby nie wróżyć z fusów, zastosuj konstrukcję mysql_query($query) or die('error: '.mysql_error()); Udostępnij ten post Link to postu Udostępnij na innych stronach
Explor1 0 Zgłoś post Napisano Październik 19, 2010 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
Jay 13 Zgłoś post Napisano Październik 19, 2010 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
Explor1 0 Zgłoś post Napisano Październik 20, 2010 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