رفتن به مطلب

یک مشکل در php و آدرس ها


پست های پیشنهاد شده

سلام و خسته نباشید

یک اسکریپت دارم که از دیتابیس مطالب رو میخونه و نمایش میده اما آدرس ها با عدد نشون داده میشه یعنی : site.ir/page-53954.html

میخوام به جای اعداد عنوان نوشته ها نمایش داده بشه

مطالب رو با این کدذها از دیتابیس میخونه که بر اساس id هست :


<?php
ob_start();
include 'dataload.php';
/********/
ini_set("display_errors","0");
ini_set("register_globals","0");

/********/
$pageid = isset($_GET['pageid'])?intval($_GET['pageid']):'1';

$servername = strtolower($_SERVER['SERVER_NAME']);
$servername = (substr($servername,0,4) == 'www.')?substr($servername,4):$servername;
/*
//visit
$res=mysql_query("update `amar` set `count`=count+1 where `date`='".date("Y-m-d")."' limit 1;");
if(mysql_affected_rows()!=1){
mysql_query("INSERT INTO `amar` (`id`, `date`, `count`, `click`) VALUES (NULL, '".date("Y-m-d")."', '1', '0');");
}
*/
#------
if(preg_match('#([a-z0-9-]+?)\.site\.ir#i', $servername, $blogname)){
if(isset($_GET['id']) ){
$res=mysql_query("select id,username from `feeds` where `id`=(select fid from `news_tmp` where `id`=$_GET[id]) limit 1");
if(mysql_num_rows($res)>0){
list($id,$username)=mysql_fetch_array($res);
if($blogname[1]!=$username){
Header( "HTTP/1.1 301 Moved Permanently" );
Header( "Location: http://$username.site.ir/page-$_GET[id].html" );
exit;
}
}
}
$username=$blogname[1];
$res=mysql_query("select id,title from `feeds` where `username`='{$blogname[1]}'");
if(mysql_num_rows($res)>0){
list($id,$title)=mysql_fetch_array($res);
$res=mysql_query("select `title`,`text`,`date`,`keywords` from `news_tmp` where `fid`=$id ".(isset($_GET['id'])?"and `id`=$_GET[id] ":'')." /*order by `date` DESC*/");
while($row=mysql_fetch_assoc($res)){
if(isset($_GET['id']))$title=$row['title'];
?>
<div class="post-title">
<div class="post-title-space">
<h1><span lang="fa"><?=$row['title'];?></span></h1>
</div>
<div id="post-content">
<div class="post-content-text">
<div class="style2">
<span lang="fa"><?=$row['text'];?></span>
</div>
<div class="clear"></div>
<div class="clear"></div>
</div>
</div>
<div id="post-footer"></div>
</div>
<?
}
}else{
echo 'user not found in feed.';
}
}
else
{
if(isset($_GET['id']) ){
$res=mysql_query("select id,username from `feeds` where `id`=(select fid from `news_tmp` where `id`=$_GET[id]) limit 1");
if(mysql_num_rows($res)>0){
list($id,$username)=mysql_fetch_array($res);
Header( "HTTP/1.1 301 Moved Permanently" );
Header( "Location: http://$username.site.ir/page-$_GET[id].html" );
exit;
}
}
$res=mysql_query("select `title`,`id` from `news_tmp` order by `date` DESC limit 200");
if(mysql_num_rows($res)>0){
echo '<ul>';
while($row=mysql_fetch_assoc($res)){
echo "<li><a href=\"page-$row[id].html\" target=\"_blank\">$row[title]</a></li>\n";
}
echo '</ul>';
}
echo 'user not found.';
}
$out_html=ob_get_clean();
include 'tmp.php';
?>

چجوری میتونم کاری کنم که بر اساس title باشه آدرس ها یعنی site.ir/page-onvane-neveshte

جدول های دیتابیس هم اینه :

4b51alrqgnc7.jpg

میشه اینکارو کرد ؟

تشکر

ویرایش شده توسط beh9am
لینک به ارسال

مطالب شما بر اساس شماره آی دی هاشون شناخته شده اگر با عنوان هم لینک بسازید به 404 می خوره و پیغام خطا می ده

اول باید ساختار پیوند یکتاتون رذو به چیزی که می خواهید تبدیل کنید (در اکشن فرم ذخیره مطالب) و برای اینکار باید از عناوین نامک بسازید که فاصله ها حذف بشند و نامک ها را در یک ستون جدول دیتابیس ذخیره کنید

و در اکشنتون هم باید یک کوئری اجرا کنید تا تمام نامک ها مقایسه بشند و دز صورت تکراری بودن بهش یک عدد اضافه کنه وگرنه پیوندهاتون روی هم قرار می گیرند و در نهایت اگر فرض کنیم ستون نامکهاتون نامش slug باشه در کدتون بجای


page-$row[id].html

باید بگذارید


page-$row[slug].html

و کوئریتون هم اینطوری می شه به عنوان مثال


$res=mysql_query("select `title`,`id` from `news_tmp` order by `date` DESC limit 200");

می شه


$res=mysql_query("select `title`,`slug`,`id` from `news_tmp` order by `date` DESC limit 200");

لینک به ارسال

مطالب شما بر اساس شماره آی دی هاشون شناخته شده اگر با عنوان هم لینک بسازید به 404 می خوره و پیغام خطا می ده

اول باید ساختار پیوند یکتاتون رذو به چیزی که می خواهید تبدیل کنید (در اکشن فرم ذخیره مطالب) و برای اینکار باید از عناوین نامک بسازید که فاصله ها حذف بشند و نامک ها را در یک ستون جدول دیتابیس ذخیره کنید

و در اکشنتون هم باید یک کوئری اجرا کنید تا تمام نامک ها مقایسه بشند و دز صورت تکراری بودن بهش یک عدد اضافه کنه وگرنه پیوندهاتون روی هم قرار می گیرند و در نهایت اگر فرض کنیم ستون نامکهاتون نامش slug باشه در کدتون بجای


page-$row[id].html

باید بگذارید


page-$row[slug].html

و کوئریتون هم اینطوری می شه به عنوان مثال


$res=mysql_query("select `title`,`id` from `news_tmp` order by `date` DESC limit 200");

می شه


$res=mysql_query("select `title`,`slug`,`id` from `news_tmp` order by `date` DESC limit 200");

تشکر جناب فخار

پس برای چیزی که میخواستم باید از پایه همه چی تغییر کنه که خوب من اونقدرا کدنویسی بلد نیستم که بتونم

فکر کنم راحت ترش این باشه که آیدی + عنوان در url باشه درسته ؟

یعنی الان که اینطوریه :


site.ir/page-53954.html

بشه اینجوری :


site.ir/53954-post-title.html

اینجوری اگر بخوام فقط تغییرات در نوع فراخوانی کافیه ؟

یعنی اینجوری بشه :


page-$row[id]-[title].html

البته گذاشتم اما کار نکرد

لینک به ارسال

راستی اینم کدهای htaccess فکر کنم اینا هم باید تغییر کنند


RewriteEngine On
#RewriteBase /
RewriteRule page-([0-9]*).html ./index.php?id=$1 [L]
RewriteRule ^list/(.*)-([0-9]*)\.html$ ./search.php?key=$1&start=$2 [L]
RewriteRule ^list/(.*)\.html$ ./search.php?key=$1 [L]
Rewriterule ^rss.xml ./rss/rss.php
### EXPIRES
# month A2592000, week A604800, day A86400, hour A3600,15 min A900
ExpiresActive On
ExpiresDefault A86400
ExpiresByType image/x-icon A2592000
ExpiresByType application/x-javascript A2592000
ExpiresByType text/css A2592000
ExpiresByType image/gif A604800
ExpiresByType image/png A604800
ExpiresByType image/jpeg A604800
ExpiresByType text/plain A604800
ExpiresByType application/x-shockwave-flash A604800
ExpiresByType video/x-flv A604800
ExpiresByType application/pdf A604800
ExpiresByType text/html A900

لینک به ارسال

هر تغییری بخواهید بدید مشمول همون مراحله اینکه در وردپرس شما می تونید چنین تغییراتی رو به راحتی اعمال کنید بخاطر اینه که وردپرس قبلا تمام شکلهای مختلفش را پیش بینی کرده و کد نویسی های لازمش رو انجام داده

لینک به ارسال

هر تغییری بخواهید بدید مشمول همون مراحله اینکه در وردپرس شما می تونید چنین تغییراتی رو به راحتی اعمال کنید بخاطر اینه که وردپرس قبلا تمام شکلهای مختلفش را پیش بینی کرده و کد نویسی های لازمش رو انجام داده

آهان

تشکر

به همین شکلی که گفتم هم نمیشه ؟

چون گفتید مطالب با آیدی فراخوانی میشه در این چیزی که گفتم id هم در آدرس بار هست فکر کنم باید بشه

الان خودم تونستم با htacceess یه کارایی کنم که ریدایرکت بشه اما 404 میده

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...