Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Odświażanie - Ponowne dodanie informacji do bazy danych
Forum PHP.pl > Forum > Przedszkole
darney
Witam. Napisałem krótki programik do dodawania komentarzy. Wszystko dodaje się znakomicie. Mam problem dość popularny i nie potrafię zastosować do niego rozwiązań.

Chciałbym, aby po odświeżeniu strony nie ukazywał się komunikat "Aby wyświetlić tę stronę, Firefox musi ponownie przesłać dane, które spowodują powtórzenie zadań wykonanych wcześniej (takich jak przeszukiwanie czy potwierdzenie zlecenia)."

Interesuję mnie sposób na zablokowanie możliwości dodania tych samych danych do bazy poprzez odświeżanie.
Interesująco rozwiązują ten problem z komunikatem i ponownym wysłaniem danych portale takie jak NK przy dodawaniu komentarzy do zdjęć.

Jaką funkcje najlepiej zastosować i w którym miejscu muszę ją zadeklarować?. Proszę o poradę


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  7.  
  8. <label for="imie">Imię:</label>
  9. <input type="text" id="imie" name="imie" /><br />
  10. <label for="temat">Temat: </label>
  11. <input type="text" id="temat" name="temat" /><br />
  12. <label for="tresc">Tresc: </label>
  13. <input type="text" id="tresc" name="tresc" /><br />
  14. <input type="submit" name="submit" value="Wyślij" />
  15. </form>
  16.  
  17.  
  18. <?php
  19. $dbc = mysqli_connect('localhost', 'root', '', 'bazor')
  20. or die('Brak połączenia z serwerem MySQL.');
  21. mysqli_set_charset($dbc, "utf8");
  22.  
  23. // dane klienta (tylko po przesłaniu formularza).
  24. if (isset($_POST['submit']) ) {
  25. $imie = $_POST['imie'];
  26. $temat = $_POST['temat'];
  27. $tresc = $_POST['tresc'];
  28.  
  29. $query = "INSERT INTO bazor (imie, temat, tresc, time) VALUES ('$imie', '$temat', '$tresc', now())";
  30. mysqli_query($dbc, $query)
  31. or die('Błąd w zapytaniu do bazy danych.');
  32.  
  33. echo 'Dodano dane klienta.';
  34.  
  35. mysqli_close($dbc);
  36. }
  37.  
  38.  
  39. ?>
  40.  
  41. <?PHP
  42. include('show.php');
  43. ?>


Zawartość include show.php

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <link href="show.css" rel="stylesheet" type="text/css" />
  7.  
  8.  
  9. <?php
  10. $dbc = mysqli_connect('localhost', 'root', '', 'bazor')
  11. or die('Brak połączenia z serwerem MySQL.');
  12. mysqli_set_charset($dbc, "utf8");
  13.  
  14. $query = "SELECT * FROM bazor ORDER BY time DESC " ;
  15.  
  16. $result = mysqli_query($dbc, $query);
  17.  
  18.  
  19. while ($row = mysqli_fetch_array($result)) {
  20.  
  21. $imie = $row['imie'] ;
  22. $temat = $row['temat'];
  23. $tresc = $row['tresc'];
  24. ?><div class="tabelka">
  25. <?php
  26. echo $imie;
  27.  
  28. ?>
  29. <br><br>
  30. <?php
  31.  
  32. echo $temat;
  33.  
  34. ?>
  35. <br><br>
  36. <?php
  37.  
  38.  
  39. echo $tresc;
  40. ?> </div>
  41. <br><br>
  42. <?php
  43. }
  44.  
  45. mysqli_close($dbc);
  46. ?>
gothye
Komunikat dodaj w sesji usera ,a potem header do kąd chcesz i wyświetlenie komunikatu z sesji ..
nospor
Przypięty temat
http://forum.php.pl/index.php?showtopic=44...t=0&start=0
darney
Rozwiązałem problem odświeżania dodając przed rozłączeniem z bazą header("Location: nazwa_tej_samej_strony.php");

Chciałbym mieć teraz komunikat "dane zostały dodane pomyślnie" a po odświeżeniu strony taka informacja znikała by a program nie wykonywał żadnych skryptów jak do tej pory.

W jaki sposób byście to rozwiązali ?
nospor
zamiast header location uzyj header refresh. Wówczas komunikat się wyswietli a strona przekieruje się po np. 5 sekundach. Przyklad masz w manualu przy komentarzach do header.

Mozesz tez uzyc header jak do tej pory oraz zapamietac komunikat do wyswietlenia w sesji. Po przekierowaniu pobrac z sesji komunikat i go wyswietlic
darney
header refresh ciekawa sprawa i funkcjonuje na skrypcie komentarzy.

Dlaczego w skrypcie do wysyłania emaili ukazuje się komunikat błędu ?

Warning: Cannot modify header information - headers already sent by (output started at /home/leczncal/public_html/ks/ac_mail.php:10) in /home/leczncal/public_html/ks/ac_mail.php on line 133
You'll be redirected in about 3 secs. If not, click here. (tutaj nic się nie dzieje)

  1. <?php
  2. if (isset($_POST['submit']) ) {
  3. $name = $_POST['firstname'] . ' ' . $_POST['lastname'];
  4. $last_name = $_POST['lastname'];
  5. $email = $_POST['email'];
  6. $other = $_POST['other'];
  7.  
  8. $to = 'mail@gmail.com';
  9. $subject = 'zgłoszenie';
  10. $msg = "$name: \n" .
  11.  
  12. "Inne komentarze: $other";
  13. mail($to, $subject, $msg, 'From:' . $email);
  14.  
  15. header( "refresh:5;url=index10.php" );
  16. echo 'You\'ll be redirected in about 3 secs. If not, click <a href="index10.php">here</a>.';
  17.  
  18.  
  19. }
  20.  
  21.  
  22. ?>
nospor
Problem omawiany milion razy. Uzyj wyszukiwarki
darney
Zastosowałem się do tej opcji i niestety nie mogę sobie z tym poradzić. Proszę o pomoc

  1. <?php
  2. if (isset($_POST['submit']) ) {
  3. $name = $_POST['firstname'] . ' ' . $_POST['lastname'];
  4. $last_name = $_POST['lastname'];
  5. $email = $_POST['email'];
  6. $other = $_POST['other'];
  7.  
  8.  
  9. $to = 'mail@gmail.com';
  10. $subject = 'zgłoszenie';
  11. $msg = "$name: \n" .
  12.  
  13. "Inne komentarze: $other";
  14. mail($to, $subject, $msg, 'From:' . $email);
  15. $tekst = 'You\'ll be redirected in about 3 secs. If not, click <a href="index10.php">here</a>.';
  16.  
  17.  
  18. header( "refresh:5;url=index10.php" );
  19.  
  20.  
  21. }
  22.  
  23.  
  24.  
  25. ?>
nospor
ob_start ma byc na samym początku wszystkiego. Przeciez wyraźnie jest to opisane milion razy. smile.gif
darney
Probowalem wszedzie go dawac i za przeproszeniem dupa.

  1. <?php
  2.  
  3. if (isset($_POST['submit']) ) {
  4. $name = $_POST['firstname'] . ' ' . $_POST['lastname'];
  5. $last_name = $_POST['lastname'];
  6. $email = $_POST['email'];
  7. $other = $_POST['other'];
  8.  
  9. $to = 'mail@gmail.com';
  10. $subject = 'zgłoszenie';
  11. $msg = "$name: \n" .
  12.  
  13. "Inne komentarze: $other";
  14. mail($to, $subject, $msg, 'From:' . $email);
  15. $tekst = 'You\'ll be redirected in about 3 secs. If not, click <a href="index10.php">here</a>.';
  16.  
  17.  
  18.  
  19. header( "refresh:5;url=index10.php" );
  20.  
  21.  
  22. }
  23.  
  24.  
  25.  
  26. ?>


Probowalem tez tak.

  1. <?php
  2.  
  3. if (isset($_POST['submit']) ) {
  4. $name = $_POST['firstname'] . ' ' . $_POST['lastname'];
  5. $last_name = $_POST['lastname'];
  6. $email = $_POST['email'];
  7. $other = $_POST['other'];
  8.  
  9. $to = 'dariuszniemczak@gmail.com';
  10. $subject = 'kSenior - zgłoszenie';
  11. $msg = "$name: \n" .
  12.  
  13. "Inne komentarze: $other";
  14. mail($to, $subject, $msg, 'From:' . $email);
  15. $tekst = 'You\'ll be redirected in about 3 secs. If not, click <a href="index10.php">here</a>.';
  16.  
  17. echo $tekst;
  18. header( "refresh:5;url=index10.php" );
  19.  
  20.  
  21.  
  22. }
  23.  
  24.  
  25. ?>
  26.  
  27.  


I dalej moge powiedziec tylko powyższe slowo.
nospor
No ale nie masz przypadkiem jakiejś spacji/entera na samym początku? Albo BOM spowodowanego zapisem pliku w UTF?
darney
co to znaczy spacje entera na samym początku czyli gdzie ? w skrypcie PHP czy w HTML ?. Strone koduje w UTF-8 całą i w bazie mam UTF8 GENERAL CI. Staram się kodować według standardów portali bo tam jest UTF-8 Chyba że się myle
nospor
No i mówie. Utf8 wiąze sie z BOM. Włacz wyszukiwarke bo też jest o tym mowa. Moze twoj edytor dopisuje BOM. Masz ustawic by nie dopisywal
darney
Już rozwiązałem problem

Musiałem na samym początku całego dokumentu HTML wstawic
<?php
ob_start();
?>

I na samym końcu całego dokumentu za sekcja BODY zakończyć ob_end_flush();

Troszeczkę wasz poradnik mnie zmylił ale i tak Dziękuje za pomoc. Męczę się z tym dalej próbując na różne sposoby pokazywać komunikat. smile.gif

Nie do końca jeszcze rozumiem działanie sesji

Czy aby komunikat pokazał się a po odświeżeniu strony F5 skrypt nie wykonywał żadnego zadania a komunikat znikał w trakcie odświeżania to potrzebna jest sesja ?. Nie ma innego rozwiązania z headerami jakoś wprowadzić skrypt w wariacje która pozwoli zaspokoić moje potrzeby : ) ?
nospor
Cytat
Musiałem na samym początku całego dokumentu HTML wstawic

Cytat
Troszeczkę wasz poradnik mnie zmylił

A co ja napisałem?
Cytat
ob_start ma byc na samym początku wszystkiego
darney
na początku wszystkiego to pojęcie dość względne smile.gif na początku wszystkiego może być sam skrypt PHP smile.gif na początku wszystkiego co zaczyna dany program od momentu <?php

gdybyś napisał na początku dokumentu przed sekcją <!DOCTYPE lub <head to załapał bym odrazu. Można także posługiwać się przykładami

  1. <?php
  2. ?>
  3. <html>
  4. <head>
  5. // meta-dane, tytuł itp.
  6. </head>
  7. <body>
  8. // treść strony
  9. </body>
  10. </html>
  11. <?php
  12. ?>


to już w ogule rozwiązało by to mój problem, przecież to przedszkole, ale i tak dziękuje za pomoc

Oczywiście jest to pewien sukces tyle że chciał bym aby komunikat pozostał do czasu odświeżenia strony tak jak założyłem we wstępie. W momencie odświeżenia znikał bez ładowania ponownie skryptu. Czy jest możliwość dokonania tego bez udziału sesji ?
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.