[PHP, MYSQL] Usuwanie znaków specjalnych z formularza


(Romek Wlizlo) #1

Witam!

Nie mogę sobie poradzić z pewnym problemem. Mianowicie mam na stronie zrobioną wyszukiwarkę, która po podaniu hasła wyszukiwania w formularzu przeszukuje bazę danych mysql i zwraca wyniki w formie tabeli.

Wszystko działa fajnie tylko chciałbym dodać kod usuwający znaki specjalne z pola formularza /nr_pomocnicze/ np. po wprowadzeniu w formularzu numeru 172.22.33 kod miałby usunąć kropki i inne znaki i zwrócić sam numer 1722233 a następnie ten “okrojony” numer ma być przesłany do bazy danych w celu jego wyszukania.

Dodam, że wyszukiwarkę mam napisaną w PHP obiektowo i używam wyszukiwania pełnotekstowego.

Mam już następujący kod, który usuwa znaki z ciągu:

$numer = $_POST['nr_pomocnicze'];

$numer = preg_replace('/[\W_]/', '', $numer);

tylko problem w tym, że nie potrafię go zaimplementować w swojej wyszukiwarce. Poniżej przedstawiam kod wyszukiwarki razem z formularzem:

| Szukaj na podstawie: | Numer części Nazwa części |
| Szukane hasło: | |
|   | |

<?php if (isset($_POST[‘haslo’])) { if ($_POST[‘podstawaszukania’] == “nr_pomocnicze”) { $stmt = @$mysqli->prepare(“SELECT * FROM czesci WHERE MATCH(nr_pomocnicze) AGAINST(?)”); } elseif($_POST[‘podstawaszukania’] == “nazwa”) { $stmt = @$mysqli->prepare(“SELECT * FROM czesci WHERE MATCH(nazwa) AGAINST(?)”); } if ($stmt === false){ echo ’

Zapytanie nie zostało wykonane poprawnie!’; } else { $stmt->bind_param(‘s’, $_POST[‘haslo’]); if(empty($_POST[‘haslo’])) { echo "

Nie podano hasła do wyszukania!"; } else { $stmt->execute(); $stmt->store_result(); if ($stmt->num_rows > 0) { $stmt->bind_result($lp, $zdjecie, $numery, $nazwa, $opis, $grupa, $zastosowanie); echo ’

LP. ZDJĘCIE NUMERY PORÓWNAWCZE NAZWA OPIS
Grupa: %s Zastosowanie: %s
%s %s %s %s %s

';} else { echo "

Nie znaleziono żadnych rekordów."; } } } } ?>

Byłbym bardzo wdzięczny jeśli ktoś pomógłby mi zaimplementować ten kod w wyszukiwarce :slight_smile:

Pozdrawiam i z góry dziękuję!


(Drobok) #2

Daj to zaraz po isset i zamień posty z tym polem na zmienną numer.


(Romek Wlizlo) #3

Zrobiłem tak:

...

if (isset($_POST['haslo'])) {

	 	$numer = $_POST['nr_pomocnicze'];

		$numer = preg_replace('/[\W_]/', '', $numer);

		if ($_POST['podstawaszukania'] == $numer) {

			$stmt = @$mysqli->prepare("SELECT * FROM czesci WHERE MATCH(nr_pomocnicze) AGAINST(?)");

...

Ale nadal nie działa :frowning:

Czy w zapytaniu SQL w miejscu …AGAINST(?) zamiast znaku zapytania nie powinna być też podstawiona zmienna $numer?


(Drobok) #4

Znasz ty chociaż podstawy ? W if porównujesz z stringiem (w oryginale), a później właśnie jego zamieniłeś na zmienną.


(Romek Wlizlo) #5

Problem rozwiązany.

Zrobiłem to w ten sposób:

...

if (isset ($_POST['haslo']))

	 {

		$_POST['haslo'] = preg_replace('/[\W_]/', '', $_POST['haslo']);

		if ($_POST['podstawaszukania'] == "nr_pomocnicze") {

			$stmt = @$mysqli->prepare("SELECT * FROM czesci WHERE MATCH(nr_pomocnicze) AGAINST(?)");

	} elseif($_POST['podstawaszukania'] == "nazwa") {

			$stmt = @$mysqli->prepare("SELECT * FROM czesci WHERE MATCH(nazwa) AGAINST(?)");

	}

...

Teraz działa poprawnie. Usuwa znaki z wyszukiwanego hasła.

Dziękuję za pomoc i pozdrawiam!