Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL][PHP]Problem z przyjaznymi linkami, Linki po Id i title - problem
airgucio
post 16.05.2016, 09:18:26
Post #1





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 27.06.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
CuteOne
post 16.05.2016, 14:24:05
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


Ź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
Go to the top of the page
+Quote Post
airgucio
post 16.05.2016, 15:58:38
Post #3





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 27.06.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
CuteOne
post 16.05.2016, 18:25:16
Post #4





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


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

Ten post edytował CuteOne 16.05.2016, 18:25:49
Go to the top of the page
+Quote Post
airgucio
post 17.05.2016, 07:19:12
Post #5





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 27.06.2013

Ostrzeżenie: (0%)
-----


Dzięki zaraz zabieram się za lekturę i poprawki smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.04.2024 - 15:09