wyszukiwarka PHP/MySQL mam bledy w kodzie

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

0

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

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 :))

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? :)

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 :((

0

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

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:

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());
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

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??

0
or die(mysql_error())

powoduje, że w razie błędu strona wyświetli Ci jego treść, zamiast dalej wykonywać skrypt. Usunięcie tej linijki nic nie pomoże, bo błąd jest w generowanym zapytaniu. Z tego co widzę, to brakuje w nim { } otaczających zapytanie (powinno być %{epson}%, nie %epson%.

0

skorzystalam z tego linka

Coldpeer napisał(a)

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

dziala wyswietlanie na czesci ale sa dwa bledy.
Pierwszy to taki ze jakby nie jest to polaczone z rezultatami wyszukiwarki czyli wypisuje mi czesc produktow z bazt danych ale tych pierwszych roznych a nie tych ktore sopalnaija kryteria wyszukiwania,

Drugi to jesli wybuiore sobie jakas inna strone to przechodzi mi do zupelnie innej strony nie zwiazanej kompletnie z cala sprawa. Mysle ze problem jest w tym momencie:

if($i*$count==$offset){
 echo ' '.$i.' ';
 }else{
 echo '<a href="index.php?count='.$count.'&offset='.$i.'"> '.$i.' </a>';
 }

a co do

or die(mysql_error());

to fakt zgadza sie a dlaczego nie wyswietla w {} to nie wiem zapytanie wyglada tak

$query="select count(*) from `produkt` WHERE nazwa_produktu Like '%{$_POST['phrase']}%'".$_GET['sz']."'";

Dodam jeszcze ze moj kod wyszukiwarki jest dokladnie taki jak w tym temacie w moim ostatnim poscie z poprzedniej strony

Chyba powinnam ten kod z podzialem wkleic jakos pomiedzy ten moj kod wyszukiwarki tylkko kompletnie nie wiem jak.

0

OK zrobilam tak zeby przechodzil do kolejnych stron odpowiadajacych numerkom a nie do jakiejs innej.

Zrobilam licznik zeby wyswietlal mi przy produktach numer porzadkowy ale niestety tylko wyswietla mi 25 od 1-25 na kazdej podstronie a znalazl np 200 chcialabym zeby na stronie [2] wyswietlil od 26-50 a nie znowu od 1-25 itd..

I jeszcze ostatnia pozycja pozostaje pusta. podaje numer 25, i nie wyswietla produktu.

Poza tym nadal nie potrafie polaczyc tego wyswietlania w partiach z wyszukiwarka czyli wyswietla mi rekordy podzielone po 25 na stronie ale sa to wszystkie rekordy z tabeli a ja chce tylko te krore spelniaja kryterium wyszukiwarki :((

Zdaje sobie sprawe ze pewnie pytam tu o jakies banalne rzeczy i glupie bledy robie ale od miesiaca w zasadzie mam stycznosc z php wiec... stram sie najpierw cos znalezc i probuje cos wymyslac ale mam straszne braki w wiedzy na ten temat. Opieram sie glownie na juz istniejacych kodach i tyllko staram sie je dopasowac do aktualnej sytuacji.

Jesli ktos moze mi pomoc polacvzyc te dwa kody (wyszukiwarka i wyswietlanie partiami) to bede bardzo wdzieczna. A swoja droga nadal bede probowala cos robic i szukac.

podaje jeszcze raz razem kody

wyszukiwarka:

// 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 * 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 '<a href="index.php?modul=pokaz_produkt&id_produktu='.$row['id_produktu'].'">'.$row['nazwa_produktu'].'</a>';
echo'<br />';
   }
 }

wyswietlanie partiami:

 //Poł±czenie z mysql i wybranie bazy
 $link=mysql_connect('sql','admin','haslo','baza');
  mysql_select_db("baza",$link);

 //Domy¶lne warto¶ci, odpowiednio liczby rekordów na strone i przesunięcia
 $count=25;
 $offset=0;

 //Pobranie danych z $_GET jezsli ustawione
 if(isset($_GET['count']))$count = $_GET['count'];
 if(isset($_GET['offset']))$offset = $count*$_GET['offset']; //numer strony

 //Pobranie liczby rekordów
 $sql = 'Select count(*) from produkt';
 $result = mysql_query($sql,$link);
 $r = mysql_fetch_array($result);
 //Liczba stron, użycie ceil - zaokr±glenie w górę, w celu zapewnienia, że żadna strona się nie straci
 $pages = ceil($r[0]/$count);

 //Pobranie odpowieniej paczki
 $sql = 'Select * from produkt Limit '.$count.' offset '.$offset.';';
 $result = mysql_query($sql,$link);

 //Pocz±tek tabeli
// echo '<table><tr><th>lp.</th><th>nazwa produktu</th></tr>';

 $obAmount=mysql_num_rows($result);

 //Pętla po wszystkich rekordach
 while(($row=mysql_fetch_array($result))!=NULL){
      for($x=0;$x<$obAmount;$x++){

     $row=mysql_fetch_assoc($result);
// wy¶wietlenie numeru identyfikacyjnego
echo $x+1;
echo '. ';
     
  echo '<a href="index.php?modul=pokaz_produkt&id_produktu='.$row['id_produktu'].'">'.$row['nazwa_produktu'].'</a>';
  echo'<br />';
 //echo '<tr><td>'.$row['nazwa_produktu'].'</td><td>'.$row['data']. '</td><td>'.$row['cena'].'</td></tr>';

   }

 //echo '</table>';

 //Pętla po stronach
 for($i=0;$i<$pages;$i++){
 //je¶li obecna strona, nie twórz linku do strony
 if($i*$count==$offset){
 echo ' '.$i.' ';
 }else{
 echo '<a href="search1.php?count='.$count.'&offset='.$i.'"> '.$i.' </a>';
  }
 }
 }
0

A jak zrobic zeby aktualnie wyswietlana strona byla zaznaczona w tych numerkach na dole na czerwono?
zrobilam tak:

 //je¶li obecna strona, nie twórz linku do strony
 if($i*$count==$offset){
 echo ' <style="color:red">'.$i.'</style> ';
 }

ale to nie dziala

ok zrobilam tak:

echo ' <font color="#CC0000">['.$i.']</font> ';
0

Nie ma znacznika html style. To jest atrybut. Font jest przestarzały. Proponuję rozwiązanie optymalne echo ' '.$i.' ';
Ewentualnie styl można wyrzucić do zewnętrznego CSSa, ale to już zależy od rozwiązania.

0

aha :) dziekuje za podpowiedz, tak wlasnie sadzilam ze chyba inaczej wypadalo to zrobic.

0

co ja tu robie zle ze mi nie wyswietla ile rekordow znalazl??

 //Pobranie liczby rekordów
 $sql = 'Select count(*) from produkt';
 $result = mysql_query($sql,$link);
 $r = mysql_fetch_array($result);
 $obAmount=mysql_num_rows($r);
 echo'<h2>Wyniki wyszukiwania</h2>';
 echo'Znaleziono: '.$obAmount.'<br /><br />';
0

$obAmount=mysql_num_rows($result);

(tutaj mysql_fetch_row w ogóle jest niepotrzebne)

0

Oj, nie nie. mysql_num_rows zwraca ilość zwróconych rekordów. Wykonując zapytanie 'SELECT COUNT() FROM tabela' otrzymujesz JEDEN rekord i w tym rekordzie pole zawierające ilość rekordów w tabeli. Czyli jeśli wykonasz coś takiego:
$sql = 'SELECT COUNT(
) AS count FROM tabela';
$result = mysql_query($sql, $link);
wówczas
mysql_num_rows($result) będzie równe 1, natomiast
$r = mysql_fetch_array($result);
$r['count'] będzie równe ilości rekordów w tabeli tabela.

0

OK poradziłam sobie z tym.

A co robie zle w tym zapytaniu? nie chce mi odszukac rekordow spelniajacych warunek w zapytaniu

<?php
 
 include("config.php");
 
 

if(isset($_GET['kategoria']))
{
  $kategoria=$_GET['kategoria'];
  
 
$wynik1 = mysql_query("SELECT id_k FROM kategoria WHERE nazwa_k='$kategoria'")
or die('Błąd zapytania');


if(mysql_num_rows($wynik1) > 0) {
    /* jeżeli wynik jest pozytywny, to wyświetlamy dane */

    while($r = mysql_fetch_array($wynik1)) {

        echo "<a href=\"pokaz_produkt.php?modul=pokaz_rodzaj&rodzaj=.$r[1].\">$r[1]</a>";
		    }

}
 

  
}
else
{
 $rodzaj=glowna;
 include($rodzaj.".php");
}
?> 
0

A czym jest $r[1]? Nie powinno być czasem $r[0] albo lepiej - $r['id_k']?

0

:) zadzialalo :) dzieki!!!

tylko teraz chce zeby wynik jednego zapytania byl argumentem drugiego i to mi nie dziala :(

$wynik1 = mysql_query("SELECT id_k FROM kategoria WHERE nazwa_k='$kategoria'")
or die('Błąd zapytania');

$wynik2 = mysql_query("SELECT nazwa_r FROM rodzaj WHERE id_k='$wynik1'")
or die('Błąd zapytania');

a sprawdzam to takim kodem

if(mysql_num_rows($wynik2) > 0) {
    /* jeżeli wynik jest pozytywny, to wyświetlamy dane */

    while($r = mysql_fetch_array($wynik2)) {

        echo "<a href=\"pokaz_produkt.php?modul=pokaz_rodzaj&rodzaj=$r[nazwa_r]\">$r[nazwa_r]</a>";
        
 
    }

}
0

$wynik1 to Resoruce. Aby dostać dane, musisz użyć mysql_fetch_array/assoc/row/... Dopiero te dane możesz podstawić do drugiego zapytania.

Szczegół taki - zrobisz to wszystko w 1 zapytaniu spokojnie :-)

SELECT k.id_k, r.nazwa_r FROM kategoria k LEFT JOIN rodzaj r ON r.id_k = k.id_k WHERE k.nazwa_k='$kategoria'
0

O MATYLDO!!!!! DZIALA :)

:::::* D Z I E K U J E!!!!

0

to jest fajna sprawa z tymi JOIN'ami wykorzystalam to analogicznie do innych potrzebnych mi zapytan ale teraz natrafilam na zapytanie bardziej skomplikowane i juz nie umiem tego tak skonstruowac na podstawie podanego przykladu by mi to dzialalo.

Zatem znowu poprosze o pomoc.

mam trzy tabele

RODZAJ id_r, nazwa_r, id_k
PODRODZAJ id_pr, nazwa_pr, id_r
PRODUKT id_p, nazwa_p, id_r, id_pr

produkt z tabeli PRODUKT musi spelniac warunek ze rekordy id_r (z tabeli RODZAJ) oraz id_pr (z tabeli PRODUKT) sa rowne id_r i id_pr z tabeli PRODUKT

z tym ze nie kazdy produkt z tabeli PRODUKT bedzie mial podane id_pr poniewaz moze nie nalezec do zadnego podrodzaju a jedynie do rodzaju. wtedy id_pr z tabeli PRODUKT bedzie =0

zmienna kluczowa wg ktorej trzeba zrobic select jest podana do pliku $grupa=$_GET['grupa']; i jest nia wartosc z tabeli RODZAJ z pola nazwa_r

uznalam ze nalezy jakos tak sformulowac zapytanie by spelnialo ono ponizsze warunki:

I sprawdz czy $grupa=nazwa_r z RODZAJ i wtedy wez id_r

II sprawdz czy id_r z RODZAJ = id_r z PODRODZAJ i wtedy wez id_pr
(ten warunek moze nie byc spelniony wtedy ma pamietac id_r z RODZAJ)

III sprawdz czy id_r z RODZAJ = id_r z PRODUKT i czy id_pr PODRODZAJ = id_pr z PRODUKT i wez nazwa_p z PRODUKT (ta druga czesc nie koniecznie musi byc spelniona i obawiam sie ze cale zapytanie moze wtedy nie zostac spelnione)

Czyli wynikiem zapytania ma byc nazwa_p z PRODUKT spelniajacy powyzsze warunki
nie wiem jak to rozgrysc bo ten jeden warunek moze a nie musi byc spelniony :((

0
SELECT 
		p.nazwa_p 
	FROM 
		podrodzaj pr, 
		produkt p 
	LEFT JOIN 
		rodzaj r 
		ON r.id_r=pr.id_pr 
	WHERE 
		(p.id_pr=pr.id_pr OR p.id_pr is NULL) /* lub p.id_pr=0 */
		AND p.id_r=r.id_r
		AND r.nazwa_r=$grupa

Nie mam pojęcia czy zadziała. Taki problem bardziej się nadaje już do baz danych ;)

0

zaraz to sprawdze a wlasnie szukam w sieci informacji na temat pobierania danych z roznych tabel za pomoca formularzy i zapisywanie ich w wybranym skladzie w innej tabeli.

np. Mam tabele
KATEGORIA i RODZAJ
id_k id_r
nazwa_k nazwa_r

np:

oleje ciemne
pedzle jasne
farby cienkie
grube
biale
czerwone

i chce dane rekordy powiazac ze soba wybierajac za pomoca formularza kategorie i rodzaj i taki zestaw zapisac w tabeli
RAZEM id_k, id_r

rekordy mialyby wartosci 1,1, 1,2, 1,3, 3,2, 2,6, itd a ja odwolywalabym sie szukajac np pola nazwa_r poprzez ta tabele RAZEM
Chodzi o to by nie powtarzac rekordow w tabelach bo np olej bedzie sie odnosilo do kilku rodzajow i chce uniknac wpisywania kilka razy w tabele. Moze jest na to jakis inny sposob niz ten co ja tu wymyslilkam. Bo bankowo cos takiego musi byc zeby nie dublowac danych. Tylko nie wiem co.

0

teraz masz problem czysto z SQL, więc zadaj pytanie w dziale poniżej (bazy danych), tam szybciej dostaniesz odpowiedź

0

dobrze bede o bazy pytala tam, ale jeszcze mam problem z kodem, co tu robie zle??
wyskakuje mi blad
Parse error: syntax error, unexpected T_WHILE

//sprawdza jakie rodzaje istnieja dla wybranej kategorii
$wynik2 = mysql_query("SELECT k.id_k, r.nazwa_r FROM kategoria k LEFT JOIN rodzaj r ON r.id_k = k.id_k WHERE k.nazwa_k='$kategoria1'")
or die('B³ad zapytania');

$r = mysql_fetch_array($wynik2);
$rodzaj1=$r[nazwa_r];




//sprawdza jakie podrodzaje istnieja dla wybranego rodzaju
$wynik3 = mysql_query("SELECT r.id_r, pr.nazwa_pr FROM rodzaj r LEFT JOIN podrodzaj pr ON r.id_r=pr.id_r WHERE r.nazwa_r='$rodzaj1'")
or die('B³±d zapytania');
  
 /*
wy¶wietlamy wyniki, sprawdzamy,
czy zapytanie zwróci³o warto¶æ wiêksz± od 0
*/
  if(mysql_num_rows($wynik3) > 0) {
      /* je¿eli istnieja podrodzaj (podrodzaje nie zawsze istnieja) */
      
     if(mysql_num_rows($wynik2) > 0) {
       /* je¿eli jesl;i istnieja rodzaje (rodzaje zawsze istnieja) */

         while($r = mysql_fetch_array($wynik2)) {

              echo "<a href=\"pokaz_kategoria_1.php?rodzaj=pokaz_rodzaj&kategoria1=$kategoria1&podrodzaj=pokaz_podrodzaj&rodzaj1=$r[nazwa_r]\">$r[nazwa_r] |</a>";
         }

      }
  }
  else
  /* je¿eli nie istnieja podrodzaje */
  (
    while($r = mysql_fetch_array($wynik2)) {   TUTAJ JEST TEN BLAD!!!! :(

           echo "<a href=\"pokaz_kategoria_1.php?rodzaj=pokaz_rodzaj&kategoria1=$kategoria1&podrodzaj=pokaz_podrodzaj&rodzaj1=$r[nazwa_r]&produkty=pokaz_produkty&produkty1=$r[nazwa_r]\">$r[nazwa_r] |</a>";
     }
  )


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