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;
}
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?
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'");
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;
}
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:
$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?