[php,sql] Zapytania select nie działąją

Zainstalowałem sobie na komputerze WAMPa. Wszystko nawet chodzi, gdyby nie to, że nie działają mi zapytania select do bazy. Nie wiem czy to mój błąd w napisanym skrypcie czy muszę jakoś skonfigurować dodatkowo tego WAMPa. Na wszelki wypadek kawałki skryptów:

$wynik=$lacz->query("select email from user where email='$email'");

if($lacz->num_rows>0) {

	echo "Taki adres email już jest zajęty w naszej bazie";

	exit;

}

$wynik=$lacz->query("select user from user where user='$user' and pass='$pass'");

if($lacz->num_rows>0) {

	$_SESSION['user']=$user;

	echo "zostałes pomyślnie zalogowany jako: ".$_SESSION['user'];

	exit;

}

else {

	echo "Twój nick lub hasło są niepoprawne";

	exit;

}

Strzelam że chodzi o wyłączone globalne, zmień

$email

na

$_POST[email]

analogicznie reszta danych która pochodzi z formularza.

Nie to nie to, niestety. Mam to zresztą na samym początku:

$user=$_POST['user'];

$pass=$_POST['pass'];

$pass2=$_POST['pass2'];

$email=$_POST['email'];

$email2=$_POST['email2'];

Zapomniałem zresztą napisać, że jeśli chodzi np. o wprowadzenie za pomocą INSERT wszystko jest ok. I właśnie to jest najdziwniejsze : /

Masz połączenie z bazą? Po każdym zapytaniu dodaj:

or die(mysql_error());

to wyświetli treść błędu, który uniemożliwił pobranie danych z bazy.

Podstawowe pytania. Co to znaczy, że nie działają, zwracany jest jakiś błąd? To co to za klasa której używasz do łączenia się z bazą danych, może z nią coś jest nie tak?

$wynik=$lacz->query("select user from user where user='$user' and pass='$pass'")or die(mysql_error());

Nie wyświetliło mi niczego : / W bazą łącze sie poprzez :

$wynik=new mysqli('localhost','root','haslo','baza');

Spróbowałem też w ten sposób:

mysql_connect('localhost','root','haslo');

mysql_select_db("baza");

Ale wtedy przy każdym zapytaniu do bazy wywala mi taki błąd:

Call to a member function query() on a non-object in

Mieszasz bardzo programowanie obiektowe z proceduralnym. Jeżeli chcesz korzystać z klasy MySQLi to zdaje się, że podstawowym błędem jaki robisz jest nie rozumienie podstaw programowania obiektowego, zobacz taką koncepcję:

$mysqli = new mysqli('localhost','root','haslo','baza');

$wynik = $mysqli->query("select user from user where user='$user' and pass='$pass'");

Sprawdziłem zarówno przy skrypcie rejestracji jak i logowania i niestety też nie działa. Może masz jeszcze jakieś inne pomysły ?

Pokaż całość, bo masz błędy logiczne przy budowanie aplikacji, a bez całości to ciężko wskazać wszystkie miejsca gdzie leży błąd. I napisz jeszcze co to znaczy, że nie działa, jakikolwiek komunikat? error, notice, cokolwiek?

Chyba faktycznie najlepiej będzie jak pokaże całość:

<?php

require('funkcje.php');


$user=$_POST['user'];

$pass=$_POST['pass'];

$pass2=$_POST['pass2'];

$email=$_POST['email'];

$email2=$_POST['email2'];

$lacz=lacz();


if(!wypelnony($_POST)) {

echo "Nie zostały wypełnone wszystkie pola formularza. Spróbuj ponownie.";

exit; }


if(strlen($user)<6) {

	echo "Podana nazwa użytkownika ma mniej niz 6 znaków";

	exit;

}

else {

	$wynik=$lacz->query("select user from user where user='$user'"); 

	if($lacz->num_rows>0) {

	echo "Nazwa użytkownika zejęta";

	exit; 

	}

}


if(strlen($pass)<6) {

echo "Podane hasło ma mniej niz 6 znaków";

exit; }


if($pass!=$pass2) {

echo "Podane hasła nie są identyczne";

exit; }


if(!sprawdz_email($email)) { 

	echo "Adres email jest niepoprawny";

	exit; 

}


if($email!=$email2) {

	echo "Podane adresy pocztowe nie są identyczne";

	exit; 

}


$wynik=$lacz->query("select email from user where email='$email'");

if($lacz->num_rows>0) {

	echo "Taki adres email już jest zajęty w naszej bazie";

	exit;

}


$wynik=$lacz->query("insert into user (user,pass,email) values ('$user','$pass','$email')")or die (mysqli_error());

echo "Zostałeś pomyślnie zarejestrowany";

?>

Funkcję lacz() mam oczywiście w pliku funkcje.php i wygląda ona tak:

function lacz()

{

$wynik=new mysqli('localhost','root','haslo','baza');

if(!wynik)

echo "połączenie z bazą danych nie powiodło się.";

else

return $wynik;

}

Pod jaką wersją php próbujesz to uruchomić?

Wersja php: 5.2.5 a poza tym mysql:5.0.51a i apache 2.2.8

Przepraszam, ze odświeżyłem niepotrzebnie nie spojrzałem na datę ;p

Spróbuj na początku dodać error_reporting(E_ALL);

function lacz()

{

$wynik=new mysqli('localhost','root','haslo','baza');

if(!wynik)

echo "połączenie z bazą danych nie powiodło się.";

else

return $wynik;

}

Takie coś przy nieudanym połączeniu nie zwróciło by ‘echo “połączenie z bazą danych nie powiodło się.”;’ bo pomimo, że połączenie się nie udało to $wynik zawiera obiekt mysqli. Chociaż w dalszej części skryptu powinno wywalać błędy i dla tego proponuje upewnić się, że jest włączone error_reporting. więc:

function lacz()

{

$wynik=new mysqli('localhost','root','haslo','baza');

if(mysqli_connect_errno())

die(mysqli_connect_error());

else

return $wynik;

}

dodatkowo przy każdym zapytaniu

$lacz->query("...zapytanie....") or die($lacz->error);

Jest to dość kłopotliwe dlatego wypadałoby napisać własną klasę opartą oczywiście na mysqli, która miała by takie same metody ale dodatkowo wyświetlała by nam wszystkie błędy.

Skądś kojarzę ten kod czy nie jest to przypadkiem przepisane z książki Heliona PHP i MySQL Tworzenie stron WWW Vademecum Profesjonalisty?