Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP][OOP] Nie dodaje wpisu do bazy
Turson
post 28.10.2013, 17:47:37
Post #1





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Analizuję od godziny i nie mogę znaleźć przyczyny, dlaczego wpis nie jest dodawany do bazy, a komunikat się wyświetla.

*Struktura bazy:
wpis: `id` int(11) | `user_id` int(3) | `title` char(50) | `content` text | `data` date
*Połączenie z bazą jest.
*Zmienne post oraz z sesji poprawne
*Błędów żadnych nie wywala

Może ktoś rzuci świeżym okiem i od razu wychwyci smile.gif

  1. <h3>Dodaj wpis</h3>
  2. <?PHP
  3. function form(){
  4. <div id="wpis_form">
  5. <form action="index.php?page=new" method="post">
  6. <input type="text" name="title" placeholder="Tytuł" required maxlength="30"><br>
  7. <textarea name="content" placeholder="Treść" maxlength="500" required></textarea><br>
  8. <input type="submit" name="sent" value="Dodaj wpis">
  9. </form>
  10. </div>
  11. ';
  12. }
  13. class dodajWpis extends Connect{
  14.  
  15. function Length($title,$content){
  16. if(strlen($title)>=5 && strlen($content)>=5){
  17. return true;
  18. }
  19. }
  20. function ifNotExists($title){
  21. $zap=$this->db->prepare("SELECT id FROM wpisy WHERE title=:title");
  22. $zap->bindValue(':title', $title, PDO::PARAM_STR);
  23. $zap->execute();
  24. if($zap->rowCount()==0){
  25. return true;
  26. }
  27. }
  28. function getId($title){
  29. $zap=$this->db->prepare("SELECT id FROM wpisy WHERE title=:title");
  30. $zap->bindValue(':title', $title, PDO::PARAM_STR);
  31. $zap->execute();
  32. return $zap->fetch()['id'];
  33. }
  34. function dodaj($title,$content,$user_id){
  35. $query = $this->db->prepare("INSERT INTO wpisy VALUES(null, '$user_id', :title, :content, CURDATE()");
  36. $query -> bindValue(':title', $title, PDO::PARAM_STR);
  37. $query -> bindValue(':content', $content, PDO::PARAM_STR);
  38. $query -> execute();
  39. }
  40.  
  41. }
  42. $o=new dodajWpis();
  43. if(isset($_SESSION["logged"]))
  44. {
  45. if(isset($_POST["sent"]))
  46. {
  47. $title=trim($_POST['title']);
  48. $content=trim($_POST['content']);
  49. if($o->Length($title,$content))
  50. {
  51. if($o->ifNotExists($title))
  52. {
  53. $user_id=$_SESSION["user_id"];
  54. $o->dodaj($title,$content,$user_id);
  55. echo '<a href="index.php?page=wpis&id='.$o->getId($title).'">Wpis został dodany.</a>';
  56. }
  57. else{
  58. echo "Wpis o podanym tytule już istnieje!<br>";
  59. form();
  60. }
  61. }
  62. else{
  63. echo "Tytuł i/lub treść są za krótkie!<br>";
  64. form();
  65. }
  66. }
  67. else{
  68. form();
  69. }
  70. }
  71. else{
  72. header('Location:index.php?page=login');
  73. }
  74. ?>


Ten post edytował Turson 28.10.2013, 18:12:21
Go to the top of the page
+Quote Post
Wazniak96
post 28.10.2013, 18:06:35
Post #2





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

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


Do zapytań INSERT, UPDATE, DELETE używany exec, a nie execute wink.gif
Go to the top of the page
+Quote Post
Turson
post 28.10.2013, 18:11:06
Post #3





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Tak, ale ja napierw binduję smile.gif


@down
Lajtowo biggrin.gif

Ten post edytował Turson 28.10.2013, 18:29:22
Go to the top of the page
+Quote Post
Wazniak96
post 28.10.2013, 18:22:27
Post #4





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

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


Ahhh wybacz. Kolejny przykład, że jeszcze wiele muszę się nauczyć.

Jeszcze raz sorki wink.gif
Go to the top of the page
+Quote Post
nospor
post 28.10.2013, 18:38:48
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
dlaczego wpis nie jest dodawany do bazy, a komunikat się wyświetla.
Dziwne pytanie.... komunikat sie wyswietla, bo go wyswietlasz bezwarunkowo, niezaleznie czy sie dodalo do bazy czy nie.... nie sadziszz, ze komunikat o dodaniu powinienes wyswietlac dopiero jak sie poprawnie doda? Do tego sluzy IF.
A jak sie nie doda poprawnie, to nalezy wyswietlic blad bazy, a wowczas dowiesz sie, czemu sie nie dodalo.... takie tam podstawy podstaw...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Dejmien_85
post 28.10.2013, 18:41:41
Post #6





Grupa: Zarejestrowani
Postów: 251
Pomógł: 23
Dołączył: 23.04.2013

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


Cytat(Turson @ 28.10.2013, 17:47:37 ) *
  1. function dodaj($title,$content,$user_id){
  2. $query = $this->db->prepare("INSERT INTO wpisy VALUES(null, '$user_id', :title, :content, CURDATE()");


Łot yz dys?

Ten post edytował Dejmien_85 28.10.2013, 18:50:55
Go to the top of the page
+Quote Post
Turson
post 28.10.2013, 19:03:01
Post #7





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Cytat(nospor @ 28.10.2013, 18:38:48 ) *
Dziwne pytanie.... komunikat sie wyswietla, bo go wyswietlasz bezwarunkowo, niezaleznie czy sie dodalo do bazy czy nie.... nie sadziszz, ze komunikat o dodaniu powinienes wyswietlac dopiero jak sie poprawnie doda? Do tego sluzy IF.
A jak sie nie doda poprawnie, to nalezy wyswietlic blad bazy, a wowczas dowiesz sie, czemu sie nie dodalo.... takie tam podstawy podstaw...

Mówiąc o kumunikacie to miałej raczej na myśli, że błąd leży gdzieś w samym dodawaniu a nie wcześniej skoro przechodzi do dodawania (pozornie).
Ale faktycznie masz rację, więc zmodyfikowałem
  1. function dodaj($title,$content,$user_id){
  2. $query = $this->db->prepare("INSERT INTO wpisy VALUES(null, '$user_id', :title, :content, CURDATE()");
  3. $query -> bindValue(':title', $title, PDO::PARAM_STR);
  4. $query -> bindValue(':content', $content, PDO::PARAM_STR);
  5. if($query -> execute()){
  6. return true;
  7. }
  8. //dalej
  9. $user_id=$_SESSION["user_id"];
  10. if($o->dodaj($title,$content,$user_id))
  11. {
  12. echo '<a href="index.php?page=wpis&id='.$o->getId($title).'">Wpis został dodany.</a>';
  13. }
  14. else{
  15. echo "Wystąpił nieoczekiwany błąd!";
  16. }

I rzeczywiście bład...


Cytat(Dejmien_85 @ 28.10.2013, 18:41:41 ) *
Łot yz dys?

Możesz rozwinąć myśl? Podobna metoda działa mi prawidłowo w innej klasie.
Go to the top of the page
+Quote Post
nospor
post 28.10.2013, 19:15:37
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
I rzeczywiście bład...
facepalmxd.gif
Napisalem wyraznie: masz wyswielic blad bazy, a nie tekst "blad".... przeciez to ci nic nie mowi.... zajrzyj do manuala i zobacz jak PDO wyswietla bledy bazy.



--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Turson
post 28.10.2013, 19:18:55
Post #9





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Syntax error. Nie domknąłem nawiasa w VALUES() sciana.gif

Ten post edytował Turson 28.10.2013, 19:19:45
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: 5.07.2025 - 16:25