Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [SQL][PHP] Skrypt nie wprowadza danych do bazy

Napisany przez: Dr4GoN 19.09.2020, 15:39:40

  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. http://www.php.net/header('string: Location: register.php');
  13. http://www.php.net/exit;
  14. }
  15. }


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

Napisany przez: viking 19.09.2020, 16:53:06

Co to jest?
[value-1]

Dodatkowo przechwytuj wyjątki.

Napisany przez: Dr4GoN 19.09.2020, 23:00:57

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.

Napisany przez: dublinka 19.09.2020, 23:42:02

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

Napisany przez: viking 20.09.2020, 06:17:32

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

Napisany przez: Dr4GoN 20.09.2020, 08:36:18

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.

Napisany przez: viking 20.09.2020, 08: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

Napisany przez: trueblue 20.09.2020, 08:58:42

  1. http://www.php.net/header('string: Location: register.php');

Raczej tam przekierowania nie ma.

Napisany przez: Dr4GoN 20.09.2020, 09:24:09

Cytat(trueblue @ 20.09.2020, 09:58:42 ) *
  1. http://www.php.net/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

Napisany przez: viking 20.09.2020, 09:35:07

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

Napisany przez: Dr4GoN 20.09.2020, 09:48:01

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


Tak wygląda cały kod

Napisany przez: viking 20.09.2020, 10:08:42

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

Napisany przez: Dr4GoN 20.09.2020, 12:49:53

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

Napisany przez: trueblue 20.09.2020, 12:53:02

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 `.

Napisany przez: Dr4GoN 20.09.2020, 12:53:55

Dobra całość działa okazało się że problemem były ``(tzw. ciapki)

Napisany przez: Tomplus 20.09.2020, 13:09:49

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.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)