Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]PRoszę o pomoc w zapytaniu php mysql
Forum PHP.pl > Forum > Przedszkole
Manioo
Mam galerię zdjęć w bazie danych. Każde zdjęcie na stronie otwiera się pojedynczo potem trzeba je zamknąć i otworzyć kolejne. Chcę zrobić aby po otwarciu się był link "następne" i po jego kliknięciu pojawiało się kolejne zdjęcie bez konieczności zamykania otwartego już okna. Problemu nie ma bo zastosowałem:
Kod
$zapytanie=mysql_query("select * from zdjecia where id='$zo_d1[id]'");      
  if (mysql_num_rows($zapytanie)==0) {             jesli ilośc wyników różna od 0 czyli nie znaleziono to
  
   .............................?............................   tu jest problem bo nie wiem co zrobić gdy zdjęcie nie istnieje  
  }else
  {
   $y=$zo_d1[id]+1;     gdy zdjęcie istnieje do adresu dodaje +1 i wysietla kolejne zdjęcie np 456    
  }
  
  <a href="<?php echo"$adres/z/$y/$gl_tablink/"; ?>">NASTĘPNE</a>


Adres strony mam taki:
Kod
  www.domena/z/667/Array/
liczba to id zdjecia ktore istnieje
jesli doda mi skrypt +1 czyli otworzy 668, ale jeśli tego zdjęcia nie będzie w bazie to jak zrobić by przeskoczyło do następnego? questionmark.gif

Proszę o pomoc bo już się pogubiłem.
JoShiMa
Cytat(Manioo @ 6.06.2008, 09:58:55 ) *
Problemu nie ma bo...


No to właściwie w czym problem??

A zapytanie do pierwszego zdjęcia zrobiłabym tak?

  1. SELECT * FROM zdjecia ORDER BY id LIMIT 2


Wtedy weźmie Ci pierwsze zdjęcie i następne, odpadnie problem że może nie być zdjęcia o taki id.

Do następnych zdjęć wzięłabym id z drugiego rekordu i dała zapytanie:

  1. SELECT * FROM zdjecia WHERE id >= '$id' ORDER BY id LIMIT 2



Możesz od razu zacząć od ustawienia początkowego
  1. <?php
  2. $zo_d1[id] = 1;
  3. SELECT * FROM zdjecia WHERE id >= '$zo_d1[id]' ORDER BY id LIMIT 2
  4. ...
  5. $zo_d1[id] = id z drugiego rekordu
  6. SELECT * FROM zdjecia WHERE id >= '$zo_d1[id]' ORDER BY id LIMIT 2
  7. itd
  8. ?>
Manioo
coś mi nie wychodzi

Gdy mam otworzoną podstronę np. zdjęcie
Kod
[url="http://www.domna/z/647/Array/"]http://www.domna/z/647/Array/[/url]
o numerze 647 chodzi o zmianę w linku

Kod
<a href="<?php echo"$adres/z/$y/$gl_tablink/"; ?>">NASTĘPNE</a>
aby tej zmiennej $y w linku przyporzadkować kolejną liczbę +1 zdjęcia która istnieje
to samo jeśli chciałbym dać POPRZEDNIE zdjęci czyli -1 jesli np nie ma kolejnego żeby automatycznie w linku pokazywało np 650 jako kolejne.

Nie wiem jak to wymyślić żeby dobrze było.
toch18
nie jestem pewien ale w zapytaniu SQL jest coś takiego jak IF EXISTS tamk sam w php np if(file_exists) i wtedy możesz się bawić tą swoją tablicą np

$array[$i++] ,na przykład kiedy nie wykryje pliku.
Manioo
faktycznie chyba o to chodzi bo jesli nie wykryje zdjecia o danym numerze to go po prostu ni wyswietli,
tylko jak to zrobić ?

to działa:
Kod
          $y=$zo_d1[id]+1;     gdy <a href="<?php echo"$adres/z/$y/$gl_tablink/"; ?>">NASTĘPNE</a>
wówczas wyświetla kolejne zdjęcie np

Kod
[url="http://www.domena/z/651//"]http://www.domena/z/651//[/url]
$zo_d1[id] - to jest nazwa zdjecia oraz  id zdjecia


ale jak juz dam nastepne i bedzie 652 którego nie ma w bazie ponieważ np zostało usunięta to zamiast wyświetlać kolejne to jest:

Warning: getimagesize(http://www.domena//duzy/.jpg) [function.getimagesize]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/domena/ftp/domena/inc/strona/zobacz.php on line 90
toch18
ja tak nie potrafie z głowy pisać ale moge ci pokazać schemat


  1. <?php
  2. //tu gdzies powinna być pętlafor z ilościa twoich zdięć
  3.  
  4. for($i=1; $i<=$ilosc_zdiec; $i++)
  5.  
  6.  
  7. SELECT * FROM '' IF EXISTS LIMIT 0,1) //1.wczytaj z mysql zdięci (chyba tak)
  8.  (if(file_exits)) //2.zobaczy czy istnieje
  9.  
  10.  <img src='.$array[$i].'> //jeśli tak to wczytaj co tam sobie chcesz
  11.  
  12. break; //jeśli nie
  13. ?>


to jest tylko zarys biggrin.gif
Kicok
1. Podczas wyświetlania zdjęcia również sprawdzaj, czy znaleziono ID w bazie, np.:
  1. <?php
  2. <php
  3.  
  4. $result = mysql_query( 'SELECT * FROM zdjecia WHERE id = ' . intval( $_GET['id'] ) );
  5. if( !mysql_num_rows( $result ) ) {
  6. // Nie ma takiego zdjęcia w bazie danych
  7. }
  8.  
  9. ?>



2. Co do linków POPRZEDNI, NASTĘPNY:
Pobierz sobie z bazy danych:
- Najmniejsze ID większe od $_GET['id'];
- Największe ID mniejsze od $_GET['id'];

Czyli 2 proste zapytania z WHERE, ORDER BY i LIMIT. Ewentualnie jedno, jeśli użyjesz UNION
Potem już tylko wystarczy sprawdzić, czy zapytanie zwróciło wynik, i jeśli tak to wyświetlić link do poprzedniego/następnego zdjęcia, a jeśli nie to nie wyświetlać nic.
Manioo
ogólnie wcześniejszego jak tak pomyslałem to wystarczy zmienić zmienną w linku (cyfre) na kolejną aby kolejne zdjęcie się wyświetlało, ale blad jest gdy dane zdjecie nie wystepuje (bo zmienna w linku jest to id zdjecia), wowczas należalo by zmienną w linku jakos polaczyc z id aby gdy koljena cyfra w bazie danych id nie wystepuje bralo kolejna az wyswietli tą ktora istnieje. ale jak to zrobic, dokladny kod

Kod
<a href="<?php echo"$adres/z/$zo_d1[id]/$gl_tablink/"; ?>

$zo_d1[id] - zmienna linku czyli także id zdjecia ona ma się zmieniać

$zo_d1[id]+1;   to działa jesli jest kolejne id a jesli nie ma to jest blad i wlasnie jak to zrobic? questionmark.gif


Chodzi tylko aby zmieniać adres (cyfre) w linku
JoShiMa
Kilka postów wyżej Ci napisałam smile.gif

  1. SELECT * FROM zdjecia WHERE id >= '$zo_d1[id]' ORDER BY id LIMIT 2
Manioo
ale co dalej? Proszę o cały kod żrodłowy bo jestem w programowaniu kiepski (+ przecinki i kropki cudzysłowy nawiasy winksmiley.jpg ), i jak by to wyglądało także z linkiem POPRZEDNIE czyli -1 nie mówiąc już że chciałbym porusać się tylko w jednej kategorii zdjęć nie wszystkich w bazi ale to inna kwestia

Próbowałem tak i nie idzie:
Kod
<?php
$zapytanie=mysql_query("select * from zdjecia where id='$zo_d1[id]'");
if (mysql_num_rows($zapytanie)==0)
{

$z=("SELECT * FROM zdjecia WHERE id >= '$zo_d1[id]' ORDER BY id LIMIT 2");
$y=z+1;
  }
else
{
$y=$zo_d1[id]+1;
}
?>

<a href="<?php echo"$adres/z/$y/$gl_tablink/"; ?>"><font color="#FF4000">NASTĘPNE  >></font></a>  </center>
ppp
kiedys cos podobnego robilem, mozna pewnie ladniej ale prosciej to chyba sie nie da juz. Trzy zapytania do bazy, jedno zeby pobrac aktualne zdjecie, jedno zeby pobrac nastepne i jedno zeby pobrac poprzednie.
  1. <?php
  2. $aktualne = mysql_fetch_assoc(mysql_query("SELECT * FROM zdjecia WHERE id='$zo_d1[id]'"));
  3. $poprzednie = mysql_fetch_assoc(mysql_query("SELECT * FROM zdjecia WHERE id<'$zo_d1[id]' ORDER BY id DESC LIMIT 1"));
  4. $nastepne = mysql_fetch_assoc(mysql_query("SELECT * FROM zdjecia WHERE id>'$zo_d1[id]' ORDER BY id ASC LIMIT 1"));
  5. if ($poprzednie) {
  6. echo "<a href=\"$adres/z/$poprzednie[id]/$gl_tablink/\"><font color=\"#FF4000\">POPRZEDNIE >></font></a> </center>";
  7. }
  8. if ($nastepne) {
  9. echo "<a href=\"$adres/z/$nastepne[id]/$gl_tablink/\"><font color=\"#FF4000\">NASTĘPNE >></font></a> </center>";
  10. }
  11. ?>


Kicok pisał o co chodzi i co sie tu dzieje.
nevt
kolego Manioo, prosze niezwłocznie dodać odbowiednie znaczniki BBcode do wszystkich swoich postów albo temat zostanie zamknięty!
Manioo
Odnośnie bbcode już rozumiem i zastosowałem się do tego.

Jesteście świetni wszystko działa dzięki powyższemu skryptowi!!

Mam jeszcze jedno pytanie jak by to zrobić gdyby po kliknięciu na zdjęcie w danej kategorii po kliknięciu w nastepne czy poprzednie wyskakiwały zdjęcia tylko z danej kategorii a nie z całej bazy?
erix
Dodaj do WHERE warunek sprawdzający kategorię. ;]
Manioo
Mógłbyś to dodać do powyższego kodu to byś pomógł bardzo oraz aby wyświetlało także nazwę kategorii przeglądanego zdjęcia


nazwa tabel:
ZDJECIA: ID, KATEGORIA (NUMER ID Z KATEGORII), TYTUL, OPIS, OCENA, itd.
KATEGORIE: ID, NAZWA

PRoszę o pomoc questionmark.gifquestionmark.gif?
Chodzi o to żeby po wybraniu zdjęcia wyświetla je i poniżej są linki POPRZEDNIE NASTĘPNE wszystko działa ale zdjęcia przeglądają się wszystkie z całej bazy, a mi chodzi żeby tylko z wybranej kategorii wyświetlonego zdjęcia. Jak dokładnie zmienić powyższy kod napisany przez ppp v??
erix
  1. WHERE id=23948 AND kategoria=23434


?
Manioo
ok działa biggrin.gif , a jak żeby wyświetlić nazwę tej kategorii np. Wyświetlana kategoria:


nazwa kategorii zapisana jest w innej tabeli pod nazwą kategorie tak jak podalem w poprzednim tekscie

Oto w tej chwili działający skrypt:

Kod
<?php
$aktualne = mysql_fetch_assoc(mysql_query("SELECT * FROM linki WHERE  id='$zo_d1[id]' and kategoria='$zo_d1[kategoria]' "));
$poprzednie  = mysql_fetch_assoc(mysql_query("SELECT * FROM linki WHERE id<'$zo_d1[id]' and kategoria='$zo_d1[kategoria]' ORDER BY id DESC LIMIT 1"));
$nastepne = mysql_fetch_assoc(mysql_query("SELECT * FROM linki WHERE id>'$zo_d1[id]' and kategoria='$zo_d1[kategoria]' ORDER BY id ASC LIMIT 1"));
if ($poprzednie) {
     echo "<a href=\"$adres/z/$poprzednie[id]/$gl_tablink/\"><font  color=\"#FF4000\"><< POPRZEDNIE</font></a>  </center>";
}
?>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="javascript:history.back();" onclick><font size="2" color="lime"><b>POWRÓT</b></font></a>
<?php
if ($nastepne) {
     echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"$adres/z/$nastepne[id]/$gl_tablink/\"><font  color=\"#FF4000\">NASTĘPNE >></font></a>  </center>";
}

?>
erix
  1. JOIN

;]
Manioo
Czytałem na temat JOIN w google lecz nadal nie wiem jak tego użyć by wywołać nazwę kategorii w dowolnym miejscu (nic mi nie wychodzi). Proszę o krótki kodzik.



Dla podpowiedzi: gdy podaje poniższe dane wyświetla się numer kategorii zamiast nazwa. Teraz należy polaczyc sie z druga tabela o nazwie KATEGORIE gdzie mamy ID i NAZWĘ. No i należy pobrać tę nazwę z ID czyli $zo_d1[kategoria] - pod tą zmienną jest ID kategorii. Lecz nazwa tej kategorii jest w innej tabli o nazwie KATEGORIEE gdzie jest ID i NAZWA

Motam się nie mogę sobie poradzić. PRoszę o pomoc jak wyświetlić tę nazwę bo nie mogę sobie poradzić z tym JOIN.

Kod
<?php echo"$zo_d1[kategoria]"; ?>




PS. Zadanie powinno być dla doświadczonych z sqlem proste, więc zadam trudniejsze jak coś. Wyświetlić kategorię która jest obecnie wyświetlana lecz w polu wybieralnym. Gdzie w każdym momencie można wybrać inną kategorię.
erix
Cytat
PS. Zadanie powinno być dla doświadczonych z sqlem proste, więc zadam trudniejsze jak coś. Wyświetlić kategorię która jest obecnie wyświetlana lecz w polu wybieralnym. Gdzie w każdym momencie można wybrać inną kategorię.

Zaliczenie, czy jak?

http://www.google.com/search?hl=pl&cli...=Szukaj&lr=

...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.