HTML/PHP/AJAX/JS - Warunek na minimalną długość tekstu
tymek - 04-05-2009, 20:36 Temat postu: Warunek na minimalną długość tekstu Witam!
Mam małe pytanko, jak w tej wyszukiwarce (i gdzie) wstawic warunek, zeby wyszukiwana fraza musiała się składać co najmniej z 3 znaków??
Kod: | <form action="search.php" method="post">
Wpisz wyszukiwany produkt: <input type="text" name="phrase" />
<input type="submit" value="Szukaj!" />
</form>
<?php
// program wyszukiwarki - search.php
// wyświetlenie nagłówka
echo'<h2>Wyniki wyszukiwania</h2>';
// usunięcie niepotrzebnych białych znaków
$_POST['phrase']=trim($_POST['phrase']);
// sprawdzenie, czy użytkownik wpisał dane
if(empty($_POST['phrase']))
// jeśli nie, to wyświetl komunikat i zakończ działanie skryptu
die('Formularz wypełniony niepoprawnie! Nie można wyświetlić wyników wyszukiwania!');
// jeśli jednak dane są wpisane poprawnie
else
{
// połączenie z bazą danych, NIE ZAPOMINJ USTAWIĆ WŁASNYCH DANYCH!
$base=mysqli_connect('localhost','tymek','123','forum');
// skonstruowanie zapytania
// zwróć uwagę na operator Like - to on jest sercem całej aplikacji. Pozwala wyszukać dany ciąg w bazie danych
// jak zapewne zauważyłeś, przed frazą i po niej umieszczam znaki procenta %
// ten znak symbolizuje dowolny inny ciąg znaków, więc jest niezbędny do skutecznego wyszukiwania
// połaczenie operatorem Or pozwala na wyszukiwanie danego ciągu zarówno w nazwie, jak i opisie produktu
// UWAGA! Tutaj też nie zapomnij ustawić swoich danych!
$query="Select postac_name, serial From phpbb_postacie Where postac_name Like '%{$_POST['phrase']}%' Or serial Like '%{$_POST['phrase']}%'";
// wysłanie zapytania do bazy danych
$result=mysqli_query($base,$query);
// ustalenie ilości wyszukanych obiektów
$obAmount=mysqli_num_rows($result);
// wyswietlenie ilości wyszukanych obiektów
echo'Znaleziono: '.$obAmount.'<br /><br />';
// wyświetlenie wyników w pętli
for($x=0;$x<$obAmount;$x++)
{
// przekształcenie danych na tablicę
$row=mysqli_fetch_assoc($result);
// wyświetlenie numeru identyfikacyjnego
echo $x+1;
echo '. ';
// wyświetlenie nazwy produktu
echo '<b><font color="red">'. $row['postac_name'] .'</b></font>'.' '. $row['serial'];
echo'<br />';
}
}
// zamknięcie połączenia
mysqli_close($base);
// koniec aplikacji
?> |
Radek - 04-05-2009, 21:03
zamiast Kod: | if(empty($_POST['phrase'])) | daj:
Kod: | if(empty($_POST['phrase']) || strlen($_POST['pharse']) < 3) |
webmaestro - 04-05-2009, 21:08
Kod: | <form action="search.php" method="post">
Wpisz wyszukiwany produkt: <input type="text" name="phrase" />
<input type="submit" value="Szukaj!" />
</form>
<?php
echo'<h2>Wyniki wyszukiwania</h2>';
$kod = mysql_real_escape_string(htmlspecialchars($_POST['phrase']));
if(empty($_POST['phrase']))
die('Formularz wypełniony niepoprawnie! Nie można wyświetlić wyników wyszukiwania!');
else
{
if (strlen($kod) < 3)
{
echo "ciąg znaków musi mieć minimum 6 znaków";
}
else
{
$base=mysqli_connect('localhost','tymek','123','forum');
$query="Select postac_name, serial From phpbb_postacie Where postac_name Like '%{$_POST['phrase']}%' Or serial Like '%{$_POST['phrase']}%'";
$result=mysqli_query($base,$query);
$obAmount=mysqli_num_rows($result);
echo'Znaleziono: '.$obAmount.'<br /><br />';
for($x=0;$x<$obAmount;$x++)
{
$row=mysqli_fetch_assoc($result);
echo $x+1;
echo '. ';
echo '<b><font color="red">'. $row['postac_name'] .'</b></font>'.' '. $row['serial'];
echo'<br />';
}
}
}
mysqli_close($base);
?> |
tymek - 04-05-2009, 21:10
zamieniłem linijkę, ale teraz obojętnie co wpiszę, czy wyraz mniejszy niz 3 znaki, czy większy, to po naciśnięciu szukaj, nic się nei wyświetla ;> (żadnych wyników)
///edit:
Odnośnie kodu podanego przez webmaestro, jest to samo o czym pisałem wyzej, ale dodatkowo strona wygląda tak (ma błędy):
Seba123 - 04-05-2009, 23:06
RuseK napisał/a: | zamiast Kod: | if(empty($_POST['phrase'])) | daj:
Kod: | if(empty($_POST['phrase']) || strlen($_POST['pharse']) < 3) |
| W sumie to można dać samo strlen
Radek - 04-05-2009, 23:10
Seba123, nie można, bo strlen zwraca 0 tylko jeżeli string jest pusty. Jak ktoś da dwa znaki, strlen zwróci 2, warunek przejdzie, a chodzi o to, żeby przeszedł tylko wtedy, gdy tekst ma więcej niż 3 znaki.
tymek - 05-05-2009, 22:07
Ktoś zna powod, dla ktorego po zmianie tej linijki w ogole nie wyswietla mi wyników;>
warna - 05-05-2009, 22:28
Ja bym zrobił tak:
Kod: | <input type="submit" name="submit" value="Szukaj!" /> |
oraz
Kod: | if( !isset($_POST['submit']) && strlen($_POST['phrase']) < 3 ) |
tymek - 07-05-2009, 19:11
Już wiem na czym polegał błąd
RuseK napisał/a: | zamiast Kod: | if(empty($_POST['phrase'])) | daj:
Kod: | if(empty($_POST['phrase']) || strlen($_POST['pharse']) < 3) |
|
phrase i pharse P
Odnosnie tego, co podałwarna, to jaka jest różnica między tym, a tym co podał Rusek?
warna - 07-05-2009, 20:20
Ja sprawdzam, czy został wysłany formularz oraz czy długość pola ma minimum 3 litery.
Radek - 08-05-2009, 14:53
tymek napisał/a: | phrase i pharse P |
a widzisz, literówka.
Cytat: | Odnosnie tego, co podałwarna, to jaka jest różnica między tym, a tym co podał Rusek? |
Praktycznie żadna, mój sprawdza czy istnieje wartość z kluczem 'phrase' w tablicy $_POST. Jeżeli formularz nie jest wysłany, to wartość nie istnieje.
Warna sprawdza po prostu inny element tablicy $_POST, na jedno wychodzi
BTW warna napisał/a: | if( !isset($_POST['submit']) && strlen($_POST['phrase']) < 3 ) |
Pewny jestes ze !isset() a nie isset() ?
warna - 08-05-2009, 15:09
RuseK napisał/a: | mój sprawdza czy istnieje wartość z kluczem 'phrase' w tablicy $_POST |
Misiu, Twój sposób sprawdza, czy zmienna jest pusta, a nie czy istnieje
RuseK napisał/a: | Pewny jestes ze !isset() a nie isset() ? |
Si. Jeśli nie jest ustawiona zmienna, to wyświetl komunikat o błędzie. Pisałem pod ten kod, co podał tymek. Osobiście zrobiłbym wyświetlanie komunikatów o błędzie w 'else', gdy warunek się nie spełni.
Radek - 08-05-2009, 16:02
warna napisał/a: | Misiu, Twój sposób sprawdza, czy zmienna jest pusta, a nie czy istnieje |
To nie zmienna Misiu
Faktycznie, myślałem że też dałem isset.
Cytat: | Si. Jeśli nie jest ustawiona zmienna, to wyświetl komunikat o błędzie. Pisałem pod ten kod, co podał tymek. Osobiście zrobiłbym wyświetlanie komunikatów o błędzie w 'else', gdy warunek się nie spełni. |
Kod: | if( !isset($_POST['submit']) && strlen($_POST['phrase']) < 3 ) |
Jezeli nie istnieje submit i phrase jest krotsze niz 3 znaki.
Jezeli nie wysle formularza to submit nie istnieje, a ze pharse nie istnieje to oba warunki sie spelnia. W zwiazku z tym PRZED wyslaniem formularza mamy komunikat 'Niepoprawnie wypelniony [..]'.
warna - 08-05-2009, 16:07
Komunikat wywalało mi też na tym początkowym kodzie. Myślałem, że tak ma być.
|
|
|