Warunek na minimalną długość tekstu |
Autor |
Wiadomość |
tymek

Pomógł: 1 raz Posty: 433
|
Wysłany: 04-05-2009, 20:36 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
?> |
|
_________________ Szukam programisty PHP, który wykona parę zleceń - modyfikacje na forum. Proszę o kontakt na PW. |
|
|
|
 |
Gadatliwa Kasia
|
|
|
|
Radek


Pomógł: 955 razy Posty: 4614
|
Wysłany: 04-05-2009, 21:03
|
|
|
zamiast Kod: | if(empty($_POST['phrase'])) | daj:
Kod: | if(empty($_POST['phrase']) || strlen($_POST['pharse']) < 3) |
|
|
|
|
 |
webmaestro
Pomógł: 23 razy Posty: 299
|
Wysłany: 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

Pomógł: 1 raz Posty: 433
|
Wysłany: 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):
 |
_________________ Szukam programisty PHP, który wykona parę zleceń - modyfikacje na forum. Proszę o kontakt na PW. |
|
|
|
 |
Seba123

Pomógł: 74 razy Posty: 868
|
Wysłany: 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 |
_________________ Fejs |
|
|
|
 |
Radek


Pomógł: 955 razy Posty: 4614
|
Wysłany: 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

Pomógł: 1 raz Posty: 433
|
Wysłany: 05-05-2009, 22:07
|
|
|
Ktoś zna powod, dla ktorego po zmianie tej linijki w ogole nie wyswietla mi wyników;> |
_________________ Szukam programisty PHP, który wykona parę zleceń - modyfikacje na forum. Proszę o kontakt na PW. |
|
|
|
 |
warna


Pomógł: 475 razy Posty: 2335
|
Wysłany: 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

Pomógł: 1 raz Posty: 433
|
Wysłany: 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? |
_________________ Szukam programisty PHP, który wykona parę zleceń - modyfikacje na forum. Proszę o kontakt na PW. |
|
|
|
 |
warna


Pomógł: 475 razy Posty: 2335
|
Wysłany: 07-05-2009, 20:20
|
|
|
Ja sprawdzam, czy został wysłany formularz oraz czy długość pola ma minimum 3 litery. |
|
|
|
 |
Radek


Pomógł: 955 razy Posty: 4614
|
Wysłany: 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


Pomógł: 475 razy Posty: 2335
|
Wysłany: 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


Pomógł: 955 razy Posty: 4614
|
Wysłany: 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 [..]'. |
|
|
|
 |
Gadatliwa Kasia
|
|
|
|
warna


Pomógł: 475 razy Posty: 2335
|
Wysłany: 08-05-2009, 16:07
|
|
|
Komunikat wywalało mi też na tym początkowym kodzie. Myślałem, że tak ma być. |
|
|
|
 |
|