Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Wykorzystanie POST i GET jednocześnie
Forum PHP.pl > Forum > Przedszkole
d0m1n1k_
Witam,

aby nakreślić sytuację.
Przy pomocy GET generowany jest adres strony (np. newsy.php?id=12).
Chciałbym dodać możliwość publikacji komentarzy przez przeglądających.

Napisałem prosty skrypt ale nie działa poprawnie.
  1. <?php
  2. if (isset($_POST['contentus']));
  3.  
  4. $addcomment_conte = $_POST['contentus'];
  5. $addcomment_quest = "INSERT INTO news_comments SET id_info = '$przechwyt_id', id_user = '$mojeid', comment_data = NOW(), comments_description = '$addcomment_conte'";
  6. if (@mysql_query($addcomment_quest)){
  7. echo 'Dodano komentarz';
  8. } else {
  9. echo '<p>Bład dodania' . mysql_error() . '</p>';
  10. }
  11. ?>
  12.  
  13. <form method="post" class="form-horizontal" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  14. <div class="comment-form">
  15. <h4>Dodaj komentarz</h4>
  16. <div class="form-group">
  17. <div class="col-md-12">
  18. <textarea class="form-control" rows="4" placeholder="Twoja wiadomość" name="contentus"></textarea>
  19. </div>
  20. </div>
  21. <button type="submit" class="btn btn-primary btn-flat">Dodaj komentarz</button>
  22. </div>
  23. </form>


Po kliknięciu dodaj komentarz wywala mi już nie stronę news.php?id=12 tylko samo news.php
Prócz tego - do bazy danych dodaje mi kilka rekordów (id_info i id_user do jednego, comment_data i comments_description do drugiego wiersza MySQL'owej tablicy)
Bardzo dziękuję za każdą pomoc.
Crozin
Jako argument ACTION elementu FORM powinieneś po prostu podać odpowiedni adres, tj. news.php?id=12.
adrianpl20
zamiast $_SERVER['PHP_SELF'] daj $_SERVER['REQUEST_URI']
d0m1n1k_
Rzeczywiście - działa =D
Bardzo dziękuję za pomoc, ale zadam jeszcze dwa pytania:

1. Dlaczego po odświeżeniu dodaje kolejny wpis? Czy dane POST są przechowywane przez dłuższy czas?
2. Czemu dodaje mi kilka rekordów do tabeli naraz? Jeden pusty, jeden prawie poprawny i ostatni czasem pusty czasem częściowo wypełniony.
Crozin
1. http://en.wikipedia.org/wiki/Post/Redirect/Get
2. Ponieważ nie formatujesz kodu i sam nie widzisz co napisałeś. Twój kod przy poprawnym sformatowaniu kodu:
  1. <?php
  2.  
  3. if (isset($_POST['contentus']));
  4.  
  5. $addcomment_conte = $_POST['contentus'];
  6. $addcomment_quest = "INSERT INTO news_comments SET id_info = '$przechwyt_id', id_user = '$mojeid', comment_data = NOW(), comments_description = '$addcomment_conte'";
  7.  
  8. if (@mysql_query($addcomment_quest)) {
  9. echo 'Dodano komentarz';
  10. } else {
  11. echo '<p>Bład dodania' . mysql_error() . '</p>';
  12. }
  13.  
  14. ?>
Natomiast kod, który chciałeś mieć wyglądałby tak:
  1. <?php
  2.  
  3. if (isset($_POST['contentus'])) {
  4. $addcomment_conte = $_POST['contentus'];
  5. $addcomment_quest = "INSERT INTO news_comments SET id_info = '$przechwyt_id', id_user = '$mojeid', comment_data = NOW(), comments_description = '$addcomment_conte'";
  6.  
  7. if (@mysql_query($addcomment_quest)) {
  8. echo 'Dodano komentarz';
  9. } else {
  10. echo '<p>Bład dodania' . mysql_error() . '</p>';
  11. }
  12. }
  13.  
  14. ?>
Różnica jest chyba oczywista.

PS. Twój kod jest tragicznej jakości, poczytaj sobie chociażby o SQL Injection oraz o bibliotece PDO, z której powinieneś korzystać do komunikacji z bazą danych - https://www.google.pl/webhp?sourceid=chrome...on&safe=off
binary101
i jeszcze warto dodać, że dobrą praktyką jest robienie redirect po POST, żeby przy odświeżeniu strony wynikowej przeglądarka nie pytała o ponowne przesłanie formularza, czyli flow:
1. POST
2. zapis danych
3. redirect na stronę wynikową
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.