Strona 1 z 1

[SOLVED][php, MySQL] Skrypt wyszukujący łańcuch znaków

: 04 sie 2009, 19:42
autor: witek23
Witam,

Napisałem skrypt wyszukujący ciąg znaków problem w tym, że mimo tego, iż w bazie danych jest ciąg "dane" nie zostaje on wyświetlony:

Oto kod:

Kod: Zaznacz cały

<?php 
$link = @mysql_connect('localhost', 'root', 'haslo');
mysql_select_db('baza', $link);
$wyniki = "Imie";
$warunki="(imie LIKE '%$wyniki%')"; 
$query="SELECT * FROM $tabela WHERE $warunki"; 
echo $result = MYSQL_QUERY($query); 
?>  

Odp: [php, MySQL] Skrypt wyszukujący łańcuch znaków

: 04 sie 2009, 20:57
autor: leon1313
Brak zdefiniowanej zmiennej $tabela. Poza tym w celu unikniecia złego interpretowania zmiennych polecam zamiast

Kod: Zaznacz cały

"aaa $bbb" 
:

Kod: Zaznacz cały

"aaa " .$bbb

Odp: [php, MySQL] Skrypt wyszukujący łańcuch znaków

: 05 sie 2009, 10:13
autor: witek23
Poprawiłem skrypt w ten sposób:

Kod: Zaznacz cały

<?php  
$link = @mysql_connect('localhost', 'root', 'haslo'); 
mysql_select_db('baza', $link); 
$wyniki = "Imie"; 
$warunki="(imie LIKE '%$wyniki%')";  
$query="SELECT * FROM tabela WHERE $warunki";  
echo $result = MYSQL_QUERY($query);  
?> 
Niestety nie działa...

Odp: [php, MySQL] Skrypt wyszukujący łańcuch znaków

: 05 sie 2009, 10:41
autor: kabanek
hmm... może spróbuj tak

Kod: Zaznacz cały

<?php  
$link = @mysql_connect('localhost', 'root', 'haslo'); 
mysql_select_db('baza', $link); 

$query="SELECT * FROM `tabela` WHERE `imie` LIKE '%".$wyniki."%')";  
$id = mysql_query($query);

while ($res = mysql_fetch_assoc($id))
   echo "znalazłem: ".$res['name']."
";
?> 
może tak przejdzie? Przy czym zamiast 'name' w tej pętli wpisz tam swoje pole, które chcesz wyświetlić ;-)

Odp: [php, MySQL] Skrypt wyszukujący łańcuch znaków

: 05 sie 2009, 20:03
autor: witek23
kabanek pisze:hmm... może spróbuj tak

Kod: Zaznacz cały

<?php  
$link = @mysql_connect('localhost', 'root', 'haslo'); 
mysql_select_db('baza', $link); 

$query="SELECT * FROM `tabela` WHERE `imie` LIKE '%".$wyniki."%')";  
$id = mysql_query($query);

while ($res = mysql_fetch_assoc($id))
   echo "znalazłem: ".$res['name']."
";
?> 
może tak przejdzie? Przy czym zamiast 'name' w tej pętli wpisz tam swoje pole, które chcesz wyświetlić ;-)
Wyskakuje mi błąd o następującym komunikacie: "Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/dawid/public_html/szukaj.php on line 8"

Odp: [php, MySQL] Skrypt wyszukujący łańcuch znaków

: 05 sie 2009, 20:06
autor: Spawnm
zbędny )
dodatkowo jeśli dajesz "" nie musisz bawić się z kropkami.

Kod: Zaznacz cały

$link = @mysql_connect('localhost', 'root', 'haslo');  
mysql_select_db('baza', $link);  
$wyniki='cos';
$query="SELECT * FROM `tabela` WHERE `imie` LIKE '%$wyniki%' ";   
$id = mysql_query($query); 

while ($res = mysql_fetch_assoc($id)) 
   echo "znalazłem: ".$res['name']."
";
skoro wyskakuje taki warning to znaczy że masz literówkę w nazwie tabeli lub kolumny

Odp: [php, MySQL] Skrypt wyszukujący łańcuch znaków

: 08 sie 2009, 08:41
autor: witek23
Spawnm pisze:zbędny )
dodatkowo jeśli dajesz "" nie musisz bawić się z kropkami.

Kod: Zaznacz cały

$link = @mysql_connect('localhost', 'root', 'haslo');  
mysql_select_db('baza', $link);  
$wyniki='cos';
$query="SELECT * FROM `tabela` WHERE `imie` LIKE '%$wyniki%' ";   
$id = mysql_query($query); 

while ($res = mysql_fetch_assoc($id)) 
   echo "znalazłem: ".$res['name']."
";
skoro wyskakuje taki warning to znaczy że masz literówkę w nazwie tabeli lub kolumny
Skrypt niestety nie działa... Może coś źle rozumiem. Mam bazę o nazwie baza, tabelę o nazwie tabela. Kolejne kolumny nazywają się: id, imie, nazwisko. W tabeli jest rekord o krotkach z danymi: 1, Imie, Nazwisko.

Odp: [php, MySQL] Skrypt wyszukujący łańcuch znaków

: 08 sie 2009, 10:00
autor: kabanek

Kod: Zaznacz cały

$link = @mysql_connect('localhost', 'root', 'haslo');  
mysql_select_db('baza', $link);  
$wyniki='cos';
$query="SELECT * FROM `tabela` WHERE `imie` LIKE '%$wyniki%' ";   
$id = mysql_query($query); 

while ($res = mysql_fetch_assoc($id)) 
   echo "znalazłem: ".$res['imie']."
";
i powinno działać...

Odp: [php, MySQL] Skrypt wyszukujący łańcuch znaków

: 10 sie 2009, 20:07
autor: nexon
Jeśli błąd z

Kod: Zaznacz cały

mysql_fetch_assoc($id);
ciągle się powtarza spróbuj zastąpić ją

Kod: Zaznacz cały

mysql_fetch_array($id);
. Ten sam wynik praktycznie.

Tak w ogóle to php coś zgłasza czy poprostu cisza?

Kod: Zaznacz cały

$id = mysql_query($query) or die(mysql_error()); 

Edit:
Heh no tak... Nie zauważyłem że kabanek już poprawił ;]

Odp: [php, MySQL] Skrypt wyszukujący łańcuch znaków

: 11 sie 2009, 19:49
autor: witek23
Nadal jest coś nie tak. Po prostu cisza nic się nie pokazuje. Może źle utworzyłem tabelę:

Kod: Zaznacz cały

<?php
$link = @mysql_connect('localhost', 'root', 'pass')
or die('Brak połączenia z serwerem MySQL.
Błąd: '.mysql_error());
echo "Udało się połączyć z serwerem!
";
$db_selected = mysql_select_db('baza', $link);
if (!$db_selected) {
    die ('Nie można ustawić my_db : ' . mysql_error());
}
$zapytanie = 'CREATE TABLE tabela (id int NOT NULL AUTO_INCREMENT, imie char(30), nazwisko char(3), PRIMARY KEY(id))';
$idzapytania = mysql_query($zapytanie);
$zapytanie = "INSERT INTO tabela (`id`, `imie`, `nazwisko`) VALUES ('1', 'cos', 'cos')";
mysql_close($link); 
?>
A oto skrypt wyszukujący po modyfikacjach:

Kod: Zaznacz cały

<?php
$link = @mysql_connect('localhost', 'root', 'pass');  
mysql_select_db('baza', $link);  
$wyniki='cos';
$query="SELECT * FROM `tabela` WHERE `imie` LIKE '%$wyniki%' ";   
$id = mysql_query($query); 
while ($res = mysql_fetch_array($id)) 
   echo "znalazłem: ".$res['imie']."
"; 
?>

Odp: [php, MySQL] Skrypt wyszukujący łańcuch znaków

: 11 sie 2009, 21:35
autor: kabanek
już Ci mówię co jest :P tabelę tworzysz poprawnie (sprawdzisz to w phpmyadminie), dodaje też poprawnie, ale widzę, że nie do końca rozumiesz czym się różni funkcja mysql_fetch_array od mysql_fetch_assoc

ta pierwsza zwraca tabelę, do której elementów możesz dowoływać się za pomocą indeksów tzn u nas będzie tak:

Kod: Zaznacz cały

echo $res[0];
natomiast, gdy odwołujesz się do mysql_fetch_assoc to wtedy żeby coś z niej wyciągnąć, to piszesz tak:

Kod: Zaznacz cały

echo $res['imie'];
widzisz różnicę? W tym co napisałeś to, albo zmień funkcję na mysql_fetch_assoc, albo w tej pętli zmień linijkę na

Kod: Zaznacz cały

echo "znalazłem: ".$res[0]."
";  
i powinno hulać :D

Odp: [php, MySQL] Skrypt wyszukujący łańcuch znaków

: 12 sie 2009, 11:46
autor: f00sek
@up
Kabanek nie masz racji do końca:P Funkcja mysql_fetch_assoc() zwraca tylko tablicę asocjacyjną (z kluczami odpowiadającymi nazwom kolumn). Funkcja mysql_fetch_num() zwraca tabelę numeryczną. A funkcja mysql_fetch_array() zwraca tabelę w której do wyników możemy się odwołać zarówno tak jak w mysql_fetch_assoc() jak i mysql_fetch_num() - przez indeks numeryczny i kolumnowy. Przepuść przez print_r albo foreach wyniki z wszystkich funkcji, zobaczysz;)

Odp: [php, MySQL] Skrypt wyszukujący łańcuch znaków

: 12 sie 2009, 12:17
autor: kabanek
f00sek rzeczywiście :P
ja na co dzień w PHPie nie programuję i jestem samoukiem;p zapamiętam :)

Odp: [php, MySQL] Skrypt wyszukujący łańcuch znaków

: 13 sie 2009, 10:11
autor: witek23
Dziękuje wszystkim za pomoc. Skrypt działa:) Źle wstawiałem rekordy do tabeli, a właściwie ich w ogóle nie wstawiałem...

Pozdrawiam

Odp: [php, MySQL] Skrypt wyszukujący łańcuch znaków

: 13 sie 2009, 12:58
autor: sibul
Jeśli chcesz mieć wyszukiwać w sposób w którym wpisujesz szukane słowo w pasek adresu przeglądarki w zmienną która jest podstawiana do szukania wpisz tak;

Kod: Zaznacz cały

$zmienna = mysql_real_escape_string($_GET['id']);
i wówczas możesz wywołać skrypt w ten sposób
adres.pl/szukaj.php?id=szukane+słowo
Warto utworzyć warunek dla pustej zmiennej GET

Kod: Zaznacz cały

if (empty($_GET['id'])){ echo "wpisz poprawnie szukane slowo"; } else {
reszta kodu;
}