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

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
witek23
Sędziwy Jeż
Sędziwy Jeż
Posty: 49
Rejestracja: 31 gru 2008, 11:40
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME

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

Post 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); 
?>  
Awatar użytkownika
leon1313
Zakręcona Traszka
Zakręcona Traszka
Posty: 668
Rejestracja: 02 sty 2006, 19:35
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: KDE Plasma
Architektura: x86

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

Post 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
"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
witek23
Sędziwy Jeż
Sędziwy Jeż
Posty: 49
Rejestracja: 31 gru 2008, 11:40
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME

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

Post 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...
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

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

Post 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ć ;-)
witek23
Sędziwy Jeż
Sędziwy Jeż
Posty: 49
Rejestracja: 31 gru 2008, 11:40
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME

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

Post 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"
Awatar użytkownika
Spawnm
Sędziwy Jeż
Sędziwy Jeż
Posty: 83
Rejestracja: 30 maja 2009, 18:16
Płeć: Mężczyzna
Wersja Ubuntu: 12.10
Środowisko graficzne: Unity
Architektura: x86
Lokalizacja: Radom
Kontakt:

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

Post 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
witek23
Sędziwy Jeż
Sędziwy Jeż
Posty: 49
Rejestracja: 31 gru 2008, 11:40
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME

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

Post 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.
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

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

Post 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ć...
Awatar użytkownika
nexon
Piegowaty Guziec
Piegowaty Guziec
Posty: 27
Rejestracja: 30 gru 2007, 20:39
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Kontakt:

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

Post 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ł ;]
witek23
Sędziwy Jeż
Sędziwy Jeż
Posty: 49
Rejestracja: 31 gru 2008, 11:40
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME

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

Post 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']."
"; 
?>
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

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

Post 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
Awatar użytkownika
f00sek
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 109
Rejestracja: 18 kwie 2009, 15:54
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

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

Post 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;)
System.out.println ("Java programmer");
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

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

Post autor: kabanek »

f00sek rzeczywiście :P
ja na co dzień w PHPie nie programuję i jestem samoukiem;p zapamiętam :)
witek23
Sędziwy Jeż
Sędziwy Jeż
Posty: 49
Rejestracja: 31 gru 2008, 11:40
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME

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

Post 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
Awatar użytkownika
sibul
Wytworny Kaczor
Wytworny Kaczor
Posty: 318
Rejestracja: 16 paź 2007, 22:29
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64

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

Post 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;
}
OS X 10.8.3
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości