Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Dodaje puste rekordy do bazy danych
Forum PHP.pl > Forum > Przedszkole
thomson89
Witam!

W skrypcie rejestracji w sklepie mam pewne problemy. Otóż, niektórym osobom skrypt dodaje do bazy danych puste rekordy do jednej z tabel lub kilku, a niektórym w ogóle nic nie dodaje mimo iż dane i zapytania są poprawne.

Przed tym skryptem są trzy kroki. Na każdym z kroków uzupełniane są dane w sesji i sprawdzane - ewentualnie przenosi do danego kroku i każe coś poprawić. Nie wiem niestety w czym jest błąd.

Kod może nie jest idealny, ale pierwszy raz robię rejestrację i to jeszcze tak zaawansowaną.

Skrypt dodający:
  1. $polaczenie = new baza;
  2.  
  3. //Po pierwsze dodajemy dane adresowe --------------------------------------------------------------------------------------------
  4. $query = 'INSERT INTO klienci_dane_adresowe (imie, nazwisko, kraj, województwo, miasto, kod_pocztowy, ulica, numer_m_d, adres_podstawowy) VALUES (';
  5. $query .= '\''.$_SESSION['rejestracja']['dane'][2]['imie'].'\',';
  6. $query .= '\''.$_SESSION['rejestracja']['dane'][2]['nazwisko'].'\',';
  7. $query .= '\''.$_SESSION['rejestracja']['dane'][2]['kraj'].'\',';
  8. $query .= '\''.$_SESSION['rejestracja']['dane'][2]['wojewodztwo'].'\',';
  9. $query .= '\''.$_SESSION['rejestracja']['dane'][2]['miejscowosc'].'\',';
  10. $query .= '\''.$_SESSION['rejestracja']['dane'][2]['kodpocztowy'].'\',';
  11. $query .= '\''.$_SESSION['rejestracja']['dane'][2]['nazwaulicy'].'\',';
  12. $query .= '\''.$_SESSION['rejestracja']['dane'][2]['numermieszkania'].'\',';
  13. $query .= '1)';
  14.  
  15. $result = mysql_query($query);
  16. $klienci_dane_adresowe_id = mysql_insert_id();
  17.  
  18. //Po drugie umieszczamy dane do aktywacji ---------------------------------------------------------------------------------------
  19. $kod = sha1(substr(md5(date("d.m.Y.H.i.s").rand(1,1000000)) , 0 , 12));
  20.  
  21. $query = 'INSERT INTO klienci_dane_aktywacji (kod_aktywacji) VALUES (\''.$kod.'\')';
  22.  
  23. $result = mysql_query($query);
  24. $klienci_dane_aktywacji_id = mysql_insert_id();
  25.  
  26.  
  27. //Po trzecie dane kontaktowe ----------------------------------------------------------------------------------------------------
  28. $query = 'INSERT INTO klienci_dane_kontaktowe (email, numer_tel, numer_dom) VALUES (';
  29. $query .= '\''.$_SESSION['rejestracja']['dane'][1]['email'].'\',';
  30. $query .= '\''.$_SESSION['rejestracja']['dane'][2]['telkom'].'\',';
  31. $query .= '\''.$_SESSION['rejestracja']['dane'][2]['teldom'].'\')';
  32.  
  33. $result = mysql_query($query);
  34. $klienci_dane_kontaktowe_id = mysql_insert_id();
  35.  
  36. //Po czwarte dane podstawowe ----------------------------------------------------------------------------------------------------
  37. $haslo = sha1($_SESSION['rejestracja']['dane'][1]['haslo']);
  38. //echo $_SESSION['rejestracja']['dane'][1]['haslo'].'<br>';
  39.  
  40. $query = 'INSERT INTO klienci_dane_podstawowe (login, haslo, pytanie, odpowiedz, imie, nazwisko) VALUES (';
  41. $query .= '\''.$_SESSION['rejestracja']['dane'][1]['identyfikator'].'\',';
  42. $query .= '\''.$haslo.'\',';
  43. $query .= '\''.$_SESSION['rejestracja']['dane'][1]['pytanie'].'\',';
  44. $query .= '\''.$_SESSION['rejestracja']['dane'][1]['odpowiedz'].'\',';
  45. $query .= '\''.$_SESSION['rejestracja']['dane'][2]['imie'].'\',';
  46. $query .= '\''.$_SESSION['rejestracja']['dane'][2]['nazwisko'].'\')';
  47.  
  48. $result = mysql_query($query);
  49. $klienci_dane_podstawowe_id = mysql_insert_id();
  50.  
  51. //Po piąte dane statystyczne ----------------------------------------------------------------------------------------------------
  52. $query = 'INSERT INTO klienci_dane_statystyczne (ile_kupil) VALUES (0)';
  53.  
  54. $result = mysql_query($query);
  55. $klienci_dane_statystyczne_id = mysql_insert_id();
  56.  
  57. //Po szóste dane ustawień -------------------------------------------------------------------------------------------------------
  58. $wartosc = $_POST['sysprom'] == 'zgoda' ? '1' : '0';
  59. $query = 'INSERT INTO klienci_dane_ustawien (maile_promocyjne) VALUES ('.$wartosc.')';
  60.  
  61. $result = mysql_query($query);
  62. $klienci_dane_ustawien_id = mysql_insert_id();
  63.  
  64. //KOŃCZYMY IMPREZE --------------------------------------------------------------------------------------------------------------
  65. $query = 'INSERT INTO klienci (iddanepodstawowe, iddanekontaktowe, iddaneustawien, iddanestatystyczne, iddaneadresowe, iddaneaktywacji, typ, aktywowane) VALUES (';
  66. $query .= '\''.$klienci_dane_podstawowe_id.'\',';
  67. $query .= '\''.$klienci_dane_kontaktowe_id.'\',';
  68. $query .= '\''.$klienci_dane_ustawien_id.'\',';
  69. $query .= '\''.$klienci_dane_statystyczne_id.'\',';
  70. $query .= '\''.$klienci_dane_adresowe_id.'\',';
  71. $query .= '\''.$klienci_dane_aktywacji_id.'\',';
  72. $query .= '0,';
  73. $query .= '0)';


Proszę o pomoc!
uzi123
Na pierwszy rzut oka wygląda to poprawnie, wiec pewnie problem jest w jakieś literówce. Zamiast mysql_query daj echo $query, skopiuj wynik i wykonaj ręcznie na bazie danych, zobaczysz co MySQL ci powie. Nie wiem tez co siedzi w zmiennych sesyjnych, jesli są puste to nic dziwnego, że rekordy też są puste.
thek
Ja się boję o coś co poniżej podam:
1) Możliwe, że podczas przechodzenia między krokami dane nie zostają zapisane do sesji lub nadpisują się wartościami pustymi/domyślnymi
2) Nie sprawdzasz czy zapytanie zwróciło jakieś błędy. Wywali się w jednym i jest kicha, bo zawalasz wszystkie inserty od niego zależne.
3) Nie zabezpieczasz danych idących do bazy! Jesli tego nie zrobisz masz problem ze znakami ucieczki i do bazy idą cyrkowe zapytania, które przez bazę nie potrafią być przetworzone. Przykład? Wpisz jako adres: ulica Ch. de Gaulle'a 5 :) zauważ, że pojawił się ', który najpewniej wysypie zapytanie bo zamknie przedwcześnie całość wartości dla adresu, a reszta będzie dla bazy bezsensowna i uzna je za błędne zapytanie oraz nie wykona go, przez co zależne od niego inserty także się posypią.

Weź sobie zrób logowanie operacji insert: zapytań i ich wyników oraz tego co masz na końcu w sesji, tuż przed dodawaniem. Inaczej nie dojdziesz do przyczyn. Może być bowiem sytuacja, któraś z powyższych. Jak dla mnie patrząc na kod (który jest prawidłowy, ale nie zabezpieczony), nie ma błędu składni. Musi być więc być błąd innego typu.
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.