Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL][PHP] Skrypt nie wprowadza danych do bazy
Dr4GoN
post 19.09.2020, 15:39:40
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 18.09.2020

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


  1. $statement = $connect->prepare('INSERT INTO `user`(`id`, `imie`, `nazwisko`, `email`, `haslo`, `numer`) VALUES ([value-1], `:imie`, `:nazwisko`, `:email`, `:haslo`, `:numer` )');
  2. if($statement){
  3. $result = $statement->execute([
  4. ':imie' => $data['name'],
  5. ':nazwisko' => $data['lastname'],
  6. ':email' => $data['email'],
  7. ':haslo' => $data['password'],
  8. ':numer' => $data['phone'],
  9. ]);
  10. if($result) {
  11. $_SESSION['messages'] [] = 'Dziękujemy za rejestrację. W celu weryfikacji sprawdź swój adres e-mail.';
  12. header('string: Location: register.php');
  13. }
  14. }


Nie pokazuje mi żadnych błędów, a dane nie są wprowadzane do bazy.
Moje pytanie brzmi dlaczego tak się dzieje?
Połączenie z bazą danych jest nawiązane jak i sama baza jest poprawnie wybrana.
Dziękuję za pomoc biggrin.gif
Go to the top of the page
+Quote Post
viking
post 19.09.2020, 16:53:06
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Co to jest?
[value-1]

Dodatkowo przechwytuj wyjątki.


--------------------
Go to the top of the page
+Quote Post
Dr4GoN
post 19.09.2020, 23:00:57
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 18.09.2020

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


Cytat(viking @ 19.09.2020, 17:53:06 ) *
Co to jest?
[value-1]

Dodatkowo przechwytuj wyjątki.

[value-1] zmienna int, jako klucz główny z autoincrement

I co najlepsze, jeśli dane są przypisane pod osobne zmienne, Dane pobrane z formularza wstawiane są do bazy danych. I dziękuje z tymi wyjątkami może coś pomoże.

Ten post edytował Dr4GoN 19.09.2020, 23:04:46
Go to the top of the page
+Quote Post
dublinka
post 19.09.2020, 23:42:02
Post #4





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


To po co podajesz to id skoro jest autoincrement i po cholere [value-1]
Wywal id i to dziwne cos


--------------------
Go to the top of the page
+Quote Post
viking
post 20.09.2020, 06:17:32
Post #5





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Tak czy inaczej mysql nie ma składni z []. https://dev.mysql.com/doc/refman/8.0/en/identifiers.html


--------------------
Go to the top of the page
+Quote Post
Dr4GoN
post 20.09.2020, 08:36:18
Post #6





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 18.09.2020

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


Cytat(dublinka @ 20.09.2020, 00:42:02 ) *
To po co podajesz to id skoro jest autoincrement i po cholere [value-1]
Wywal id i to dziwne cos


Co dokładnie jest dziwne?
Usunąłem z kodu te value1, zastosowałem przechwytywanie wątków ale nic mi to nie zmieniło.
Go to the top of the page
+Quote Post
viking
post 20.09.2020, 08:52:14
Post #7





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Musisz je wcześniej włączyć. Domyślnie jest silent. No i oczywiście robisz przekierowania więc za dużo nie zobaczysz.
https://www.php.net/manual/en/pdo.error-handling.php

Ten post edytował viking 20.09.2020, 08:57:47


--------------------
Go to the top of the page
+Quote Post
trueblue
post 20.09.2020, 08:58:42
Post #8





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


  1. header('string: Location: register.php');

Raczej tam przekierowania nie ma.


--------------------
Go to the top of the page
+Quote Post
Dr4GoN
post 20.09.2020, 09:24:09
Post #9





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 18.09.2020

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


Cytat(trueblue @ 20.09.2020, 09:58:42 ) *
  1. header('string: Location: register.php');

Raczej tam przekierowania nie ma.


Przekierowanie jak najbardziej działa.

Cytat(viking @ 20.09.2020, 09:52:14 ) *
Musisz je wcześniej włączyć. Domyślnie jest silent. No i oczywiście robisz przekierowania więc za dużo nie zobaczysz.
https://www.php.net/manual/en/pdo.error-handling.php


Wyrzuciło mi takie oto błędy:
Notice: Undefined variable: connect in C:\xampp\htdocs\testowa\rejestracja\data_inserting.php on line 5

Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\testowa\rejestracja\data_inserting.php:5 Stack trace: #0 {main} thrown in C:\xampp\htdocs\testowa\rejestracja\data_inserting.php on line 5
Go to the top of the page
+Quote Post
viking
post 20.09.2020, 09:35:07
Post #10





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Wydają się dość jasne. Czy dalej masz problem?


--------------------
Go to the top of the page
+Quote Post
Dr4GoN
post 20.09.2020, 09:48:01
Post #11





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 18.09.2020

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


Cytat(viking @ 20.09.2020, 10:35:07 ) *
Wydają się dość jasne. Czy dalej masz problem?

Tak wszystko jest dosyć jasne, jednak problemem jest fakt że owa zmienna $connect została już wcześniej zdefiniowana.

  1. <?php
  2.  
  3. ini_set('display_errors','1');
  4.  
  5. header( 'Content-Type: text/html; charset=utf-8' );
  6.  
  7. $data = $_POST;
  8.  
  9. if(
  10. empty($data['name']) ||
  11. empty($data['lastname']) ||
  12. empty($data ['email']) ||
  13. empty($data['phone']) ||
  14. empty($data['password'])) {
  15. $_SESSION ['messages'] [] = 'Wprowadź wymagane dane';
  16. header("Location:register.php");
  17. }
  18.  
  19. $db_p = '';
  20. $db_u = 'root';
  21. $db_s = 'localhost';
  22. $db_n = 'test';
  23.  
  24. $connect = new mysqli("$db_s" , "$db_u" , "$db_p" , "$db_n");
  25.  
  26. if($connect->connect_error){
  27. $_SESSION ['messages'] [] = 'Nie udało połączyć się z serwerem';
  28. header("Location:register.php");
  29. }
  30.  
  31. $statement = $connect->prepare('SELECT * FROM user WHERE email = :email OR numer = :numer');
  32. if($statement){
  33.  
  34. $result = $statement->execute([
  35. ':email' => $data['email'],
  36. ':numer' => $data['phone'],
  37. ]);
  38.  
  39. $result = $statement->fetchAll(PDO::FETCH_ASSOC);
  40.  
  41. if(!empty($result)){
  42. $_SESSION['messages'] [] = 'Podany adres e-mail lub numer telefonu jest już przypisany do konta';
  43. header('Location:register.php');
  44. }
  45. }
  46.  
  47. $statement = $connect->prepare('INSERT INTO `user`(`id`, `imie`, `nazwisko`, `email`, `haslo`, `numer`) VALUES ( `:imie`, `:nazwisko`, `:email`, `:haslo`, `:numer` )');
  48. if($statement){
  49. $result = $statement->execute([
  50. ':imie' => $data['name'],
  51. ':nazwisko' => $data['lastname'],
  52. ':email' => $data['email'],
  53. ':haslo' => $data['password'],
  54. ':numer' => $data['phone'],
  55. ]);
  56. if($result) {
  57. $_SESSION['messages'] [] = 'Dziękujemy za rejestrację. W celu weryfikacji sprawdź swój adres e-mail.';
  58. header('Location:register.php');
  59. }
  60. }
  61.  
  62.  
  63. ?>


Tak wygląda cały kod
Go to the top of the page
+Quote Post
viking
post 20.09.2020, 10:08:42
Post #12





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Korzystasz z mysqli nie pdo. Execute nie przyjmuje żadnych parametrów.


--------------------
Go to the top of the page
+Quote Post
Dr4GoN
post 20.09.2020, 12:49:53
Post #13





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 18.09.2020

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


Cytat(viking @ 20.09.2020, 11:08:42 ) *
Korzystasz z mysqli nie pdo. Execute nie przyjmuje żadnych parametrów.

Okey pozmieniałem trochę, ale dalej dane nie chcą wprowadzić się do bazy.
W bazie istnieją dwa rekordy, wprowadzone ręcznie na potrzeby testu, całość działa aż do funkcji sprawdzającej czy dany użytkownik nie widnieje w bazie,
w momencie gdy mają zostać wprowadzone dane do bazy całość się wysypuje bez żadnych kodów błędów
Go to the top of the page
+Quote Post
trueblue
post 20.09.2020, 12:53:02
Post #14





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Jeśli nie wstawiasz nic do pola `id`, to nie powinno być go na liście pól w INSERT.
A wstawianych wartości nie obejmuje się w `.

Ten post edytował trueblue 20.09.2020, 12:54:07


--------------------
Go to the top of the page
+Quote Post
Dr4GoN
post 20.09.2020, 12:53:55
Post #15





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 18.09.2020

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


Dobra całość działa okazało się że problemem były ``(tzw. ciapki)
Go to the top of the page
+Quote Post
Tomplus
post 20.09.2020, 13:09:49
Post #16





Grupa: Zarejestrowani
Postów: 1 828
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

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


No tak, ` to cudzysłów dla nazw w MySQL, a ' lub " to dla stringów w MySQL jedynie, trzeba o tym pamiętać, mnie też kilka razy spotkał ten problem.
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: 29.03.2024 - 11:29