Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Błąd przy dodawaniu rekordów do bazy
Forum PHP.pl > Forum > PHP > Object-oriented programming
soft
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:
  1. <form method="post" action="nowa_rejestracja.php">
  2. <table bgcolor="#cccccc">
  3. <tr>
  4. <td>Adres poczty elektronicznej:</td>
  5. <td><input type="text" name="email" size="30" maxlength="100"></td></tr>
  6. <tr>
  7. <td>Preferowana nazwa użytkownika <br />(maksymalnie 16 znaków):</td>
  8. <td valign="top"><input type="text" name="nazwa_uz"
  9. size="16" maxlength="16"/></td></tr>
  10. <tr>
  11. <td>Hasło <br />(pomiędzy 6 i 16 znaków):</td>
  12. <td valign="top"><input type="password" name="haslo"
  13. size="16" maxlength="16"/></td></tr>
  14. <tr>
  15. <td>Potwierdź hasło:</td>
  16. <td><input type="password" name="haslo2" size="16" maxlength="16"/></td></tr>
  17. <tr>
  18. <td colspan="2" align="center">
  19. <input type="submit" value="Rejestracja"></td></tr>
  20. </table></form>


w pliku nowa_rejestracja.php jest cos takiego:
  1. $email=$_POST['email'];
  2. $nazwa_uz=$_POST['nazwa_uz'];
  3. $haslo=$_POST['haslo'];
  4. $haslo2=$_POST['haslo2'];


zas w pliku wykonujacym zapytanie jest:
  1. $wynik = $lacz->query("insert into uzytkownik values (nazwa_uz='".$nazwa_uz."', haslo='".$haslo."', email='".$email."')");
  2. if (!$wynik) {
  3. throw new Exception('Rejestracja w bazie danych niemożliwa — proszę spróbować później.');
  4. }
Orzeszekk
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:
  1. <form method="post" action="nowa_rejestracja.php">
  2. <table bgcolor="#cccccc">
  3. <tr>
  4. <td>Adres poczty elektronicznej:</td>
  5. <td><input type="text" name="email" size="30" maxlength="100"></td></tr>
  6. <tr>
  7. <td>Preferowana nazwa użytkownika <br />(maksymalnie 16 znaków):</td>
  8. <td valign="top"><input type="text" name="nazwa_uz"
  9. size="16" maxlength="16"/></td></tr>
  10. <tr>
  11. <td>Hasło <br />(pomiędzy 6 i 16 znaków):</td>
  12. <td valign="top"><input type="password" name="haslo"
  13. size="16" maxlength="16"/></td></tr>
  14. <tr>
  15. <td>Potwierdź hasło:</td>
  16. <td><input type="password" name="haslo2" size="16" maxlength="16"/></td></tr>
  17. <tr>
  18. <td colspan="2" align="center">
  19. <input type="submit" value="Rejestracja"></td></tr>
  20. </table></form>


w pliku nowa_rejestracja.php jest cos takiego:
  1. $email=$_POST['email'];
  2. $nazwa_uz=$_POST['nazwa_uz'];
  3. $haslo=$_POST['haslo'];
  4. $haslo2=$_POST['haslo2'];


zas w pliku wykonujacym zapytanie jest:
  1. $wynik = $lacz->query("insert into uzytkownik values (nazwa_uz='".$nazwa_uz."', haslo='".$haslo."', email='".$email."')");
  2. if (!$wynik) {
  3. throw new Exception('Rejestracja w bazie danych niemożliwa — proszę spróbować później.');
  4. }


Inserta zle napisałeś.
Prawidłowy wyglada tak:
  1. $queryText = sprintf("insert into uzytkownik (nazwa_uz, haslo, email) values ('%s$1','%s$2','%s$3')", $nazwa_uz, $haslo,$email);
  2. $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 smile.gif To taki szczegol.

Twoj komunikat o błędzie jest troche zły. Ja te $lacz->query() zrobilbym tak:
  1.  
  2. class DatabaseException extends Exception
  3. {
  4. }
  5.  
  6. class Jakastam{
  7. public function query($queryText)
  8. {
  9. $result = mysql_query($queryText);
  10. $error_result = mysql_error($result);
  11. if ($error_result)
  12. {
  13. throw new DatabaseException("Error during fetching mysql database: $error_result");
  14. }
  15. return $result;
  16. }
  17. }


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:
  1. try{
  2. $lacz->query($queryText);
  3. }catch(DatabaseException $exception)
  4. {
  5. // jak cos nie bedzie dzialalo to podstawisz breakpoint i debuggerem sprawdzisz ew.
  6. // log_to_error_log($exception->getMessage());
  7. throw new Exception("Rejestracja niemozliwa prosze sprobowac pozniej");
  8. }


jesli sie gdzies pomyliem to prosze mnie poprawic smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.