milanello72 Posted January 2, 2013 Share Posted January 2, 2013 (edited) Hello! Please, excuse me because I will put a big code here, but I hope that you will understand me! I want to make a pagination and I addapt links for the files. ****************** If I want to transform a link like index.php?page=2&pagina=teams&id_team=1&numele=Juventus in a link like "/".$pagina."/".$id_team."/".$numele.".html"; So without page in link ****************************** In .htaccess I WILL HAVE RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/([a-zA-Z0-9.\s]+)/?.html$ index.php?pagina=$1&id_team=$2&numele=$3 ***************************** My file with the pagination is teams.php: $sql29="select * from pozesq where id_team='$id_team'"; $resursa29=mysql_query($sql29); $numar = mysql_num_rows($resursa29); $page = 1; //if no page var is given, default to 1. $adjacents = 3; $limit = 20; //how many items to show per page if(isset($_GET['page'])) { $page = $_GET['page']; $lastpage = ceil($numar/$limit); $start = ($page - 1) * $limit; } //first item to display on this page else { $start = 0; } $sql1="select * from pozesq where id_team='$id_team' order by id_pozasq asc LIMIT $start, $limit"; $resursa1=mysql_query($sql1); $numar=mysql_num_rows($resursa1); ...... show photos ...... $prev = $page - 1; //previous page is page - 1 $next = $page + 1; //next page is page + 1 $lastpage = ceil($total_pages/$limit); //lastpage is = total pages / items per page, rounded up. $lpm1 = $lastpage - 1; $self = $_SERVER['PHP_SELF']; $targetpage = $self; $path='pagina=teams&id_team='.$id_team.'&numele='.$numele.''; include('balariipagination.php'); ********************************* And the file balariipagination.php is $pagination = ""; if($lastpage > 1) { $pagination .= "<div class=\"pagination\">"; //previous button if ($page > 1) $pagination.= "<a href=\"$targetpage?page=$prev&".$path."\">« previous</a>"; else $pagination.= "<span class=\"disabled\">« previous</span>"; //pages if ($lastpage < 7 + ($adjacents * 2)) //not enough pages to bother breaking it up { for ($counter = 1; $counter <= $lastpage; $counter++) { if ($counter == $page) $pagination.= "<span class=\"current\">$counter</span>"; else $pagination.= "<a href=\"$targetpage?page=$counter&".$path."\">$counter</a>"; } } ......... ......... ......... etc ****************************** ********************************** I repeat that i want to obtain a link like "./".$pagina."/".$id_team."/".$numele.".html"; How could i obtain that? 1) in file teams.php i will change $path in ??? $path="/".$pagina."/".$id_squadra."/".$numele.".html"; ******** 2) Must i change and $self = $_SERVER['PHP_SELF']; in teams.php in ....? $_SERVER['REQUEST_URI'] ********** 3) in this situation how it will change the file balariipagination.php ??? Tell me for exemple how will I change...? href=\"$targetpage?page=$prev&".$path."\" ?? thank you very much and i hope that you will understand my message! Edited January 2, 2013 by milanello72 Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/ Share on other sites More sharing options...
requinix Posted January 2, 2013 Share Posted January 2, 2013 (edited) The RewriteRule has a /? that doesn't belong (otherwise "/teams/1/Juventus/.html" would be valid). It should also have the QSA flag which I'll explain in a second, and most likely L too. RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/([a-zA-Z0-9.\s]+).html$ index.php?pagina=$1&id_team=$2&numele=$3 [L,QSA] I didn't look at the pagination code because it doesn't sound like you have a problem with it per se, just the links it creates. 1. That $path looks correct... mostly. 2. You should construct the URL yourself from scratch - basically, use $path. You should urlencode() the parts to protect yourself against malicious URLs and XSS. $path = "/" . urlencode($pagina) . "/" . urlencode($id_squadra) . "/" . urlencode($numele) . ".html"; $targetpage = $path; // or you could just use $path 3. Since $targetpage contains the $path (which has the $pagina, $id_squadra, and $numele) all that's left to add is the page number. "href=\"$targetpage?page=$prev\"" As for QSA: The substitution URL (the index.php one) includes a query string; when you do that then mod_rewrite will assume that's all you want and will discard anything else in the original URL. That means the ?page=$prev would be lost. The QSA ("query string append") tells mod_rewrite to actually keep what was there before, so the URL rewriting will go from /teams/1/Juventus.html?page=2 to /index.php?pagina=1&id_team=1&numele=Juventus&page=2 Edited January 2, 2013 by requinix Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/#findComment-1402856 Share on other sites More sharing options...
milanello72 Posted January 2, 2013 Author Share Posted January 2, 2013 thank u very much for your answer, I have put your suggestions, but I will obtain a link like this: http://127.0.0.1/calcioitalia/teams/1/Juventus%20F.C.%20Torino.html?page=2&/teams/1/Juventus+F.C.+Torino.html So I think that my problem is: "href=\"$targetpage?page=$prev\"" how could I solve this problem? thank u again! Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/#findComment-1402861 Share on other sites More sharing options...
milanello72 Posted January 2, 2013 Author Share Posted January 2, 2013 (edited) Excuse me, I have this path: http://127.0.0.1/calcioitalia/teams/1/Juventus%20F.C.%20Torino.html?page=2 but in the page=2 I have the content of the page 1, and in the page 3 I have the content of the same page 1. So I need pagina, id_team and numele to change the page..... what can I do? Thank u! Edited January 2, 2013 by milanello72 Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/#findComment-1402867 Share on other sites More sharing options...
requinix Posted January 2, 2013 Share Posted January 2, 2013 What's your full code? The stuff you showed in your first post looks right... Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/#findComment-1402871 Share on other sites More sharing options...
milanello72 Posted January 3, 2013 Author Share Posted January 3, 2013 (edited) It WORKS! I have some conditions: 1) If I use in balariipagination.php $path=$path='pagina='.$pagina.'&id_squadra='.$id_squadra.'&numele='.$numele.''; $pagination.= "<a href=\"$targetpage?page=$prev&".$path."\">« previous</a>"; 2) $self = $_SERVER['PHP_SELF']; $targetpage = $self; But in this situation I will have this link: calcioitalia/teams/2/A.C. Milan.php?page=2&pagina=teams&id_squadra=2&numele=A.C.%20Milan So I will have the path with php. (without .html) ********************************************************************** ********************************************************************** I would like to obtain a path without &id_squadra=2&numele=A.C.%20Milan and without php (so with .html) and I made: 1) $pagination.= "<a href=\"$targetpage?page=$prev\">« previous</a>"; so without $path 2) $self = $_SERVER['REQUEST_URI']; $targetpage = $self; In this situation i have a path calcioitalia/teams/2/A.C. Milan.html?page=2 but in page=2 I have the content of the page 1 and isset($_GET['page']) NOT WORKING. So what can I do to set $_GET['page'] ??? This is the most important thing! thank u again! Edited January 3, 2013 by milanello72 Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/#findComment-1402953 Share on other sites More sharing options...
milanello72 Posted January 3, 2013 Author Share Posted January 3, 2013 (edited) It works %50 I have put: $pagination.= "<a href=\"$targetpage?page=$next\">« previous</a>"; And $self = $_SERVER['REQUEST_URI']; $targetpage = $self; But... i will go here calcioitalia/teams/1/Juventus F.C. Torino.html and after that I will enter in page=2 and it works (I will have calcioitalia/teams/1/Juventus F.C.Torino.html?page=2 ) and if I will go in page=3 I will obtain this link calcioitalia/teams/1/Juventus F.C. Torino.html?page=2?page=3 with the content of page=2 And it was set this $_GET['page']=2?page=3 so this is the problem: $pagination.= "<a href=\"$targetpage?page=$next\">« previous</a>"; how could i solve this problem? Edited January 3, 2013 by milanello72 Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/#findComment-1402990 Share on other sites More sharing options...
requinix Posted January 3, 2013 Share Posted January 3, 2013 You seem to have completely missed the part where I showed you how to construct $path and $targetpage. Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/#findComment-1403036 Share on other sites More sharing options...
milanello72 Posted January 3, 2013 Author Share Posted January 3, 2013 (edited) Hello, Requinix! Please excuse me because I did not read your message carefully... IT WORKS!!! I used your script and IT WORKS! it is fault of my english! And maybe I don't have more experience in PHP! I have a question for u,: if I use urlencode how to decode from url?? (I want to use and urlencode in my script) Thank u very much! Edited January 3, 2013 by milanello72 Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/#findComment-1403038 Share on other sites More sharing options...
requinix Posted January 3, 2013 Share Posted January 3, 2013 You don't need to decode it, that happens automatically. Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/#findComment-1403042 Share on other sites More sharing options...
milanello72 Posted January 3, 2013 Author Share Posted January 3, 2013 I have some problems: 1) If I use in horizontalmenu.php href="/calcioitalia/'.urlencode($pagina).'/'.urlencode($id_squadra).'/'.urlencode($numele).'.html"> and I try to load calcioitalia/teams/2/A.C.+Milan.html, doesn't work and I will receive "The requested URL /calcioitalia/teams/2/A.C.+Milan.php was not found on this server." Why does not it work at me? ******************************* 2) if i use href="/calcioitalia/'.rawurlencode($pagina).'/'.rawurlencode($id_squadra).'/'.rawurlencode($numele).'.html" It works! ****************************** 3) I would like to obtain a link like this calcioitalia/teams/2/A.C.-Milan.html How could I obtain this link? *********************************** Thank u! Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/#findComment-1403055 Share on other sites More sharing options...
requinix Posted January 3, 2013 Share Posted January 3, 2013 For #1 then just refer to #2. rawurlencode() it shall be. If you want to replace spaces with hyphens then replace spaces with hyphens. Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/#findComment-1403074 Share on other sites More sharing options...
milanello72 Posted January 3, 2013 Author Share Posted January 3, 2013 (edited) Hello, Requinix! I found this function: function seoUrl($string) { //Strip any unwanted characters $string = preg_replace("/[^A-Za-z0-9_\s-]/", "", $string); //Clean multiple dashes or whitespaces $string = preg_replace("/[\s-]+/", " ", $string); //Convert whitespaces and underscore to dash $string = preg_replace("/[\s_]/", "-", $string); return $string; } and in horizontalmenu.php I will have: href="/calcioitalia/'.seoUrl($pagina).'/'.seoUrl($id_squadra).'/'.seoUrl($numele).'.html" But how will display teams.php in index.php?? I use if (isset($_GET['pagina']) and $_GET['pagina'] == 'teams' and isset($_GET['id_squadra']) and isset($_GET['numele'])) { include('./includes/teams.php'); } but doesn't work because in menuhorizontal i used seoUrl. I have this message: The requested URL /calcioitalia/teams/2/AC-Milan.php was not found on this server. How could I solve this problem? Edited January 3, 2013 by milanello72 Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/#findComment-1403081 Share on other sites More sharing options...
requinix Posted January 3, 2013 Share Posted January 3, 2013 But how will display teams.php in index.php?? I use if (isset($_GET['pagina']) and $_GET['pagina'] == 'teams' and isset($_GET['id_squadra']) and isset($_GET['numele'])) { include('./includes/teams.php'); } but doesn't work because in menuhorizontal i used seoUrl. I have no idea what you're talking about. I have this message: The requested URL /calcioitalia/teams/2/AC-Milan.php was not found on this server. The file extension is wrong. Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/#findComment-1403088 Share on other sites More sharing options...
milanello72 Posted January 4, 2013 Author Share Posted January 4, 2013 (edited) i think that the problem is that I must to decode $pagina, $id_squadra, $numele in index.php, because in horizontalmenu.php I have href="/calcioitalia/'.seoUrl($pagina).'/'.seoUrl($id_squadra).'/'.seoUrl($numele).'.html" and in index.php, and teams.php I need the originally $pagina, $id_squadra, $numele So how could I decode? Edited January 4, 2013 by milanello72 Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/#findComment-1403166 Share on other sites More sharing options...
milanello72 Posted January 4, 2013 Author Share Posted January 4, 2013 I tried to add "AllowEncodedSlashes On" in the .htaccess but it didn't work. Any idea? Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/#findComment-1403200 Share on other sites More sharing options...
requinix Posted January 4, 2013 Share Posted January 4, 2013 You don't have to "decode" anything. The RewriteRule will turn those things into $_GET values for you but that'll only happen if you use the right URL in your links. Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/#findComment-1403230 Share on other sites More sharing options...
milanello72 Posted January 4, 2013 Author Share Posted January 4, 2013 (edited) OK! I will present the problem... My link is with $numele=$row['numele'] href="/calcioitalia/'.$pagina.'/'.$id_squadra.'/'.$numele.'.html" and in htacces i have Options +FollowSymlinks RewriteEngine on php_flag session.auto_start 1 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/([a-zA-Z0-9.\s]+)/?.php$ index.php?pagina=$1&id_squadra=$2&numele=$3 [L,QSA] RewriteRule ^(.*)\.html$ $1.php [nc] ErrorDocument 404 /errors/404 ErrorDocument 403 /errors/403 ErrorDocument 500 /errors/500 and the page calcioitalia/teams/1/Juventus F.C. Torino.php works!!! ********************************************************************************************* My link is with $numele=urlencode($numele); href="/calcioitalia/'.$pagina.'/'.$id_squadra.'/'.$numele.'.html" and in htacces i have Options +FollowSymlinks RewriteEngine on php_flag session.auto_start 1 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/([a-zA-Z0-9.\s]+)/?.php$ index.php?pagina=$1&id_squadra=$2&numele=$3 [L,QSA] RewriteRule ^(.*)\.html$ $1.php [nc] ErrorDocument 404 /errors/404 ErrorDocument 403 /errors/403 ErrorDocument 500 /errors/500 and the page /calcioitalia/teams/1/Juventus+F.C.+Torino.php NOT works!!! I have the error 404 Not Found The requested URL /calcioitalia/teams/1/Juventus+F.C.+Torino.php was not found on this server. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request. ******************* So why doesn't work with urlencode??? *** Could you present me one of your examples that work? Thank you for all! Edited January 4, 2013 by milanello72 Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/#findComment-1403256 Share on other sites More sharing options...
milanello72 Posted January 4, 2013 Author Share Posted January 4, 2013 OK! I will present the problem... My link is with $numele=$row['numele'] href="/calcioitalia/'.$pagina.'/'.$id_squadra.'/'.$numele.'.php" and in htacces i have Options +FollowSymlinks RewriteEngine on php_flag session.auto_start 1 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/([a-zA-Z0-9.\s]+)/?.php$ index.php?pagina=$1&id_squadra=$2&numele=$3 [L,QSA] RewriteRule ^(.*)\.html$ $1.php [nc] ErrorDocument 404 /errors/404 ErrorDocument 403 /errors/403 ErrorDocument 500 /errors/500 and the page calcioitalia/teams/1/Juventus F.C. Torino.php works!!! ********************************************************************************************* My link is with $numele=urlencode($numele); href="/calcioitalia/'.$pagina.'/'.$id_squadra.'/'.$numele.'.php" and in htacces i have Options +FollowSymlinks RewriteEngine on php_flag session.auto_start 1 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/([a-zA-Z0-9.\s]+)/?.php$ index.php?pagina=$1&id_squadra=$2&numele=$3 [L,QSA] RewriteRule ^(.*)\.html$ $1.php [nc] ErrorDocument 404 /errors/404 ErrorDocument 403 /errors/403 ErrorDocument 500 /errors/500 and the page /calcioitalia/teams/1/Juventus+F.C.+Torino.php NOT works!!! I have the error 404 Not Found The requested URL /calcioitalia/teams/1/Juventus+F.C.+Torino.php was not found on this server. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request. ******************* So why doesn't work with urlencode??? *** Could you present me one of your examples that work? Thank you for all! Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/#findComment-1403263 Share on other sites More sharing options...
milanello72 Posted January 4, 2013 Author Share Posted January 4, 2013 I found at it worksssssssssssss! RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/([a-zA-Z0-9+.\s]+)/?.html$ index.php?pagina= $1&id_squadra=$2&numele=$3 [L,QSA] I put + in ([a-zA-Z0-9+.\s]+) Thank u for your messages! Quote Link to comment https://forums.phpfreaks.com/topic/272622-problem-with-pagination/#findComment-1403266 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.