Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Isset nie reaguje tak jakby
Forum PHP.pl > Forum > Przedszkole
Glukozamina
Witam. Stworzyłem sobie takiego małego mojego shoutboxa i się zastanawiam dlaczego po kliknieciu dodaj nadal sie wykonuje... tzn. dodaje nowe wpisy mimo iż ma polecenie aby tego nie robił gdy pole tresc jest puste. 2. Jak zrobić, żeby podczas odswieżania nie dodawał sie za każdym razem ten wpis ? 3. Jak zrobić ,że gdy klikne na np. pole nick to nazwa tego pola(napis nick) mi zniknie automatycznie z formularza ?

  1. <form method="GET" action="index.php">
  2. <input type="text" name="nick" value="nick" size="20">
  3. <input type="text" name="tresc" size="40">
  4. <input type="submit" value="Dodaj">
  5. </form>
  6.  
  7.  
  8. <?php
  9.  
  10. function dodawanie($id, $nick, $tresc, $time, $ip){
  11.  
  12. /*sprawdzenie poprawości przekazanych danych*/
  13.  
  14.  
  15. if($tresc == ''){
  16. echo("Brak danych. Proszę wypełnić pole: Treść.");
  17. return;
  18. }
  19.  
  20. }
  21. if($id == '') $id = 'NULL';
  22.  
  23. $time=(date("H:i:s"));
  24. $ip=($_SERVER['REMOTE_ADDR']);
  25. $nick=($_GET['nick']);
  26. $tresc=($_GET['tresc']);
  27.  
  28.  
  29.  
  30. /*Nawiązanie połączenia z bazą*/
  31.  
  32. if (!$db_lnk = @mysql_connect("x", "x", ":)")){
  33. echo('Wystąpił błąd podczas próby połączenia z serwerem MySQL...<BR>');
  34. return;
  35. }
  36.  
  37. if(!@mysql_select_db('x')){
  38. echo('Wystąpił błąd podczas wyboru bazy danych: biblioteka<BR>');
  39. return;
  40. }
  41.  
  42. /*Utworzenie i wykonanie zapytania*/
  43.  
  44. $query = "INSERT INTO shoutbox VALUES(";
  45. $query .= "'$id', '$nick', '$tresc', '$time', '$ip'";
  46. $query .= ")";
  47.  
  48.  
  49.  
  50. if(!mysql_query($query, $db_lnk)){
  51. echo 'Wystąpił błąd: zapytanie zostało odrzucone...<br />Zapytanie: <pre>' . $query . '</pre>Odpowiedź MySQL: <pre>' . mysql_error( $db_lnk ) . '</pre>';
  52. return;
  53. }
  54.  
  55.  
  56.  
  57. /*Pobranie informacji o liczbie wstawionych wierszy*/
  58.  
  59. $rowsNo = mysql_affected_rows($db_lnk);
  60.  
  61. echo("Dziękuje za pozostawioną wiadomość . <br>");
  62. echo("Liczba dodanych rekordów: $rowsNo<br>");
  63.  
  64.  
  65. /*Zamknięcie połączenia z bazą*/
  66.  
  67. if(!@mysql_close()){
  68. echo('Wystąpił błąd podczas zamykania połączenia z serwerem MySQL...<br>');
  69. }
  70.  
  71. if(isSet($_GET['tresc'])){ /*<--------------------------- tutaj. to jest dorbze ?*/
  72. dodawanie($_GET['$id'], $_GET['$nick'], $_GET['tresc'], $_GET['$time'], $_GET['$ip']);
  73. }
  74. else{
  75. echo("Niepoprawne dane! Wypełnij wszystkie pola.");
  76. }
  77.  
  78.  
  79. ?>
H4eX
1. Zapoznaj się z IsSet.
2. Dodać warunek sprawdzania czy jest już taki wpis.
thek
ad1) isset sprawdza istnienie zmiennej, nawet pustej! Tak więc w linii 73 nie isset($_GET['tresc']), ale !empty($_GET['tresc']) lub $_GET['tresc'] != ''
ad2) sprawdź, czy kilka ostatnich wpisów usera nie zawiera już tego zwrotu.
ad3) zdarzenie ustawienia aktywności dla określonego pola to focus, utrata aktywności to blur. Połącz te informacje, użyj JS i ciesz się.
Glukozamina
  1. if (!empty($_GET['tresc'])){
  2. dodawanie($_GET['$id'], $_GET['$nick'], $_GET['tresc'], $_GET['$time'], $_GET['$ip']);
  3. }
  4. else{
  5. echo("Niepoprawne dane!");
  6. }


Aktualnie wygląda to własnie tak. Jednak efekt jest dalej ten sam... tzn. wpis sie dodaje mimo iż pole tresc jest puste
H4eX
Wyprintuj get -> tresc i zobacz czy, aby na pewno jest pusty, bo warunek jest jak najbardziej poprawny.
Glukozamina
Z printowałem to i wyświetla sie to co wpisze jak zostawie bez niczego to nic się nie pokazuje.
kapuch
Nie patrzylem w kod z racji poznej godz. ale moim zdaniem ani warunek !empty, ani isset nie pomoze, gdy odswiezamy strone, dlatego ze w adresie te zmienne nadal sa ustawione.
Mam trzy rozwiazania:
1. Ustawiasz ciasteczko podczas dodawania wpisu, ktore zablokuje na jakis czas danego uzytkownika
2. Sprawdzasz czy dany wpis juz nie istnieje, tzn czy nie jest dokladnie taki sam, jak wczesniejsze (zle rozwiazanie, bo bedzie blokowac krotkie wpisy typu "ok", "tak", ktore moze dodac kilka uzytkownikow).
3. Moim zdaniem najlepsze rozwiazanie, to po dodaniu wpisu albo przekierowujesz klienta do $_SERVER['http_referer'] (chociaz ta zmienna jest 'wadliwa', wiec mozna ja "podrobic" sesjami), albo na strone glowna - wtedy w linku nie bedzie ustawionych zmiennych winksmiley.jpg
BTW. Uzywaj do tego POSTa a nie GETa.
stefik4
Możesz jeszcze linijke:

  1. <form method="GET" action="index.php">

zastąpić na:

  1. <form method="post" action="index.php">


linijke:
  1. <input type="submit" value="Dodaj">


na
  1. <input type="submit" value="Dodaj" name="dodaj">


a warunek zrobić taki:
  1. if(isset($_POST['dodaj']))
Glukozamina
  1. <form method="post" action="index.php">
  2. <input type="text" name="nick" value="nick" size="20">
  3. <input type="text" name="tresc" size="40">
  4. <input type="submit" value="Dodaj" name="dodaj">
  5. </form>
  6.  
  7. <?php
  8.  
  9. function dodawanie($id, $nick, $tresc, $time, $ip){
  10.  
  11. /*sprawdzenie poprawości przekazanych danych*/
  12.  
  13. if($tresc == ''){
  14. echo("Brak danych. Proszę wypełnić pole: Treść.");
  15. return;
  16. }
  17.  
  18. }
  19.  
  20.  
  21.  
  22. if($id == '') $id = 'NULL';
  23. $time = (date("H:i:s"));
  24. $ip = ($_SERVER['REMOTE_ADDR']);
  25. $nick=($_POST['nick']);
  26. $tresc=($_POST['tresc']);
  27. /*Nawiązanie połączenia z bazą*/
  28.  
  29. /*xxx*/
  30.  
  31. /*Utworzenie i wykonanie zapytania*/
  32.  
  33. $query = "INSERT INTO shoutbox VALUES(";
  34. $query .= "'$id', '$nick', '$tresc', '$time', '$ip'";
  35. $query .= ")";
  36.  
  37.  
  38.  
  39. if(!mysql_query($query, $db_lnk)){
  40. echo 'Wystąpił błąd: zapytanie zostało odrzucone...<br />Zapytanie: <pre>' . $query . '</pre>Odpowiedź MySQL: <pre>' . mysql_error( $db_lnk ) . '</pre>';
  41. return;
  42. }
  43.  
  44.  
  45.  
  46. /*xxx*/
  47.  
  48. if(isSet($_POST['dodaj'])){ /*<--------------------------- tutaj. to jest dorbze ?*/
  49. dodawanie($_POST['$id'], $_POST['nick'], $_POST['tresc'], $_POST['$time'], $_POST['$ip']);
  50. }
  51.  
  52.  
  53. ?>


Aktualnie jest tak... Dalej jest to samo smile.gif bez tresci nick sie dodaje. Nie wiem zabardzo do czego to ma być if(isset($_POST['dodaj'])).

xxx - > mniej ważne rzeczy (polaczenie mysql i rozlaczenie z baza)
stefik4
Yyyyy nawias } of funkcji kończy sie juz w 18 linijce a powinien sie konczyc w 44 tak mi się wydaje
Glukozamina
Tym nawiasem też się próbowalem bawić jednak nic dobrego z tego nie wychodziło. Raz nic się nie dodawało raz jakiś błąd teraz jak dałem tam gdzie poleciłes to wyskoczyło :
Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource in /var/www/sites/yoyo.pl/b/s//shoutbox.php on line 59
stefik4
W tym kodzie dwa posty wyżej nigdzie nie widze funkcji mysql_affected_rows(), więc ci nie powiem co jest źle.

Spróboj tak:

  1. <?php
  2.  
  3. function dodawanie($id, $nick, $tresc, $time, $ip){
  4.  
  5. /*sprawdzenie poprawości przekazanych danych*/
  6.  
  7. if($tresc == ''){
  8. return("Brak danych. Proszę wypełnić pole: Treść.");
  9. }
  10.  
  11.  
  12.  
  13. if($id == '') $id = 'NULL';
  14. $time = (date("H:i:s"));
  15. $ip = ($_SERVER['REMOTE_ADDR']);
  16. $nick=($_POST['nick']);
  17. $tresc=($_POST['tresc']);
  18. /*Nawiązanie połączenia z bazą*/
  19.  
  20. /*xxx*/
  21.  
  22. /*Utworzenie i wykonanie zapytania*/
  23.  
  24. $query = "INSERT INTO shoutbox VALUES('$id', '$nick', '$tresc', '$time', '$ip')";
  25.  
  26.  
  27.  
  28. if(!mysql_query($query, $db_lnk)){
  29. echo 'Wystąpił błąd: zapytanie zostało odrzucone...<br />Zapytanie: <pre>' . $query . '</pre>Odpowiedź MySQL: <pre>' . mysql_error( $db_lnk ) . '</pre>';
  30.  
  31. }
  32. }
  33.  
  34.  
  35. /*xxx*/
  36.  
  37. if(isSet($_POST['dodaj'])){ /*<--------------------------- tutaj. to jest dorbze ?*/
  38. dodawanie($_POST['$id'], $_POST['nick'], $_POST['tresc'], $_POST['$time'], $_POST['$ip']);
  39. }
  40.  
  41.  
  42. ?>
  43. <form method="post" action="index.php">
  44. <input type="text" name="nick" value="nick" size="20">
  45. <input type="text" name="tresc" size="40">
  46. <input type="submit" value="Dodaj" name="dodaj">
  47. </form>
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.