Cytat(soft @ 7.03.2012, 20:05:44 )

Wybaczcie ale mam kolejny problem, a mianowicie:
gdy tabela jest pusta, to formularz wyswietla napis ze dane zostały pomyslnie wpisane, tylko ze gdy sprawdze baze to zamiast danych wpisaly sie same 0, zaś gdy w tabeli jest juz jeden rekord z wlasnie tymi "zerami" to formularz juz nie dodaje kolejnych rekordów.
formularz to:
<form method="post" action="nowa_rejestracja.php"> <table bgcolor="#cccccc"> <td>Adres poczty elektronicznej:
</td> <td><input type="text" name="email" size="30" maxlength="100"></td></tr> <td>Preferowana nazwa użytkownika
<br />(maksymalnie 16 znaków):
</td> <td valign="top"><input type="text" name="nazwa_uz" size="16" maxlength="16"/></td></tr> <td>Hasło
<br />(pomiędzy 6 i 16 znaków):
</td> <td valign="top"><input type="password" name="haslo" size="16" maxlength="16"/></td></tr> <td>Potwierdź hasło:
</td> <td><input type="password" name="haslo2" size="16" maxlength="16"/></td></tr> <td colspan="2" align="center"> <input type="submit" value="Rejestracja"></td></tr>
w pliku nowa_rejestracja.php jest cos takiego:
$email=$_POST['email'];
$nazwa_uz=$_POST['nazwa_uz'];
$haslo=$_POST['haslo'];
$haslo2=$_POST['haslo2'];
zas w pliku wykonujacym zapytanie jest:
$wynik = $lacz->query("insert into uzytkownik values (nazwa_uz='".$nazwa_uz."', haslo='".$haslo."', email='".$email."')");
if (!$wynik) {
throw new Exception('Rejestracja w bazie danych niemożliwa — proszę spróbować później.');
}
Inserta zle napisałeś.
Prawidłowy wyglada tak:
$queryText = sprintf("insert into uzytkownik (nazwa_uz, haslo, email) values ('%s$1','%s$2','%s$3')", $nazwa_uz, $haslo,$email); $lacz->query($queryText);
Uzylem funkcji sprintf bo czytelniej i szybciej formatuje stringi niz konkatenacja kropkami. W razie czego odsłyłam do manuala.
Skladnia inserta jest nastepujaca
INSERT INTO nazwa_tabeli (NAZWA_POLA_1, NAZWA_POLA_2, NAZWA_POLA_3) values ('VALUE_1', 'VALUE_2','VALUE_3')
apostrofy dajesz tylko wtedy jak wstawiasz stringi.
Pamietaj ze konwencja w SQLu każe pisac nazwy polecen capslockiem z duzej litery

To taki szczegol.
Twoj komunikat o błędzie jest troche zły. Ja te $lacz->query() zrobilbym tak:
class DatabaseException extends Exception
{
}
class Jakastam{
public function query($queryText)
{
if ($error_result)
{
throw new DatabaseException("Error during fetching mysql database: $error_result");
}
return $result;
}
}
wtedy bedziesz mogl sobie złapac wyjątek databaseException i bedziesz mial tam komunikat diagnostyczny po ktorym wywnioskujesz co popsules. Oczywiscie nie musisz go wyswietlac userowi:
try{
$lacz->query($queryText);
}catch(DatabaseException $exception)
{
// jak cos nie bedzie dzialalo to podstawisz breakpoint i debuggerem sprawdzisz ew.
// log_to_error_log($exception->getMessage());
throw new Exception("Rejestracja niemozliwa prosze sprobowac pozniej");
}
jesli sie gdzies pomyliem to prosze mnie poprawic