Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Dodaje puste rekordy do bazy danych, Dane do kilku tabelek
thomson89
post 20.12.2010, 13:45:17
Post #1





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


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!
Powód edycji: [thek]: Poprawiłem na znacznik php zamiast codebox. Następnym razem będzie ochrzan :) Za długo tu jesteś by nie znać reguł :)


--------------------
Sklep 70%
Go to the top of the page
+Quote Post
uzi123
post 21.12.2010, 09:36:14
Post #2





Grupa: Zarejestrowani
Postów: 31
Pomógł: 5
Dołączył: 7.05.2010

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


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.


--------------------
-------------------------------------------------------------------------
My blog
Go to the top of the page
+Quote Post
thek
post 21.12.2010, 10:28:26
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 15.07.2025 - 06:08