To jest tylko wersja do druku, aby zobaczyć pełną wersję tematu, kliknij TUTAJ
phpBB2 by Przemo
Support forów phpBB2 modified by Przemo

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>'.'&nbsp;'. $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>'.'&nbsp;'. $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;> :D
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 :D

RuseK napisał/a:
zamiast
Kod:
if(empty($_POST['phrase']))
daj:
Kod:
if(empty($_POST['phrase']) || strlen($_POST['pharse']) < 3)


phrase i pharse :P 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 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 :D

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 :P

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 :P

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ć.


Powered by phpBB modified by Przemo © 2003 phpBB Group