Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP]Problem z przyjaznymi linkami
Forum PHP.pl > Forum > Przedszkole
airgucio
Witajcie drodzy koledzy, jako że raczkuje w temacie php mam problem ,z którym nie wiem jak sobie poradzić.

Aktualnie moje linki wyglądają następująco www.jakasstrona.pl/oferta/490.html ,a chciałbym aby wyglądały www.jakasstrona.pl/oferta/490/tytul-strony.html

Stworzyłem w bazie danych odpowiedni wiersz o nazwie SLUG w tabeli offer ,który przetwarza mi tytuł z polskimi znakami i spacjami na przyjazny link czyli np: kula z zębem zamienia na :kula-z-zebem.

Mój plik index wygląda tak:

  1. <?php
  2.  
  3. if(!empty($_GET['oferta']) && is_numeric($_GET['oferta']) ) { include('include/podstrona_oferta.php'); } else {
  4. if(!empty($_GET['page']) ) { include('include/podstrona_text.php'); } else {
  5.  
  6. //Strona główna
  7. include('include/podstrona_main_new.php');
  8. }}
  9. ?>



Plik odpowiedzialny za wyświetlanie oferty czyli podstrona_oferta.php wygląda tak:




  1.  
  2. <?php include('include/bannerpage.php'); ?>
  3. <?php include_once ('link.php');?>
  4. <?php $oferta=mysql_fetch_array(mysql_query("SELECT * FROM offer WHERE AKTYWNE = 1 and ID ='".$_GET['oferta']."'"));?>
  5. <div id="content">
  6. <section class="breadcrum-sec">
  7. <div class="container">
  8. <ol class="breadcrumb">
  9. <li>
  10. <a href="/index.php">Strona główna</a>
  11. </li>
  12. <li class="active">
  13. <?php echo ($oferta['TITLE']);?>
  14. </li>
  15. </ol>
  16. </div>
  17. </section>
  18. <section class="who_wrap">
  19. <div class="container">
  20. <div class="row">
  21. <div class="col-xs-12 col-sm-12">
  22. <ul id="lang">
  23.  
  24. <?php
  25. if(stristr($oferta['TEXT'], '<!--more-->'))
  26. $oferta['TEXT'] = preg_replace('|^(.*)<!--more-->.*$|Usmi','$1',$oferta['TEXT']);
  27. //GALERIA
  28. if($oferta['START3']!=0)
  29. {
  30. $offer=mysql_fetch_array(mysql_query("SELECT * FROM offer WHERE AKTYWNE = 1 and ID='".$_GET['oferta']."'"));
  31. echo('');
  32. echo(' <p>'.$oferta['TEXT'].'<br/><br></p>');
  33. $fotosy=mysql_query("SELECT * FROM offer_foto WHERE OFERTA='".$_GET['oferta']."' ORDER BY POS ASC");
  34. while($foto=mysql_fetch_array($fotosy)){
  35. echo('<a href="'.$wwwlink.'/galerie/'.$foto['SRC'].'" rel="imageOferta" ><img src="'.$wwwlink.'/galerie/miniaturki/'.$foto['SRC'].'" alt="galeria" style="margin:5px;width:150px;" ></a>');
  36. } }
  37. //OFERTA PROMOCYJNA
  38. if($oferta['START3']!=1 ){
  39. $offer=mysql_fetch_array(mysql_query("SELECT * FROM offer WHERE AKTYWNE = 1 and ID='".$_GET['oferta']."'"));
  40.  
  41. echo ('<p>'.$oferta['TEXT'].'</p>');
  42. echo ('<br><br>Galeria produktu:<br><hr>');
  43. $fotosy=mysql_query("SELECT * FROM offer_foto WHERE OFERTA='".$_GET['oferta']."' ORDER BY POS ASC");
  44. while($foto=mysql_fetch_array($fotosy)){
  45. echo('<a href="'.$wwwlink.'/galerie/'.$foto['SRC'].'" rel="imageOferta" title="galeria obiektu"><img src="'.$wwwlink.'/galerie/miniaturki/'.$foto['SRC'].'" alt="galeria oferty-'.$foto['ID'].'" title="galeria oferty-'.$foto['ID'].'" style="margin:5px;width:75px;" ></a>');
  46. }
  47.  
  48.  
  49. }
  50. ?>
  51. <br> </div>
  52. </div>
  53. </div>
  54. </div>



I teraz jeśli zmienie ID na SLUG czyli:

  1. $oferta=mysql_fetch_array(mysql_query("SELECT * FROM offer WHERE AKTYWNE = 1 and ID ='".$_GET['oferta']."'"));
  2.  
  3. na
  4.  
  5. $oferta=mysql_fetch_array(mysql_query("SELECT * FROM offer WHERE AKTYWNE = 1 and SLUG ='".$_GET['oferta']."'"));


Wyświetla mi się tekst tej strony , ale nie mam zdjęć, i tutaj mam problem. Linijka odpowiedzialna za zdjęcia to:

  1. $fotosy=mysql_query("SELECT * FROM offer_foto WHERE OFERTA='".$_GET['oferta']."' ORDER BY POS ASC");
  2. while($foto=mysql_fetch_array($fotosy)){
  3. echo('<a href="'.$wwwlink.'/galerie/'.$foto['SRC'].'" rel="imageOferta" ><img src="'.$wwwlink.'/galerie/miniaturki/'.$foto['SRC'].'" alt="galeria l" style="margin:5px;width:150px;" ></a>');


Ogólnie tabela offer_foto składa się z: ze swojego ID, numeru oferty ( czyli OFERTA) i SRC czyli scieżki . - sprawdza które oferty maja taką samą cyfrę i wyświetlają ją w ofercie.

Nie wiem co zmienić w tym fragmencie kodu odpowiedzialnym za zdjęcia aby się pokazywały, ewentualnie co dodać
  1. <?php $oferta=mysql_fetch_array(mysql_query("SELECT * FROM offer WHERE AKTYWNE = 1 and ID ='".$_GET['oferta']."'"));?>
.

Proszę o pomoc
CuteOne
Źle do tego podchodzisz smile.gif
1. Robisz zapytania w pętli
2. Zawsze o ile to możliwe przeszukuj bazę po ID nie żadnym SLUGu
3. Staraj się wrzucać sformatowany kod, bo ten słabo się czyta

Pokaż struktury tabel, które wykorzystujesz na tej stronie, to ogarniemy to jednym zapytaniem smile.gif
airgucio
Tak to wygląda smile.gif


DESCRIBE offer_foto;

Field Type Null Key Default Extra
ID int(3) NO PRI NULL auto_increment
OFERTA nt(3) NO NULL
SRC varchar(255) NO NULL
POS int(3) NO 999



DESCRIBE offer:


Field Type Null Key Deafult Extra
ID int(255) NO PRI NULL auto_increment
MAIN_FOTO int(4) NO NULL
PROMUJ tinyint(1) NO NULL
START tinyint(1) NO NULL
START1 tinyint(1) NO NULL
START2 tinyint(1) NO NULL
START3 tinyint(1) NO NULL
START4 tinyint(1) NO NULL
TITLE varchar(50) NO NULL
SLUG varchar(255) NO NULL
TITLESEO varchar(300) NO NULL
DESCRIPTION varchar(300) NO NULL
TAGS varchar(300) NO NULL
TEXT text NO NULL
KAT varchar(50) NO NULL
CuteOne
Jeszcze kilka uwag wink.gif
1. Staraj się unikać takiego kodu mysql_fetch_array(mysql_query()), bo jeżeli mysql_query() nic nie zwróci (zwróci FALSE), php rzuci błędem
2. mysql_* jest już przestarzałe pomyśl nad przejściem na mysqli_* lub PDO
3. Każdą zmienną pochodzącą od użytkownika escape'uj np. za pomocą mysql_real_escape_string()

  1. <?php
  2. $query = mysql_query("SELECT * FROM offer o LEFT JOIN offer_foto of ON (of.oferta = o.id) WHERE o.id = $id");
  3.  
  4. $tmp = [];
  5. while($row = mysql_fetch_assoc($query)) {
  6. if (!array_key_exists($row['ID'], $tmp)) {
  7. $tmp[$row['ID']] = [
  8. 'TITLE' => $row['TITLE'],
  9. 'TEXT' => $row['TEXT'],
  10. 'START3' => $row['START3'],
  11. 'IMAGES' => []
  12. ];
  13. }
  14.  
  15. $tmp[$row['ID']]['IMAGES'][] = [
  16. 'ID' => $row['ID'],
  17. 'SRC' => $row['SRC']
  18. ];
  19. }
  20.  
  21. ?>
  22. ///....
  23.  
  24. <?php foreach ($tmp as $id => $data) : ?>
  25. <?php if ($data['START3'] != 1) : ?>
  26. <p><?= $data['TEXT'];?><br/><br></p></div>
  27. <?php endif; ?>
  28.  
  29. <?php foreach ($data['IMAGES'] as $image) : ?>
  30. <a href="<?= $image['SRC']; ?>"></a>
  31. <?php endforeach; ?>
  32. <?php endforeach; ?>


W zapytaniu podmień * na nazwy kolumn , ponieważ kolumnę ID masz w dwóch tabelach, i mogą pojawić się problemy - sprawdź na googlu jak tworzyć aliasy nazw kolumn smile.gif
airgucio
Dzięki zaraz zabieram się za lekturę i poprawki smile.gif
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.