Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pagination
Forum PHP.pl > Forum > Przedszkole
Durkane
Witam.
Próbuję zrobić pagination według tutoriala z youtube. Jednak na stronie wyskakuje mi błąd Fatal error: Unsupported operand types.
Ten problem dotyczy tego fragmentu kodu :
  1. $last = ceil($rows/$page_rows);


A tutaj przedstawiam cały kod:
  1. <?php
  2. require_once "connect.php";
  3.  
  4. if ($dbh->connect_errno !=0)
  5. {
  6. echo "Error: ". $dbh->connect_errno;
  7. }
  8. else
  9. {
  10. try
  11. {
  12. //Pierwsze zapytanie do policzenia liczby wierszy
  13. $sth=$dbh->prepare("SELECT COUNT(id) FROM Spis");
  14. $sth->execute();
  15. $row = $sth->fetchAll(PDO::FETCH_ASSOC);
  16. //Tutaj mamy wszystkie
  17. $rows = $row[0];
  18. //To jest liczba rezultatow, ktore chcemy wyswietla na stronie
  19. $page_rows = 10;
  20. //Liczba naszej ostatniej strony
  21. $last = ceil($rows/$page_rows);
  22. //Upewniamy sie,ze $last nie jest mniejszy od 1
  23. if ($last < 1)
  24. {
  25. $last = 1;
  26. }
  27. //Ustawiamy $pagenum jako zmienna
  28. $pagenum = 1;
  29. //Bierzemy pagenum z URL if jezeli jest terazniejsza, else jezeli jest 1
  30. if (isset($_GET['pn']))
  31. {
  32. $pagenum = preg_replace('#[^0-9]#','', $_GET['pn']);
  33. }
  34. //Upewniamy sie,ze numer strony nie jest nizszy niz 1 albo nie jest wiekszy niz $last
  35. if ($pagenum < 1)
  36. {
  37. $pagenum = 1;
  38. }
  39. else if ($pagenum > $last)
  40. {
  41. $pagenum = $last;
  42. }
  43. //Ustalamy zasieg wierszy do wybrania $pagenum
  44. $limit = 'LIMIT ' .($pagenum - 1) * $page_rows.',' .$page_rows;
  45. // Zapytanie biorace jedna strony wierszy
  46. $sql = $dbh->prepare("SELECT ID, Imie, Nazwisko FROM Spis");
  47. $sql->execute();
  48. //Pokazuje uzytkownikowi, na ktorej jest stronie i liczbe stron dostepnych
  49. $textline1 = "Spis ludnosci (<b>$rows</b>)";
  50. $textline2 = "Strona <b>$pagenum</b> of <b>$last</b>";
  51. // Ustawiamy $paginationCtrls jako zmienna
  52. $paginationCtrls = '';
  53. //Jezeli jest wiecej niz 1 strona rezultatow
  54. if ($last != 1)
  55. {
  56. /*Sprawdzamy czy jestesmy na 1 stronie. Jezeli tak to nie potrzebujemy "Poprzednia"
  57.   A jezeli nie jestesmy to generujemy link do pierwszej stroyn i do nastepnej.*/
  58. if ($pagenum > 1)
  59. {
  60. $previous = $pagenum -1;
  61. $paginationCtrls .= '<a href="'.$_SERVER['PHP_SELF'].'?pn='.$previous.'">Poprzednia</a> &nbsp; ';
  62.  
  63. //Generujemy klikalne linki
  64. for($i = $pagenum - 4; $i < $pagenum; $i++)
  65. {
  66. if($i > 0)
  67. {
  68. $paginationCtrls .= '<a href="'.$_SERVER['PHP_SELF'].'?pn='.$i.'">'.$i.'</a> $nbsp; ';
  69.  
  70. }
  71. }
  72. }
  73. //Generujemy liczbę strony, na której jesteśmy bez możliwości przejścia do niej ponownie
  74. $paginationCtrls .= ''.$pagenum.' $nbsp; ';
  75. //Generujemy klikalne numery strony, ktore pojawia sie po prawej
  76. for($i = $pagenum + 1; $i <= $last; $i++)
  77. {
  78. $paginationCtrls .= '<a href="'.$_SERVER['PHP_SELF'].'?pn='.$i.'</a> &nbsp; ';
  79. if($i >= $pagenum + 4)
  80. {
  81. break;
  82. }
  83. //To samo co wyzej tylko sprawdzamy czy jestesmy na ostatniej stronie jak tak to nie generujemy next
  84. if ($pagenum != last)
  85. {
  86. $next = $pagenum + 1;
  87. $paginationCtrls .= ' &nbsp; &nbsp; <a href="'.$_SERVER['PHP_SELF'].'?pn='.$next.'">Następna</a>';
  88. }
  89. }
  90. }
  91. $list = '';
  92. while($row = $sql->fetchAll(PDO::FETCH_ASSOC))
  93. {
  94. $id = $row["ID"];
  95. $firstname = $row["Imie"];
  96. $lastname = $row["Nazwisko"];
  97. }
  98. }
  99. catch (Exception $e)
  100. {
  101. echo "Przepraszamy w tej chwili nie możemy połączyć się z bazą danych. Spróbuj ponownie później.";
  102. }
  103. $dbh=null;
  104. }
  105. ?>
trueblue
FETCH_ASSOC zwraca tablicę asocjacyjną, po drugie wcale nie pobrałeś z $row liczby wierszy - tablica jest inaczej zbudowana.
  1. $sth=$dbh->query("SELECT COUNT(id) FROM Spis");
  2. $rows=$sth->fetchColumn(0);

Durkane
Dobra przechodzi normalnie na stronę tylko nie wyświetla danych z bazy danych oraz nie wyświetla liczby stron :/ Trochę dodałem kodu, więc umieszczam jeszcze raz. Dodałem to wszystko w html, ponieważ nie wyświetla mi polskich znaków :/ W sumie nawet po dodaniu nie wyświetla polskich znaków na całej stronie...

  1. <!DOCTYPE html>
  2. <html lang="pl">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http=equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <meta name="Description" content="Tu wpisz opis zawartości strony" />
  8. <meta name="Keywords" content="Tu wpisz wyrazy kluczowe rozdzielone przecinkami" />
  9. <title>Internetowa Ewidencja Spisu Ludności Miasta Łapy</title>
  10. <link rel="stylesheet" type="text/css" href="css/bootstrap.css">
  11. <link rel="stylesheet" type="text/css" href="css/style.css">
  12.  
  13. <!--[if lt IE 9]>
  14. <scirpt src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
  15. <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
  16. <![endif]-->
  17. </head>
  18. <body>
  19. <?php
  20. require_once "connect.php";
  21.  
  22. if ($dbh->connect_errno !=0)
  23. {
  24. echo "Error: ". $dbh->connect_errno;
  25. }
  26. else
  27. {
  28. try
  29. {
  30. //Pierwsze zapytanie do policzenia liczby wierszy
  31. $sth=$dbh->prepare("SELECT COUNT(ID) FROM Spis");
  32. $sth->execute();
  33. $row = $sth->fetchColumn(0);
  34. //Tutaj mamy wszystkie
  35. $rows = $row[0];
  36. //To jest liczba rezultatow, ktore chcemy wyswietla na stronie
  37. $page_rows = 10;
  38. //Liczba naszej ostatniej strony
  39. $last = ceil($rows/$page_rows);
  40. //Upewniamy sie,ze $last nie jest mniejszy od 1
  41. if ($last < 1)
  42. {
  43. $last = 1;
  44. }
  45. //Ustawiamy $pagenum jako zmienna
  46. $pagenum = 1;
  47. //Bierzemy pagenum z URL if jezeli jest terazniejsza, else jezeli jest 1
  48. if (isset($_GET['pn']))
  49. {
  50. $pagenum = preg_replace('#[^0-9]#','', $_GET['pn']);
  51. }
  52. //Upewniamy sie,ze numer strony nie jest nizszy niz 1 albo nie jest wiekszy niz $last
  53. if ($pagenum < 1)
  54. {
  55. $pagenum = 1;
  56. }
  57. else if ($pagenum > $last)
  58. {
  59. $pagenum = $last;
  60. }
  61. //Ustalamy zasieg wierszy do wybrania $pagenum
  62. $limit = 'LIMIT ' .($pagenum - 1) * $page_rows.',' .$page_rows;
  63. // Zapytanie biorace jedna strone wierszy
  64. $sql = $dbh->prepare("SELECT ID, Imie, Nazwisko FROM Spis");
  65. $sql->execute();
  66. //Pokazuje uzytkownikowi, na ktorej jest stronie i liczbe stron dostepnych
  67. $textline1 = "Spis ludnosci (<b>$rows</b>)";
  68. $textline2 = "Strona <b>$pagenum</b> of <b>$last</b>";
  69. // Ustawiamy $paginationCtrls jako zmienna
  70. $paginationCtrls = '';
  71. //Jezeli jest wiecej niz 1 strona rezultatow
  72. if ($last != 1)
  73. {
  74. /*Sprawdzamy czy jestesmy na 1 stronie. Jezeli tak to nie potrzebujemy "Poprzednia"
  75.   A jezeli nie jestesmy to generujemy link do pierwszej stroyn i do nastepnej.*/
  76. if ($pagenum > 1)
  77. {
  78. $previous = $pagenum -1;
  79. $paginationCtrls .= '<a href="'.$_SERVER['PHP_SELF'].'?pn='.$previous.'">Poprzednia</a>   ';
  80.  
  81. //Generujemy klikalne linki
  82. for($i = $pagenum - 4; $i < $pagenum; $i++)
  83. {
  84. if($i > 0)
  85. {
  86. $paginationCtrls .= '<a href="'.$_SERVER['PHP_SELF'].'?pn='.$i.'">'.$i.'</a> $nbsp; ';
  87.  
  88. }
  89. }
  90. }
  91. //Generujemy liczbę strony, na której jesteśmy bez możliwości przejścia do niej ponownie
  92. $paginationCtrls .= ''.$pagenum.' $nbsp; ';
  93. //Generujemy klikalne numery strony, ktore pojawia sie po prawej
  94. for($i = $pagenum + 1; $i <= $last; $i++)
  95. {
  96. $paginationCtrls .= '<a href="'.$_SERVER['PHP_SELF'].'?pn='.$i.'</a>   ';
  97. if($i >= $pagenum + 4)
  98. {
  99. break;
  100. }
  101. //To samo co wyzej tylko sprawdzamy czy jestesmy na ostatniej stronie jak tak to nie generujemy next
  102. if ($pagenum != last)
  103. {
  104. $next = $pagenum + 1;
  105. $paginationCtrls .= '     <a href="'.$_SERVER['PHP_SELF'].'?pn='.$next.'">Następna</a>';
  106. }
  107. }
  108. }
  109. $list = '';
  110. while($row = $sql->fetchAll(PDO::FETCH_ASSOC))
  111. {
  112. $id = $row["ID"];
  113. $firstname = $row["Imie"];
  114. $lastname = $row["Nazwisko"];
  115. $list .= '<p><a href="dane.php?id='.$id.'">'.$firstname.' '.$lastname.' </a> - Kliknij, aby zobaczyć pełne dane.</p>';
  116. }
  117. }
  118. catch (Exception $e)
  119. {
  120. echo "Przepraszamy w tej chwili nie możemy połączyć się z bazą danych. Spróbuj ponownie później.";
  121. }
  122. $dbh=null;
  123. }
  124. ?>
  125. </body>
  126. </html>
trueblue
Zobacz jeszcze raz kod jaki Ci podałem i porównaj z tym co masz obecnie.
Durkane
O matko najmocniej przepraszam tongue.gif Sądziłem, że wszystkie zmieniłem. Wszystko działa pięknie tylko zamiast imienia i nazwiska wyświetla mi np. K K. A chciałbym żeby wyświetlało całe imię i nazwisko.

Takie błędy mam na stronie jak otwieram.
  1. Notice: Undefined property: PDO::$connect_errno in /virtual/spisludnosci.cba.pl/Pagination.php on line 23
  2.  
  3. Warning: Illegal string offset 'ID' in /virtual/spisludnosci.cba.pl/Pagination.php on line 113
  4.  
  5. Warning: Illegal string offset 'Imie' in /virtual/spisludnosci.cba.pl/Pagination.php on line 114
  6.  
  7. Warning: Illegal string offset 'Nazwisko' in /virtual/spisludnosci.cba.pl/Pagination.php on line 115


Rozumiem, że w PDO raczej nie używa się connect_errno ? I czytam o tym Illegal string offset,ale nie wiem jak to zmienić :/ Próbowałem fetchAll(PDO::FETCH_COLUMN, 0), ale to nie działa. Robiłem też fetchColumn() bez podawania numeru, ale wtedy daje mi 1 1 itd.
nospor
Nie $sql->fetchAll
a $sql->fetch

Mozesz uzyc $sql->fetchAll ale nie w polaczeniu z WHILE bezposrednio. Patrz troche do manuala co robia dane funkcje
Durkane
Właśnie mam włączony manual i tam nigdzie nie zauważyłem tego, że nie używa się z while smile.gif
Ale wielkie dzięki ! smile.gif Będę pamiętał, że fetchAll nie używać z while tongue.gif Pewnie z foreach racja?

A to connect_errno mogę zostawić? Nie jest to błędne? Jeszcze mam sprawę. Otóż mam np 3 strony, ale na każdej wyświetla 10 tych samych rekordów. Macie może jakiś dobry aktualny poradnik z pagination ? Ponieważ ten co znalazłem fajnie omówiony jest z 2013 roku.

EDIT: Co do tego wyświetlania rekordów to już naprawiłem smile.gif
lukaskolista
Wywal, w komunikacie błędu masz jasno powiedziane, że taka właściwość nie istnieje. Zamiast tego użyj przechwytywania wyjątków tak, jak to jest pokazane w manualu: Errors and error handling.
Durkane
Witam ponownie. Nie chce zakładać nowego tematu dla jednego pytania dlatego też zadam je tutaj. Mianowicie chodzi o to, że do BLOB wrzucam plik pdf w bazie danych i chciałbym żeby pobierało ten plik i wyświetlało jego nazwę, na którą można kliknąć i albo go pobiera albo otwiera nowe okno z nim. Czy mógłby ktoś podrzucić jakiś link, w którym mógłbym poczytać i na podstawie tego napisać kod. Jeżeli dam po prostu wyświetlanie tak jak daje dla imienia i nazwiska to wyświetla mi milion znaków zamiast tego co znajduje się w tym właśnie pdfie : /
trueblue
Przy okazji masz nakierowanie jak przechowywać pliki: http://forum.php.pl/index.php?showtopic=247712
Durkane
Jeżeli dobrze rozumiem to dać takie coś :
  1. header('Content-Type: application/pdf');
  2. header('Content-Disposition: attachment; filename="downloaded.pdf"');
  3. readfile('original.pdf');

tylko zamiast original.pdf to dać to co wyciągnąłem z bazy danych tak?
trueblue
Zamiast readfile.
Durkane
Witam ponownie. Aby nie zaśmiecać kolejnym tematem to mam sprawę związaną z wyszukiwarką osób. Oczywiście daje takie coś :

  1. <?php
  2. require_once "connect.php";
  3. $search=$_POST['search'];
  4. try
  5. {
  6. $sth=$dbh->prepare("SELECT ID,Imie,Nazwisko FROM Spis WHERE Imie LIKE '%$search%' AND Nazwisko LIKE '%$search%'");
  7. $sth->execute();
  8. $result = $sth->fetchAll(PDO::FETCH_ASSOC);
  9.  
  10. if(Count($result)>0)
  11. {
  12. foreach($result as $row)
  13. {
  14. $id = $row["ID"];
  15. $firstname = $row["Imie"];
  16. $lastname = $row["Nazwisko"];
  17. echo '<div id="list">
  18. <ul id="tabelka">
  19. <li class="column">
  20. <ul>
  21. <p><a href="dane.php?id='.$id.'">'.$firstname.' '.$lastname.' </a> - Kliknij, aby zobaczyć pełne dane.</p>
  22. </ul>
  23. </li>
  24. </ul>
  25. </div>';
  26. }
  27. }
  28. }
  29. catch (Exception $e)
  30. {
  31. echo 'Connection failed: ' . $e->getMessage();
  32. }
  33. $dbh=null;
  34. ?>


I po wpisaniu np . Adam Tracikowski nic się nie dzieje, wyświetla pustą stronę. Natomiast jeżeli skasuje to AND Nazwisko LIKE '%$search%' i zostawię tylko imię i wpisuje Adam to wszystko ładnie wyszukuje. Nie mam zielonego pojęcia co może być nie tak z tym. Szukam od wczoraj wieczora rozwiązania, próbuje różnych sposobów na pisanie tego. Próbowałem też z contact_ws, ale to też nie działa.
viking
Dlaczego nie bindujesz danych POST tylko zezwalasz na SQL Injection? Może po prostu nie ma takich danych w bazie?
trueblue
Myślisz, że:
  1. WHERE Imie LIKE '%Jan Kowalski%' AND Nazwisko LIKE '%Jan Kowalski%'

ma sens?
Durkane
No właśnie nad tym myślałem, że to bez sensu, ale nie wiem jak z 1 pola formularze przesyłać oddzielnie imię i nazwisko.
trueblue
Nie wiesz jak podzielić string?
http://php.net/manual/en/function.explode.php

A jak już podzielisz, to dojdziesz do kolejnego problemu.
Durkane
No niestety od początku mojej nauki nie było mi to potrzebne tongue.gif Dlatego też nie wiem o tym smile.gif Jestem na bardzo podstawowym poziomie z PHP smile.gif Więc bardzo dziękuje za waszą pomoc i cierpliwość smile.gif

Bardzo ślicznie dziękuje ! biggrin.gif Już działa bardzo ładnie tak jak chciałem smile.gif
trueblue
Wpisz w wyszukiwarkę: Tracikowski Adam
Durkane
Ah... po samym nazwisku albo jak nazwisko pierwsze nie znajduje tongue.gif No nic coś pokombinuje na razie sam smile.gif

Przeskanowałem sporo tematów, sam próbowałem różnych zapisów tego co mam i niestety nic nie dało takiego efektu żeby nawet po nazwisku szukało :/
Można prosić o małą podpowiedź ?

Mógłby ktoś podpowiedzieć coś ? Bardzo proszę smile.gif
trueblue
Imię i nazwisko zawierają przynajmniej jedną z fraz:
  1. WHERE (Imie LIKE '%string1%' AND Nazwisko LIKE '%string2%') OR (Imie LIKE '%string2%' AND Nazwisko LIKE '%string1%')


lub:
Imię lub nazwisko zawiera przynajmniej jedną z fraz:
  1. WHERE Imie LIKE '%string1%' OR Nazwisko LIKE '%string2%' OR Imie LIKE '%string2%' OR Nazwisko LIKE '%string1%'
Durkane
Ah kurde robiłem tak tylko zamiast OR dałem AND tongue.gif Zaraz sprawdzę to tak jak napisałeś smile.gif

Hm ten sposób niestety nie działa :/

  1. <?php
  2. require_once "connect.php";
  3. $search = $_POST['search'];
  4. $szukana = explode(" ",$search);
  5. try
  6. {
  7. $sth=$dbh->prepare("SELECT ID,Imie,Nazwisko FROM Spis WHERE (Imie LIKE '%$szukana[0]%' AND Nazwisko LIKE '%$szukana[1]%') OR (Imie LIKE '%szukana[1]%' AND Nazwisko LIKE '%szukana[0]%') ");
  8. $sth->execute();
  9. $result = $sth->fetchAll(PDO::FETCH_ASSOC);
  10.  
  11. if(Count($result)>0)
  12. {
  13. foreach($result as $row)
  14. {
  15. $id = $row["ID"];
  16. $firstname = $row["Imie"];
  17. $lastname = $row["Nazwisko"];
  18. echo '<div id="list">
  19. <ul id="tabelka">
  20. <li class="column">
  21. <ul>
  22. <p><a href="dane.php?id='.$id.'">'.$firstname.' '.$lastname.' </a> - Kliknij, aby zobaczyć pełne dane.</p>
  23. </ul>
  24. </li>
  25. </ul>
  26. </div>';
  27. }
  28. }
  29. else
  30. {
  31. echo 'Wpisane dane są niepoprawne.';
  32. }
  33. }
  34. catch (Exception $e)
  35. {
  36. echo 'Connection failed: ' . $e->getMessage();
  37. }
  38. $dbh=null;
  39. ?>


Bo chce też, że po wpisaniu np: Adam Tracikowski czy Tracikowski Adam wyświetli mi tylko jego. Po wpisaniu Tracikowski wyświetli mi wszystkich Tracikowskich tak samo z imieniem po wpisaniu Adam żeby wyświetlało Adam. Jeżeli dam Imie OR Nazwisko to wyświetla mi po wpisaniu nazwiska całą bazę danych :/

Przy AND problemem jest to,że nie znajduje jak damy samo imię czy nazwisko.
trueblue
Przede wszystkim masz błąd w budowie zapytania. $szukana, nie szukana.
Durkane
Ah tak nie zauważyłem tego smile.gif Dobra działa teraz dobrze dziękuje ślicznie ! tongue.gif
trueblue
A jeśli ktoś wpisze trzy wyrazy?
Durkane
Jeżeli wpiszę 3 wyraz na końcu to wyszuka normalnie,a jeżeli na początku to mamy komunikat, że błędne dane zostały podane smile.gif

Mam jeden problem, który mnie nurtuje bardzo :/
Otóż jest to wysyłanie emaila z podaniem peselu, jeżeli ustawię textarea dla peselu to kod zabezpieczający działa prawidłowo natomiast jeżeli dam pole number to czy wpiszę czy nie kod zabezpieczający to wysyła i tak email :/

Kod formularza :
  1. <form action="email.php" method="post" id="contactform">
  2. <b>Imie i Nazwisko</b><input type="text" name="contact_name" placeholder="Imię i nazwisko" required="required" tabindex="1" />
  3. <b>Email</b><input type="email" name="contact_email" placeholder="Adres e-mail" required="required" tabindex="2" />
  4. <b>Pesel</b><input type="number" name="contact_body" placeholder="Wpisz tutaj swój Pesel" required="required" tabindex="3" maxlength="11" minlength="11"></textarea>
  5. Podaj wynik: <span class="form_check_1"></span> × <span class="form_check_2"></span> = <input type="text" name="contact_check" maxlength="2" tabindex="4" />
  6. <input class="btn btn-danger" type="submit" value="Wyślij" tabindex="5" />
  7. <input type="hidden" name="contact_check_data" value="" />
  8. </form>


I kod email :
  1. <?php
  2.  
  3. require_once 'class.phpmailer.php';
  4. $_POST = array_map('trim', $_POST);
  5.  
  6. $error = false;
  7.  
  8. if (!isset($_POST['contact_name']) || empty($_POST['contact_name'])) {
  9. $error = true;
  10. }
  11.  
  12. if (!isset($_POST['contact_email']) || empty($_POST['contact_email']) || !PHPMailer::ValidateAddress($_POST['contact_email'])) {
  13. $error = true;
  14. }
  15.  
  16. if (!isset($_POST['contact_body']) || empty($_POST['contact_body'])) {
  17. $error = true;
  18. }
  19. if (!isset($_POST['contact_check']) || empty($_POST['contact_check']) || (int) $_POST['contact_check'] !== ((int) $_POST['contact_check_data'][0] * (int) $_POST['contact_check_data'][1])) {
  20. $error = true;
  21. }
  22. if ((int)$_POST['contact_body'])
  23. {
  24. $error = false;
  25. }
  26. if ($error) {
  27. exit('nok');
  28. }
  29.  
  30. $mail = new PHPMailer();
  31.  
  32. $mail->CharSet = 'UTF-8';
  33.  
  34. $mail->SetFrom($_POST['contact_email'], $_POST['contact_name']);
  35. $mail->AddAddress('tutaj email');
  36. $mail->Subject = 'Prośba o kod rejestracyjny';
  37. $mail->Body = 'Pesel: '.$_POST['contact_body'];
  38.  
  39. if (!$mail->Send()) {
  40. exit('nok');
  41. }
  42.  
  43. exit('ok');


A jeszcze bym zapomniał tutaj kod JS jest smile.gif
  1. $(function() {
  2. var check_1 = (Math.floor(Math.random() * 9) + 1).toString(),
  3. check_2 = (Math.floor(Math.random() * 9) + 1).toString(),
  4. check = check_1 + check_2;
  5.  
  6. $('#contactform span.form_check_1').text(check_1);
  7. $('#contactform span.form_check_2').text(check_2);
  8. $('#contactform input[name="contact_check_data"]').val(check);
  9.  
  10. var sending = false;
  11. $('#contactform').on('submit', function(e) {
  12. var $form = $(this), $submit = $('input[type="submit"]', $form);
  13.  
  14. e.preventDefault();
  15.  
  16. if (sending) {
  17. return false;
  18. }
  19.  
  20. $('.form-error', $form).remove();
  21.  
  22. $('input, number', $form).prop('readonly', true);
  23. $submit.val('Wysyłam?');
  24. sending = true;
  25.  
  26. $.post($form.attr('action'), $form.serialize(), function(data) {
  27. if (data === 'ok') {
  28. $form.slideUp('fast', function() {
  29. $form.after('<div class="form-success">Wiadomość została wysłana! Skontaktujemy się z Tobą jak tylko to będzie możliwe.</div>');
  30. });
  31.  
  32. return true;
  33. }
  34.  
  35. $form.prepend('<div class="form-error">Wystąpił błąd podczas wysyłania formularza. Upewnij się, że wypełniłeś wszystkie pola i poprawnie rozwiązałeś działanie.</div>');
  36. $('input, number', $form).prop('readonly', false);
  37. $submit.val('Wyślij wiadomość');
  38. sending = false;
  39.  
  40. return false;
  41. }, 'text');
  42. });
  43. });
trueblue
W Twoim kodzie nie ma nawiązania do capcthy. Co to za captcha?

Swoją drogą nie ma tagu "number".
Durkane
Tzn to jest tak jakby captcha biggrin.gif Po prostu pobiera js liczby losowe i trzeba podać wynik mnożenia tych dwóch liczb. Hm... w html 5 przecież mamy input type="number" snitch.gif Chyba,że nie o to Tobie chodzi tongue.gif
viking
I w jquery pobieramy go przez input[type="number"] nie samo number.
Durkane
Ogólnie w js, query itd jestem noga nic z tego nie umiem smile.gif Kod jest ogólnie z tutorialu, w którym pokazane zostało jak zrobić taki prosty kod zabezpieczający przed spamem.
Zmieniłem na input[type="number"] i nic to niestety nie dało. Nie wiem dlaczego, ale jeżeli z textarea zmienie na inne pole tak jak tutaj number to ten kod zabezpieczający jest po prostu pomijany...
lukaskolista
Twoja captcha to nie captcha. Klient w łatwy sposób może wygenerować rozwiązanie, bo posiada wszystkie potrzebne dane do tego. Nawet sam sobie może te dane podstawić smile.gif
Durkane
No wiem,że nie captcha i chyba po prostu na nią zmienię. W sumie źle to porównałem tongue.gif To jest po prostu zwykłe słabe zabezpieczenie smile.gif
lukaskolista
Wywal tą "captche", bo na razie masz większe problemy z bezpieczeństwem, którymi musisz się zająć.
Durkane
Jakie jeśli mógłbym wiedzieć?biggrin.gif
kapslokk
Zmienne prosto z $_POST w zapytaniu ?
Durkane
Ah w sumie racja. W innych plikach to zmieniałem, a o tym nawet nie pomyślałem smile.gif Dziękuje za zwrócenie na to uwagi tongue.gif
lukaskolista
Zrób oddzielne pola do wyszukiwania imienia i nazwiska.
viking
Warto też zapoznać się z tabelką https://www.w3.org/TR/css3-selectors/#selectors Przyda ci się na pewno w wielu rzeczach.
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.