Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Rozwiązany] Problem ze zmienną przy przeładowaniu strony - captcha przy formularzu
ats2008
post 16.05.2013, 11:00:17
Post #1





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 11.06.2009
Skąd: Lublin

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


Witajcie.

Postanowiłem wyrzeźbić prymitywną "captchę" przy formularzu kontaktowym, przy użyciu takiego kodu:

  1. //losowanie obrazka do captcha
  2. $kod = mt_rand(1,9);
  3.  
  4. for ($i = 0; $i<4; $i++)
  5. {
  6. $kod .= ' '.mt_rand(0,9);
  7. }
  8.  
  9. $contact_cat = str_replace(" ", "", $kod); //usuwanie spacji.


pole input:
  1. <div id="wpisz">Przepisz numer z obrazka:</div>
  2. <input id="obrazek" class="contact" type="text" name="obrazek" />
  3. <div id="span_captcha">'.$kod.'</div>


oraz warunku:
  1. if ($_POST['obrazek'] == $contact_cat ) {wyślij wiadomość}


(ma to tą zaletę, że obrazek ma spacje, a skrypt akceptuje liczby bez spacji, co trochę może utrudnić zycie robotom, hehe).

Problem polega na tym, że żeby wysłać formularz skrypt przeładowuje w tym czasie zmienną $contact_cat i wyświetlony jest błąd.

Konkretnie:

Pierwotnie wyświetlają się liczby np. 12345 w obrazku, wpisuję 12345 do input "obrazek" . Po naciśnięciu "wyślij"
$kat = 46785 a $_post['obrazek'] = 12345.

Stąd pojawia się błąd.

Poszukuję sposob, żeby zatrzymać wartość 12345 niezależnie od przeładowania. Wtedy będę w domu.

(mógłbym to zrobić na js, ale chcę tego uniknąć).

Znacie jakąś podpowiedź lub rozwiązanie?

z góry dzięki

Ten post edytował ats2008 16.05.2013, 14:28:28
Go to the top of the page
+Quote Post
nospor
post 16.05.2013, 11:01:52
Post #2





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




sesja waćpanie.


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

"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
ats2008
post 16.05.2013, 11:14:22
Post #3





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 11.06.2009
Skąd: Lublin

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


Waćmość,

próbowałem coś takiego:
  1. $_SESSION['contact'] = $contact_cat;


Wynik jest przewidywalny... bo $contact_cat zmienia się...

Go to the top of the page
+Quote Post
nospor
post 16.05.2013, 11:17:43
Post #4





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




Waćpan, pomyśl trochę....

Kod do sesji masz zapisywać tylko i wyłącznie w momencie generowania formularza. Gdy ślesz forma do sprawdzenia, to już do sesji masz nic nie zapisywać. Wówczas z sesji masz odczytać i porównać z tym co ci w formie wpisali.


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

"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
ats2008
post 16.05.2013, 11:35:22
Post #5





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 11.06.2009
Skąd: Lublin

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


no wiem, wiem.

Głowię się jak zapisać w sesji zmienną $contact_cat, żeby nie przeładowywała się.... przy wysyłaniu a z kolei była za każdym wyświetleniem formularza inna.

Wiem, że jestem noobem w php, lepiej mi wychodzi css smile.gif
Go to the top of the page
+Quote Post
nospor
post 16.05.2013, 11:40:15
Post #6





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




Naprawdę nie jesteś w stanie określić czy jesteś na etapie sprawdzania formularza czy na etapie jego generowania?


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

"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
ats2008
post 16.05.2013, 11:57:57
Post #7





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 11.06.2009
Skąd: Lublin

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


No powiem Ci szczerze, że mam problem.

Kod całego skryptu formularza jest trochę problematyczny (używam go, bo jest łatwo edytowalny, ale zaczęły roboty się aktywizować...):

Formularz jest generowany ze zmiennej $forma;

  1. <div id="formularz">
  2.  
  3. <?php
  4. //losowanie obrazka do captcha
  5. $kod = mt_rand(1,9);
  6.  
  7. for ($i = 0; $i<4; $i++)
  8. {
  9. $kod .= ' '.mt_rand(0,9);
  10. }
  11.  
  12. $contact_cat = str_replace(" ", "", $kod); //usuwanie spacji.
  13.  
  14.  
  15.  
  16. $forma = '
  17. <form method="post" action="" name="kontakt" id="contactform">
  18.  
  19. <div class="contact_email">
  20. <div id="contact_left">
  21. <input class="contact" type="text" name="name" value="Imię i nazwisko *" onfocus="if(this.value==this.defaultValue){this.value=\'\';}"/>
  22.  
  23. <input class="contact" type="text" name="phone" value="Twój numer telefonu *" maxlength="100" onfocus="if(this.value==this.defaultValue){this.value=\'\';}"/>
  24.  
  25. <input class="contact" type="text" name="email" value="Twój adres e-mail *" onfocus="if(this.value==this.defaultValue){this.value=\'\';}"/><br />
  26.  
  27. </div>
  28. <div id="contact_right">
  29. <textarea class="contact" name="text" value="" onfocus="if(this.value==this.defaultValue){this.value=\'\';}">Wiadomość...</textarea>
  30.  
  31. <div style="margin:4px 0;">
  32. <div id="wpisz">Przepisz numer z obrazka:</div>
  33. <input id="obrazek" class="contact" type="text" name="obrazek" />
  34. <div id="span_captcha">'.$kod.'</div>
  35.  
  36. <div class="clear"></div>
  37. </div>
  38.  
  39. <div id="restet_submit">
  40. <input class="reset" type="reset" value="Wyczyść">
  41. <button class="button" type="submit">Wyślij</button>
  42. <div class="clear"></div>
  43. </div>
  44. </div>
  45. </div>
  46. </form>
  47. ';
  48.  
  49. if (($_SERVER['REQUEST_METHOD'] == 'POST')) {
  50.  
  51. if (!$_POST['name'] || !$_POST['phone'] || !$_POST['email'])
  52. {
  53. print '<div style="padding-top:15px; color:#878787; font-weight:bold;" >Uzupełnij wymagane pola:<br /><div style="color:#878787; font-weight:bold;"> ';
  54. if ( !$_POST['name']) print '- imię i nazwisko <br />';
  55. if ( !$_POST['email']) print '- adres e-mail <br />';
  56. if ( !$_POST['phone']) print '- telefon kontaktowy <br /></div></div>';
  57.  
  58. print $forma;
  59.  
  60. }
  61.  
  62. $message = '<html>
  63. <head>
  64. <title>Wiadomość z www.123.pl</title>
  65. </head>
  66. <body>
  67. <p><b>Imię i nazwisko</b>: '.$_POST['name'].',</p>
  68. <p><b>telefon kontaktowy</b>: '.$_POST['phone'].',</p>
  69. <p><b>Adres e-mail</b>: '.$_POST['email'].',</p>
  70. <p><b>Treść wiadomości</b>: '.$_POST['text'].'.</p>
  71. </body>
  72. </html>'; //end of message
  73. $subject = "Wiadomość z formularza kontaktowego";
  74. $to = 'biuro@123.pl';
  75. $headers = 'MIME-Version: 1.0' . "\r\n";
  76. $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  77.  
  78. // Dodatkowe nagłówki
  79. $headers .= 'To: www.123.pl <biuro@123.pl>' . "\r\n";
  80. $headers .= 'From: info@123.pl' . "\r\n";
  81. $headers .= 'Cc: '.$_POST['email'] . "\r\n";
  82. $headers .= 'Bcc: '.$_POST['email'] . "\r\n";
  83.  
  84.  
  85.  
  86. if ($_POST['name'] && $_POST['phone'] && $_POST['email'])
  87. {
  88.  
  89. if ($_POST['obrazek'] == $contact_cat )
  90. {mail($to, $subject, $message, $headers);
  91.  
  92. echo '<p class="message_confirmation">';
  93. echo '<br />Dziękujemy za wysłanie do nas pytania o treści:<br/><br />';
  94. echo '<b>Imię i nazwisko</b>: '.$_POST['name'].', <br />';
  95. echo '<b>Telefon kontaktowy</b>: '.$_POST['phone'].',<br />
  96. <b>Adres e-mail</b>: '.$_POST['email'].',<br />
  97. <b>Wiadomość</b>: '.$_POST['text'].'.<br />';
  98.  
  99. echo '<br/>Odpowiemy w najbliższym czasie.<br /> <br /> <a href="kontakt.html">Powrót</a>';
  100. echo '</p>';
  101. }
  102. else
  103. {print '<span style="color:#ff0000;"><b>Uwaga!</b></span> Kod odbrazka jest nieprawidłowy, spróbuj ponownie <br /> <br /> <a href="kontakt.html">Powrót</a>';}
  104. }
  105. }else{
  106. print $forma;
  107. }
  108. ?>
  109. </div>


Mam problem z tą sesją.

Po przerobieniu będzie cacy kod do formularza...
Go to the top of the page
+Quote Post
nospor
post 16.05.2013, 12:04:55
Post #8





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




Nie:
if ($_POST['obrazek'] == $contact_cat )
a:
if ($_POST['obrazek'] == $_SESSION['kod'] )

Oraz wszedzie tam gdzie masz
print $forma;
zamien na
print $forma;
$_SESSION['kod'] = $contact_cat;


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

"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
ats2008
post 16.05.2013, 12:19:58
Post #9





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 11.06.2009
Skąd: Lublin

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


Kolego jesteś wielki - browar leci smile.gif.

Dla każdego kto szuka formularza z prymitywnym captcha kod działający wygląda tak:

  1. <div id="formularz">
  2.  
  3. <?php
  4. //losowanie obrazka do captcha
  5. $kod = mt_rand(1,9);
  6.  
  7. for ($i = 0; $i<4; $i++)
  8. {
  9. $kod .= ' '.mt_rand(0,9);
  10. }
  11.  
  12. $contact_cat = str_replace(" ", "", $kod); //usuwanie spacji.
  13.  
  14.  
  15.  
  16. $forma = '
  17. <form method="post" action="" name="kontakt" id="contactform">
  18.  
  19. <div class="contact_email">
  20. <div id="contact_left">
  21. <input class="contact" type="text" name="name" value="Imię i nazwisko *" onfocus="if(this.value==this.defaultValue){this.value=\'\';}"/>
  22.  
  23. <input class="contact" type="text" name="phone" value="Twój numer telefonu *" maxlength="100" onfocus="if(this.value==this.defaultValue){this.value=\'\';}"/>
  24.  
  25. <input class="contact" type="text" name="email" value="Twój adres e-mail *" onfocus="if(this.value==this.defaultValue){this.value=\'\';}"/><br />
  26.  
  27. </div>
  28. <div id="contact_right">
  29. <textarea class="contact" name="text" value="" onfocus="if(this.value==this.defaultValue){this.value=\'\';}">Wiadomość...</textarea>
  30.  
  31. <div style="margin:4px 0;">
  32. <div id="wpisz">Przepisz numer z obrazka:</div>
  33. <input id="obrazek" class="contact" type="text" name="obrazek" />
  34. <div id="span_captcha">'.$kod.'</div>
  35.  
  36. <div class="clear"></div>
  37. </div>
  38.  
  39. <div id="restet_submit">
  40. <input class="reset" type="reset" value="Wyczyść">
  41. <button class="button" type="submit">Wyślij</button>
  42. <div class="clear"></div>
  43. </div>
  44. </div>
  45. </div>
  46. </form>
  47. ';
  48.  
  49. if (($_SERVER['REQUEST_METHOD'] == 'POST')) {
  50.  
  51. if (!$_POST['name'] || !$_POST['phone'] || !$_POST['email'])
  52. {
  53. print '<div style="padding-top:15px; color:#878787; font-weight:bold;" >Uzupełnij wymagane pola:<br /><div style="color:#878787; font-weight:bold;"> ';
  54. if ( !$_POST['name']) print '- imię i nazwisko <br />';
  55. if ( !$_POST['email']) print '- adres e-mail <br />';
  56. if ( !$_POST['phone']) print '- telefon kontaktowy <br /></div></div>';
  57.  
  58. print $forma;
  59. $_SESSION['kod'] = $contact_cat;
  60. }
  61.  
  62. $message = '<html>
  63. <head>
  64. <title>Wiadomość z www.123.pl</title>
  65. </head>
  66. <body>
  67. <p><b>Imię i nazwisko</b>: '.$_POST['name'].',</p>
  68. <p><b>telefon kontaktowy</b>: '.$_POST['phone'].',</p>
  69. <p><b>Adres e-mail</b>: '.$_POST['email'].',</p>
  70. <p><b>Treść wiadomości</b>: '.$_POST['text'].'.</p>
  71. </body>
  72. </html>'; //end of message
  73. $subject = "Wiadomość z formularza kontaktowego";
  74. $to = 'biuro@123.pl';
  75. $headers = 'MIME-Version: 1.0' . "\r\n";
  76. $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  77.  
  78. // Dodatkowe nagłówki
  79. $headers .= 'To: www.123.pl <biuro@123.pl>' . "\r\n";
  80. $headers .= 'From: info@123.pl' . "\r\n";
  81. $headers .= 'Cc: '.$_POST['email'] . "\r\n";
  82. $headers .= 'Bcc: '.$_POST['email'] . "\r\n";
  83.  
  84.  
  85.  
  86. if ($_POST['name'] && $_POST['phone'] && $_POST['email'])
  87. {
  88.  
  89. if ($_POST['obrazek'] == $_SESSION['kod'] )
  90. {mail($to, $subject, $message, $headers);
  91.  
  92. echo '<p class="message_confirmation">';
  93. echo '<br />Dziękujemy za wysłanie do nas pytania o treści:<br/><br />';
  94. echo '<b>Imię i nazwisko</b>: '.$_POST['name'].', <br />';
  95. echo '<b>Telefon kontaktowy</b>: '.$_POST['phone'].',<br />
  96. <b>Adres e-mail</b>: '.$_POST['email'].',<br />
  97. <b>Wiadomość</b>: '.$_POST['text'].'.<br />';
  98.  
  99. echo '<br/>Odpowiemy w najbliższym czasie.<br /> <br /> <a href="kontakt.html">Powrót</a>';
  100. echo '</p>';
  101. }
  102. else
  103. {print '<span style="color:#ff0000;"><b>Uwaga!</b></span> Kod odbrazka jest nieprawidłowy, spróbuj ponownie <br /> <br /> <a href="kontakt.html">Powrót</a>';}
  104. }
  105. }else{
  106. print $forma;
  107. $_SESSION['kod'] = $contact_cat;
  108. }
  109. ?>
  110. </div>


a i dorzucę gotowca css (wystarczy zmienić kolory)
  1. /* contactform*/
  2. div#formularz {width:500px; margin:0 auto;}
  3. form#contactform {width:inherit; margin:0; padding:0; display:block;}
  4. form#contactform input, form#contactform textarea { width:486px; padding:6px; display:block; margin:6px 0 6px 0; border:1px solid #996b4d; color:#534942;}
  5. form#contactform textarea.contact {width:486px; margin: 0; color:#433a38 ; height:207px;}
  6. div#restet_submit {margin:6px 0 0 0; width:500px;}
  7. div#wpisz {width:50%; float:left; padding-top:9px;}
  8. input#obrazek {width:100px !important; display:block; float:right; margin-left:16px; }
  9.  
  10. div#span_captcha {width:100px; float:right; color:#fff; font-size: 16px; font-weight:bold; text-align:center; border:1px solid #fff; position:relative; left:-16px; top:6px; padding:5px 0; background:#996b4d;}
  11.  
  12. div#restet_submit input.reset, div#restet_submit button.button {float:left; border:none; width:76px; height:25px; color:#fdfcfb; font-size:11px; font-weight:bold; text-align:center; background:#996b4d;}
  13. div#restet_submit input.reset {margin:0;}
  14. div#restet_submit input.reset:hover, div#restet_submit button.button:hover {color:#e5ceb7;}
  15. div#restet_submit button.button { float:right; }


Zamykam wątek.

Ten post edytował ats2008 16.05.2013, 12:20:35
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: 14.08.2025 - 02:12