Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Dodawanie danych do bazy danych z pozycji strony
Forum PHP.pl > Forum > Przedszkole
sadek86
Witam na forum, bawię się od niedawna php i teraz przyszła kolej na bazy danych, udało mi sie uzyskać połączenie oraz wyświetlić zawartość bazy danych, ale nie mogę nic dodać przez formularz.

Baza danych w mysql: Komentarze
Tabela: komenty
Zmienne: tekstkoment (tylko tekst)
datakoment (data w formacie xxxx-xx-xx)

Wyświetlenie bazy danych: baza.php
  1. <?php
  2.  
  3. $link = mysqli_connect('localhost', 'root', '11111');
  4. if (!$link)
  5. {
  6. $error = 'Nie można się połšczyć z serwerem bazy danych.';
  7. include 'error.html.php';
  8. exit();
  9. }
  10.  
  11. if (!mysqli_set_charset($link, 'utf8'))
  12. {
  13. $output = 'Nie można ustanowić kodowania dla połšczenia z bazš danych.';
  14. include 'output.html.php';
  15. exit();
  16. }
  17.  
  18. if (!mysqli_select_db($link, 'komentarze'))
  19. {
  20. $error = 'Nie znaleziono bazy danych komenty.';
  21. include 'error.html.php';
  22. exit();
  23. }
  24.  
  25. $result = mysqli_query($link, 'SELECT * FROM komenty');
  26. if (!$result)
  27. {
  28. $error = 'Błšd odczytu kawałów: ' . mysqli_error($link);
  29. include 'error.html.php';
  30. exit();
  31. }
  32.  
  33. while ($row = mysqli_fetch_array($result))
  34. {
  35. $jokes[] = $row['tekstkoment'];
  36.  
  37. $jokes[] = $row['datakoment'];
  38.  
  39. }
  40.  
  41. include 'komentarze.html.php';
  42.  
  43. include 'dodawanie.php';
  44.  
  45. ?>


komentarze.html.php:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  4. <head>
  5. <title>Lista komentarzy</title>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <link rel="stylesheet" type="text/css" href="mystyle.css" id='ss' />
  8. </head>
  9. <body>
  10. <div id='koment'>
  11. <p>Lista komentarzy:</p>
  12. <?php foreach ($jokes as $joke): ?>
  13. <p><?php echo htmlspecialchars($joke, ENT_QUOTES, 'UTF-8');
  14.  
  15.  
  16. ?></p>
  17.  
  18. <?php endforeach; ?>
  19. </div>
  20. </body>
  21. </html>


Nieszczęsne niedziałające dodawanie: dodawanie.php

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Untitled Document</title>
  5. </head>
  6.  
  7. <?php
  8. $link = mysqli_connect('localhost', 'root', '11111');
  9. if (!$link)
  10. {
  11. $error = 'Nie można się połšczyć z serwerem bazy danych.';
  12. include 'error.html.php';
  13. exit();
  14. }
  15.  
  16. if (!mysqli_set_charset($link, 'utf8'))
  17. {
  18. $output = 'Nie można ustanowić kodowania dla połšczenia z bazš danych.';
  19. include 'output.html.php';
  20. exit();
  21. }
  22.  
  23. if (!mysqli_select_db($link, 'komentarze'))
  24. {
  25. $error = 'Nie znaleziono bazy danych komenty.';
  26. include 'error.html.php';
  27. exit();
  28. }
  29.  
  30. if (isset($_POST['komenty']))
  31. {
  32. echo '<div>Dane z formularza dotarły</div>';
  33. var_dump($_POST); //Wyświetlamy całą zawartość
  34.  
  35. $tekstkoment = $_POST['tekstkoment'];
  36.  
  37. $zapytanie = 'INSERT INTO komenty VALUES ("'.$tekstkoment.'")';
  38. if(!mysql_query($zapytanie))
  39. {
  40. echo '<pre>'.mysql_error().'</pre>'; //Na wypadek błędu
  41. }
  42. }
  43. ?>
  44.  
  45. <form action="?" method="post">
  46. <input type="text" name="tekstkoment" />
  47. <input type="submit" name="dodaj" value="dodaj" />
  48. </form>
  49. </body>
  50. </html>



Proszę o jakąś pomoc w tym temacie, wałkowałem dużo postów w tym temacie, ale po prostu nie kumam jak to ma działać. pozdrawiam
jaslanin
  1. if (isset($_POST['komenty']))


Sprawdzasz czy w POST jest element komenty jednak nigdzie nie widzę byś miał takie pole w formularzu (input'a o takim name)

jak chcesz sprawdzić czy formularz został wysłany można najprościej to zrobić używając:

  1. if ($_POST) { // form sended
  2. // do something
  3. }
i-skrypty.pl
  1. <form action="" method="post">

co "?" tu robi? zostaw puste.
  1. if (isset($_POST['komenty']))

nie 'komenty' tylko 'dodaj'.
sadek86
Ok, zmieniłem, teraz gdy coś wprowadzę w formularzu i kliknę dodaj, to mam taki błąd:

Dane z formularza dotarły
array(2) { ["tekstkoment"]=> string(2) "ja" ["dodaj"]=> string(5) "dodaj" }

Access denied for user 'www-data'@'localhost' (using password: NO)

i-skrypty.pl
przeczytaj ten błąd, a jak nie znasz ang. to google translate.
jaslanin
Jeżeli łączysz się z bazą przez mysqli_connect zapytania musisz wykonywać przez funkcję mysqli_query, a nie mysql_query
sadek86
Ok, poprawiłem na mysqli, teraz mam tylko komunikat, że dane z formularza dotarły, ale w bazie danych nie mam nowego wpisu?

Co do rozumienia błędu, to znam jego tłumaczenie, ale nie rozumiem jak to poprawić. Dla Ciebie to trywialne, a ja się męczę smile.gif

Kurcze, może jednak ktoś ma jakieś rozwiązanie tego problemu. Jeżeli dane z formularza dotarły, to dlaczego nie ma ich w bazie danych??

?

?
i-skrypty.pl
var_dump($_POST) co wyświetla?

pokaż jak teraz wygląda twój kod.
sadek86
Kod:

  1. <?php
  2. $link = mysqli_connect('localhost', 'root', '11111');
  3. if (!$link)
  4. {
  5. $error = 'Nie można się połšczyć z serwerem bazy danych.';
  6. include 'error.html.php';
  7. exit();
  8. }
  9.  
  10. if (!mysqli_set_charset($link, 'utf8'))
  11. {
  12. $output = 'Nie można ustanowić kodowania dla połšczenia z bazš danych.';
  13. include 'output.html.php';
  14. exit();
  15. }
  16.  
  17. if (!mysqli_select_db($link, 'komentarze'))
  18. {
  19. $error = 'Nie znaleziono bazy danych komentarze';
  20. include 'error.html.php';
  21. exit();
  22. }
  23.  
  24. if (isset($_POST['dodaj']))
  25. {
  26. echo '<div>Dane z formularza dotarły</div>';
  27. var_dump($_POST); //Wyświetlamy całą zawartość
  28.  
  29. $tekstkoment = $_POST['tekstkoment'];
  30.  
  31. $zapytanie = 'INSERT INTO komenty SET
  32. tekstkoment="' . $tekstkoment . '",
  33. datakoment=CURDATE()';
  34.  
  35. if ($zapytanie)
  36. echo "dodano poprawnie";
  37. else echo "nie dodano";
  38.  
  39. if(!mysqli_query($zapytanie))
  40. {
  41. echo '<pre>'.mysqli_error().'</pre>'; //Na wypadek błędu
  42. }
  43. }
  44.  
  45. ?>




Po wpisaniu w formularz "nowy komentarz" otrzymuję:

Dane z formularza dotarły
array(2) { ["tekstkoment"]=> string(14) "nowy komentarz" ["dodaj"]=> string(5) "dodaj" } dodano poprawnie
i-skrypty.pl
  1. $zapytanie = 'INSERT INTO `komenty` SET `tekstkoment = '$tekstkoment', `datakoment` = CURDATE()';
sadek86
Teraz chyba coś z apostrofami jest, bo odpala mi się nowe okno bez pola formularza :/
i-skrypty.pl
zmień na te co miałeś i pod zapytaniem daj echo $zapytanie, następnie wklej je do phpmyadmina i sprawdź czy działa.
sadek86
też nie
i-skrypty.pl
no dobra, ale jaki błąd wyskakuje? i pokaż co wklejasz.
sadek86
sorki myślałem o stronce wcześniej, phpmyadmin mi sie nie odpala, ale jest zainstalowany

Ok. odpalilem phpMyAdmin, to co i gdzie mam wkleićquestionmark.gif

Może o to chodzi:

Dla:


Wykonanie zapytania/zapytań SQL do bazy danych komentarze:

$zapytanie = 'INSERT INTO komenty SET
tekstkoment="' . $tekstkoment . '",
datakoment=CURDATE()';
echo $zapytanie;

Zwraca błąd:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$zapytanie = 'INSERT INTO komenty SET tekstkoment=&quot;' . $tekstkoment . '&quot;, data' at line 1
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.