Comunitatea PHP Romania
MightyDeals

Prima pagină PHP General PHP Incepători Intrebare URL

Intrebare URL

Secţiune dedicată începatorilor.

Mesaj Mie Aug 08, 2012 9:46 am
dlsmoker Junior Member

Mesaje: 41
Salutare, vin si eu cu o intrebare, poate pentru unii banala.
Am in baza de date 10 articole si doua file-uri .php.
Primu se conecteaza si extrage articolele, al doile le vizualizeaza. Trimit prin url un ID care identifica fiecare artico in parte, si file-ul posts.php ia acel ID si extrage din baza de date respectivu articol, deci url este asa:
www.root.com/posts?id=x
x merge de la 1 la n articole cate am eu in baza de date.
Intrebarea mea aste: este gresit in modul asta?
Peste tot uide ma uit, metoda asta nu exista ci este in felul urmator:
www.root.com/posts/titlu-articol/
Cum pot face si eu la fel? Sa inteleg ca fiecare articol necesita un nou file?
Daca am 1000 de articole, trebuie sa scriu 1000 de alte fisiere? Este un mod pentru a face automat?
Si inca ceva, daca am un articol care are 2 sau mai multe pagini, cum pot face sa fie gen: www.root.com/posts/titlu-articol/pageX
unde x e numaru paginii din acelasi articol.
Stiu ca e lung si poate e usor, dar ma chinui de mult sa fac asa. Mentionez ca folosesc PDO daca are vreo importanta.
Multumesc

Mesaj Mie Aug 08, 2012 9:52 am
micul-programator.ro Average Member

Mesaje: 144
Localitate: http://micul-programator.ro

dlsmoker scrie:
Salutare, vin si eu cu o intrebare, poate pentru unii banala.
Am in baza de date 10 articole si doua file-uri .php.
Primu se conecteaza si extrage articolele, al doile le vizualizeaza. Trimit prin url un ID care identifica fiecare artico in parte, si file-ul posts.php ia acel ID si extrage din baza de date respectivu articol, deci url este asa:
www.root.com/posts?id=x
x merge de la 1 la n articole cate am eu in baza de date.
Intrebarea mea aste: este gresit in modul asta?
Peste tot uide ma uit, metoda asta nu exista ci este in felul urmator:
www.root.com/posts/titlu-articol/
Cum pot face si eu la fel? Sa inteleg ca fiecare articol necesita un nou file?
Daca am 1000 de articole, trebuie sa scriu 1000 de alte fisiere? Este un mod pentru a face automat?
Si inca ceva, daca am un articol care are 2 sau mai multe pagini, cum pot face sa fie gen: www.root.com/posts/titlu-articol/pageX
unde x e numaru paginii din acelasi articol.
Stiu ca e lung si poate e usor, dar ma chinui de mult sa fac asa. Mentionez ca folosesc PDO daca are vreo importanta.
Multumesc


uite aici http://www.tutorialeonline.net/ro/article/mod-rewrite
http://www.tutorialeonline.net/ro/artic ... rl-rewrite

Mesaj Mie Aug 08, 2012 9:59 am
quadmachine Avatar utilizator
Senior Member

Mesaje: 776
Localitate: Ploiesti

Trebuie sa iti creezi un fisiere .httaccess si pui urmatoarele in el.

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule post/(.*).html$ posts.php?id=$1 [NC,L]
RewriteRule post/(.*)/page/(.*) posts.php?id=$1&page=$2 [NC,L]



In prima pagina unde afisezi posturile


print '<a href="post/'.$row['id'].'.html">'.$row['name'].'</a>';


Poti citi si cate ceva despre httaccess aici: http://www.marplo.net/php-mysql/mod_rewrite.html

Si inca ceva de ce m-am lovit eu cu rescrierea url-ului,daca nu ai cale absoluta nu iti afiseaza imaginile sau css-ul.

http://www.tutorialeonline.net/ro/artic ... rl-rewrite
Nu confundati femeia de serviciu cu profesoara de Limba si Literatura Romana.

Mesaj Mie Aug 08, 2012 11:27 am
dlsmoker Junior Member

Mesaje: 41
Dar merge si in local?
Din pacate am un host gratis petntru teste si nu merge httaccess

Mesaj Mie Aug 08, 2012 11:58 am
quadmachine Avatar utilizator
Senior Member

Mesaje: 776
Localitate: Ploiesti

Poti testa si pe un server local ,gen wamp dar trebuie activat modulul rewrite.
Nu confundati femeia de serviciu cu profesoara de Limba si Literatura Romana.

Mesaj Mie Aug 08, 2012 1:08 pm
dlsmoker Junior Member

Mesaje: 41
Din pacate tot nu reusesc sa-l fac sa mearga.

index.php

require('connect.php');
   
   $stmt = $conn->prepare(" SELECT id, title, LEFT(body, 200) AS info, body, added_on FROM posts ORDER BY added_on DESC");
   $stmt->execute();
   
   while( $row = $stmt->fetch() ) {
   
      $title = $row['title'];
      $info = $row['info'];
      $id = $row['id'];
      
      echo "<a href='news.php?postid=$id'>" . $title . "</a> <i>posted on $posted_on</i><br />";

      echo $info;
      
   }


news.php:
 require('connect.php');
   
   $postid = $_GET['postid'];


      $stmt = $conn->prepare(" SELECT id, title, body FROM posts WHERE id = :postid");
      $stmt->bindValue(':postid', $postid);
      $stmt->execute();
      $r = $stmt->rowCount();

   
         while( $row = $stmt->fetch() ) {
         
            $title = $row['title'];
            $body = $row['body'];
            
            echo "<strong>" . $title . "</strong><br />";
            echo $body;
            
         }
      }


.htaccess:
Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule news/(.*).php news.php?id=$1 [NC,L]
RewriteRule news/(.*)/page/(.*) news.php?id=$1&page=$2 [NC,L]



Cand dau click pe un link din index.php primesc 404.
htaccess merge doar ca ma redirectioneaza la o pagina care nu exista..
Precizez ca e doar un test si ma intereseaza rezultatu, stiu ca sunt greseli in cod dar nu asta e important, va rog sa ma ajutati

Mesaj Mie Aug 08, 2012 2:16 pm
quadmachine Avatar utilizator
Senior Member

Mesaje: 776
Localitate: Ploiesti

 echo '<a href="news/'.$id.'">' . $title . '</a> <i>posted on $posted_on</i><br />';
Nu confundati femeia de serviciu cu profesoara de Limba si Literatura Romana.

Mesaj Mie Aug 08, 2012 2:40 pm
dlsmoker Junior Member

Mesaje: 41
tot nimic :( 404 page not found.
Daca fac cum spui tu, in news.php nu mai am nicio referinta care sa spuna ce articol sa vizualizeze deoarece agel $_GET[] nu returneaza nimic..

Mesaj Mie Aug 08, 2012 2:52 pm
mihaitha Avatar utilizator
Senior Member

Mesaje: 2346
Localitate: Sibiu
Nu lua codul de-a gata si adapteaza-l la cerintele tale.

Ai
RewriteRule news/(.*).php news.php?id=$1 [NC,L]
RewriteRule news/(.*)/page/(.*) news.php?id=$1&page=$2 [NC,L]


Drept urmare link-urile tale trebuie sa arate asa:
example.com/news/blabla.php
sau
example/com/news/blabla/page/1

Deci generarea link-urilor trebuie sa o faci asa:
 echo '<a href="news/'.$id.'.php">' . $title . '</a> <i>posted on $posted_on</i><br />';


Clar?
Arguing with retards is like playing chess with a pigeon: no matter how good you are at chess, the pigeon is just going to knock over the pieces, crap on the board and strut around like it's victorious.

Mesaj Mie Aug 08, 2012 3:11 pm
Reventon Average Member

Mesaje: 68
www.root.com/posts.php?id=x
in modul asta, accesezi direct fisierul tau posts.php si ii transmiti o variabila get cu numele 'id'


www.root.com/posts/titlu-articol/
pentru a putea folosi acest link, trebuie sa faci rewrite rule precum a zis quadmachine. dar nu doar atat.
trebuie sa ai un framework MVC (model view controller)
in link, posts reprezinta controllerul, iar titlu articol va fi o variabila trimisa metodei default.

cred ca te-am bagat in ceata...
e cam dificil sa iti explic aici ce inseamna un MVC, mie mi-a trebuit 2 saptamani sa invat bine cum se foloseste.

este vorba de OOP (programare orientata pe obiecte).
se lucreaza cu clase si obiecte.

poti cauta pe google, gasesti multe tutoriale.

Mesaj Mie Aug 08, 2012 3:58 pm
quadmachine Avatar utilizator
Senior Member

Mesaje: 776
Localitate: Ploiesti

tot nimic Sad 404 page not found.


Pune cursorul deasupra link-ului sau da-i view source si vezi daca dupa news/ afiseaza un numar,in caz ca nu afiseaza nimic problema nu mai este la url rewrite ci la interogare :).

PS: Normal eu adaug si un mysql_error() ,tu poti adauga errorInfo() sa vezi daca iti returneaza ceva acea interogare.
Nu confundati femeia de serviciu cu profesoara de Limba si Literatura Romana.

Mesaj Mie Aug 08, 2012 5:09 pm
dlsmoker Junior Member

Mesaje: 41
Deci cand sunt cu cursoru deasupra sau dau click ma duce la: www.root.com/news/x.php (x = id-ul articolui) si daca dau click imi da 404, care e ceva normal avand in vedere ca dupa cum arata url-ul ar trebuii sa mai fie un folder in root.

Am scos o linie din htaccess si a ramas asa
Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule news/(.*).php news.php?postid=$1 [NC,L]


Deci daca am inteles bine, orice urmeaza dupa nuews.php?postid=x va fi inlocuit cu simplu news/xxxx.php, dar daca eu nu trimit prin url cu $_GET acel id, news.php nu stie la care id sa se refere, de aia am lasat linia
echo "<a href='news.php?postid=$id'>" . $title . "</a>";

asa si nu cum a spus colegul mihaita pentru ca prin url nu mai trece nimic daca e simplu
echo "<a href='news/$id.php'>" . $title . "</a>";

Am incercat si asa dar aceiasi eroare primesc, 404.
Stiu sigur ca nu e nevoie de MCV pentru ca cineva mi-a aratat mai de mult un exemplu asemanator folosind doar htaccess.

In final am asa:
index.php ( care imi afiseaza titlu fiecarui articol si este un link )
$stmt = $conn->prepare(" SELECT id, title, LEFT(body, 200) AS info, body, added_on FROM posts ORDER BY added_on DESC");
   $stmt->execute();
   
   while( $row = $stmt->fetch() ) {
   
      $title = $row['title'];
      $id = $row['id'];
      
      echo "<a href='news.php?postid=$id'>" . $title . "</a> <i>posted on $posted_on</i><br />";

      
   }


si news.php ( care imi afiseaza articolu selectionat/clickat )
$postid = $_GET['postid'];


      $stmt = $conn->prepare(" SELECT id, title, body, added_on FROM posts WHERE id = :postid");
      $stmt->bindValue(':postid', $postid);
      $stmt->execute();
      $r = $stmt->rowCount();

      if ( $r === 1 ) {
         while( $row = $stmt->fetch() ) {
         
            $title = $row['title'];
            $body = $row['body'];
            
            echo "<strong>" . $title . "</strong><br />";
            echo $body;
            
         }
      
         }

Imi cer scuze daca tot insist, dar daca m-ati putea ajuta v-asi fi recunoscator.

Mesaj Mie Aug 08, 2012 7:39 pm
quadmachine Avatar utilizator
Senior Member

Mesaje: 776
Localitate: Ploiesti

echo "<a href='news/$id.php'>" . $title . "</a>";


Este fals ceea ce ai scris, CORECT: news/'.$id.'.Daca vrei asa trebuie modificat in .httacces dar eu zic ca ceea ce ti-am dat este mai ok.

Pot sa pun pariu cu tine ca nu ai citit nici macar 10% din ceea ce ti-am dat noi,asa eram si eu la inceput cand vedeam paragrafe de nu se mai terminau "de ce sa citesc,lasa ca gasesc in alta parte mai putin".


Incearca asa si vezi ce afiseaza.

$stmt = $conn->prepare("SELECT id, title, LEFT(body, 200) AS info, body, added_on FROM posts ORDER BY added_on DESC");

//Vezi ce eroare apare.
if (!$stmt) {
    echo "\nPDO::errorInfo():\n";
    print_r($dbh->errorInfo());
    die();
}

   $stmt->execute();
   
   while( $row = $stmt->fetch() ) {
   
      $title = $row['title'];
      $id = $row['id'];
     
      echo '<a href="news/'.$id.'">'.$title.'</a><i>posted on '.$posted_on.'</i><br />';

     
   }
Nu confundati femeia de serviciu cu profesoara de Limba si Literatura Romana.

Mesaj Mie Aug 08, 2012 10:41 pm
dlsmoker Junior Member

Mesaje: 41
Pai nu apare nicio eroare, daca dau click ma duce la localhost/news/x si atat.
Credema ca am citit tot ce ati scris de multe ori pentru ca vreu sa-i dau de cap dar nu reusesc. Acu imi dau seama ca htaccess nu-si face treaba pentru ca odata ce apas pe un titlu, ar trebuii sa ma duca la o pagina localhost/news/x.php in schimb .php nu imi apare.

Mesaj Mie Aug 08, 2012 10:49 pm
quadmachine Avatar utilizator
Senior Member

Mesaje: 776
Localitate: Ploiesti

RewriteRule news/(.*).php$ news.php?postid=$1 [NC,L]


Daca vrei sa te duca pe pagina respectiva cu x.php.
Nu confundati femeia de serviciu cu profesoara de Limba si Literatura Romana.

Mesaj Dum Apr 14, 2013 12:55 am
Google Bot New Member

Mesaje: 1
Următorul

Înapoi la PHP Incepători

Copyright © 2001-2013 PHP Romania Gazduire web | Haine online | Gazduire web | Campanii SMS | Gazduire Claus Web | Inregistrare Domenii | Anunturi | Jocuri cu bile
Furnizat de phpBB® Forum Software © phpBB Group
Translation/Traducere: phpBB România
Powered by Simplis