Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Błąd przy dodawaniu rekordów do bazy
soft
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 28.02.2009

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
Orzeszekk
post
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 07:06