wyszukiwarka PHP/MySQL mam bledy w kodzie

Odpowiedz Nowy wątek
2007-12-06 14:30
0

Witam, przejrzałam kilkadziesiąt stron na ten temat, wszystkie kody do wyszukiwarki są podobne jednak żaden z tych kodów nie działa u mnie. Zdecydowałam się w koncu na taki kod i prosze o pomoc co tu jest zle.

plik index.php

<form action="search.php" method="post">
Wpisz wyszukiwany produkt: <input type="text" name="phrase" />
<input type="submit" value="Szukaj!" />
</form>

plik search.php

else
{
// połączenie z bazą danych, NIE ZAPOMINJ USTAWIĆ WŁASNYCH DANYCH!
$base=mysql_connect('sql','admin','haslo','baza');
// 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 nazwa_produktu From produkty Where nazwa_produktu Like '%{$_POST['phrase']}%'";
// wysłanie zapytania do bazy danych
$result=mysql_query($base,$query);
// ustalenie ilości wyszukanych obiektów
$obAmount=mysql_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=mysql_fetch_assoc($result);
// wyświetlenie numeru identyfikacyjnego
echo $x+1;
echo '. ';
// wyświetlenie nazwy produktu
echo $row['pr_name'];
echo'<br />';
}
}
// zamknięcie połączenia
mysql_close($base);
// koniec aplikacji
?>

bledy:
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /usr/local/apache/www/htdocs/[ciach]/wyszukiwarka/2/search.php on line 24

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /usr/local/apache/www/htdocs/[ciach]wyszukiwarka/2/search.php on line 26

Pozostało 580 znaków

2007-12-06 15:29
0

$result=mysql_query($query, $base);


homepage
<font size="1">Jeśli starasz się, by Twój system był idiotoodporny, zawsze znajdzie się idiota, który jest bardziej pomysłowy od Ciebie.</span>

Pozostało 580 znaków

2007-12-06 15:43
0

:) dziekuje za odpowiedz

faktycznie jeden blad zostal naprawiony ale jeszcze wywala
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /usr/local/apache/www/htdocs/[ciach]/wyszukiwarka/2/search.php on line 26

Ponadto wyswietla
Znaleziono:

a pod spodem nic nie ma a powinno odnalezc ta fraze ktora ja wpisuje

P.S.
Ta sonde w koncu zrobilam na formularzach :(( ale bede zglebiac temat.

aha no tak, nie wypisuje bo nie przeszukuje wierszy tabeli, eh :))

Pozostało 580 znaków

2007-12-06 15:50
0

Tutaj wina może leżeć tylko po stronie zapytania SQL. Spróbuj:

$query= 'Select nazwa_produktu From produkty Where nazwa_produktu Like "%' . $_POST['phrase'] . '%"';

A jesteś pewna, że dane z POST są przekazywane?

PS. wyciąłem adres strony z błędów, żeby Ci google nie zindeksowało ;)

PS 2. Na formularzach? A ja to inaczej robiłem? :)


homepage
<font size="1">Jeśli starasz się, by Twój system był idiotoodporny, zawsze znajdzie się idiota, który jest bardziej pomysłowy od Ciebie.</span>

Pozostało 580 znaków

2007-12-06 15:51
0

no ale dlaczego nie chce przeszukac tej tabeli?? czy cos jest zle ze skladnia mysql_num_rows($result) ?? czyli cos z ta zmienna?? tylko co?

oo wyprzedziles mnie z odpowiedzia.

no tez na formularzach tylko Twoj kod byl duzo bardziej zaawansowany i mial super zabezpieczenia a ja sobie to wszystko darowalam bo potrzebowalam miec zamiast wiecej sond to wiecej pytan w jednej sadzie i nie potrafilam tego przerobic. Moj kod PHP jest bardzo ograniczony w tej mojej ankiecie/sondzie a jeszcze w dodadku dowiedzialam sie ze uzylam zmeinnych przez ktore mozna dostac sie do bazy danych i skasowac jej zawartosc :(( ale niech juz bedzie. Moze z czasem nabiore wiecej doswiadczenia. Ide do domu jak dotre to sprawdze Twoja wskazowke. Pozdrawiam Aha no dziekuje :) za to wyciecie.

// "potrzebowalam miec zamiast wiecej sond to wiecej pytan w jednej sadzie" - ale przecież tam jest nieograniczona ich ilość ;) Chociaż to już mało istotne ;) - Cold

hej :)

tak jestem pewna ze dane sa przekazywane. W pliku search.php wpisalam w 8 linijce

echo ($_POST['phrase']);

i zwraca mi ta fraze ktora wpisalam do wyszukania
oraz blad
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\wamp\www\wyszukiwarka\wyszukiwarka\2\search.php on line 27

mimo ze zmienilam rowniez zapis zmiennej $query na ten co proponowales :((

Pozostało 580 znaków

2007-12-06 21:18
nav
0

Najłatwiej: mysql_query(...) or die(mysql_error());


utf-8 rlz! ٩(ಥ_ಥ)۶

Pozostało 580 znaków

2007-12-06 21:54
0

<?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
echo ($_POST['phrase']);
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 = mysql_connect("sql", "admin", "hasklo") or die ("Nie masz uprawnien");
mysql_select_db("baza",$base);
// 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 nazwa_produktu From produkty Where nazwa_produktu Like "%' . $_POST['phrase'] . '%"';
// wysłanie zapytania do bazy danych
$result=mysql_query($query,$base);
// ustalenie ilości wyszukanych obiektów
$obAmount=mysql_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=mysql_fetch_assoc($result);
// wyświetlenie numeru identyfikacyjnego
echo $x+1;
echo '. ';
// wyświetlenie nazwy produktu
echo $row['pr_name'];
echo'<br />';
}
}
// zamknięcie połączenia
mysql_close($base);
// koniec aplikacji
?>

wyswietla:

Wyniki wyszukiwania
lex
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\wamp\www\wyszukiwarka\wyszukiwarka\2\search.php on line 28
Znaleziono:

Pozostało 580 znaków

2007-12-06 23:27
nav
0

Może skoro już używasz $link, to spróbuj go podać jako drugi argument funkcji mysql_num_rows.

Spróbuj też tego co podałem wyżej:

$result=mysql_query($query,$base) or die(mysql_error());

utf-8 rlz! ٩(ಥ_ಥ)۶

Pozostało 580 znaków

2007-12-07 08:51
0

:) dziekuje za podpowiedzi, zadzialalo, znajduje rekrdyale,,,,,,,,
heh chce zeby szukal w nazwa_produktu i wyswietlil wszystkie ktore zawieraja wpisana fraze. Ten program wyszukuje nie wiem co bop wypisal mi znaleziono 241 po czym kolejno wypisal liczby od 1 do 241 z kropka na koncu i nic poza tym. Nie wiem ile mam w bazie produktow z ta fraza ktora wpisalam byc moze jest ich tyle. Generalnie wszystkich produktow jest duzo wiecej dlatego mysle ze moze on znalalz wszystkie z szukana fraza i bylo ich 241 ale z jakiegos powodu ich nie wypisal na ekran. A jaki to moze byc powod??

wklejam jeszcze raz najaktualniejsza wersje kodu:

<?php //na katalogu 2
// 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=mysql_connect('sql','admin','haslo','baza');
  mysql_select_db("baza",$base);
// 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 nazwa_produktu From produkt Where nazwa_produktu Like '%{$_POST['phrase']}%'";
// wysłanie zapytania do bazy danych
$result=mysql_query($query,$base) or die(mysql_error());
// ustalenie ilo¶ci wyszukanych obiektów
$obAmount=mysql_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=mysql_fetch_assoc($result);
// wy¶wietlenie numeru identyfikacyjnego
echo $x+1;
echo '. ';
// wy¶wietlenie nazwy produktu
echo $row['pr_name'];
echo'<br />';
}
}
// zamknięcie poł±czenia
mysql_close($base);
// koniec aplikacji
?>

OK poradzilam sobie , obiecuje ze nastepnym razem troche pomysle zanim wkleje pytanie,,,, choc i tak zawsze mnie oswieca wlasnie po tym :)

dla tych ktorzy chca wykorzystac kod - zamiast echo $row['pr_name'];
echo $row['nazwa_produktu'];

Bardzo dziekuje za pomoc. Pewnie jeszcze bede miala duzo innych pytan wiec sie nie żegnam.

papa

Pozostało 580 znaków

2007-12-19 13:46
0

no i tak jak sadzilam mam kolejne pytania, mianowicie potrzebuje tym razem zrobic do teh wyszukiwarki ograniczenie wyswietlania. Na stronie ma sie wyswietlac 30 produktow a reszta ma byc podzielona na czesci i pod wyswietlonymi tymi 30toma maja bys odnosniki w stylu [1][2][3][4][5] itd ktore by nas kierowaly do kolejnych partii odnalezionych produktow.

MNo i nie potrafie dac sobie z tym rady :((

Znalalzlam taki kod:


////////////////////////////////////////////
$limit=6;
if(isset($_GET['strona'])){
$strona=$_GET['strona'];
--$strona;
}
else $strona=0;
$limit2=$strona*$limit;

 //////////////////////////////
    $query="select count(*) from `produkt` WHERE nazwa_produktu Like '%{$_POST['phrase']}%'".$_GET['sz']."'";
    $sql=mysql_query($query,$base) or die(mysql_error());
    $row=mysql_fetch_row($sql);
    $ilosc=$row[0];
    echo '<div align="center">';
    for($i=0, $strona=1;$i<$ilosc;$i+=$limit,++$strona)
        {
        if($i%19==0 || $i==1)
            {
            echo '<br>';
            }
        if($_GET['strona']!=$strona )
            {
            echo '<a href="index.php?modul=search&sz='.$_GET['sz'].'&strona='.$strona.'" class="content">['.$strona.']&nbsp;</a>';
            }
        else
            {
            echo '<a href="index.php?modul=search&sz='.$_GET['sz'].'&strona='.$strona.'" class="content">['.$strona.']&nbsp;</a>';
            }
        }
        echo '<br>&nbsp;</div>';
/////////////////////////

powpisywalam juz tutaj swoej zmienne ale to mi i tak nie dziala. W czym problem?? chyba znowu z baza bpo wyskakuje mi taki komunikat:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near %epson%' at line 1

gdy skasuje z kodu

or die(mysql_error())

to wywala ze w lini 59 jest problem czyli w

$row=mysql_fetch_row($sql);

Moze ktos mi cos doradzi??

Pozostało 580 znaków

2007-12-19 14:20
0

http://compzone.org/art-Podzial+rekordow+na+strony-7.html


homepage
<font size="1">Jeśli starasz się, by Twój system był idiotoodporny, zawsze znajdzie się idiota, który jest bardziej pomysłowy od Ciebie.</span>

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0