PDA

View Full Version : خواندن چند خطی از یک فیلد دیتابیس



e601
سه شنبه 23 اسفند 1390, 14:14 عصر
سلام

من در یک فیلد کلمات کلیدی رو بصورت زیر هم ذخیره میکنم.
یعنی کاربر در سایت کلمات کلیدی رو در یک باکس تایپ میکنه و اینتر میزنه و در آخر کار دکمه ذخیره رو فشار میده و کل این کلمات در یک فیلد بنام keywords ذخیره میشه که اونجا هم بصورت زیر هم هستش.

حالا موقع خواندن این کلمات از دیتابیس باید به چه صورتی عمل بشه؟ من الان از کد زیر استفاده میکنم که همه ی کلمات رو بصورت یک رشته برمیگردونه ، در صورتیکه میخوام هر کلمه کلیدی بصورت جداگانه بصورت یک رشته برگردونده بشه.


<?
$query="select dynamic_tbl.id, dynamic_tbl.keywords from dynamic_tbl where dynamic_tbl.id='$itemid'";
$result=mysql_db_query($dbname,$query,$RSconn) or die($query."<br><br>".mysql_error());
while($RS=mysql_fetch_array($result)){
$id=$RS["id"];
$kw=$RS["keywords"];
echo "<a href=$proot/keys/$id>$kw</a>";
}
?>


من تازه php رو شروع کردم.
لطفا راهنماییم کنید......

Reza1607
سه شنبه 23 اسفند 1390, 16:32 عصر
شما بايد موقعي كه مي خواي كلمات كليدي رو ذخيره كني اين كلمات رو با يك فاصله ( يا هر كاركتر جداكننده ديگه اي مثل $ ) جداكنيد و بعد موقع نمايش از دستور زير استفاده كنيد


$keys=explode(' ',$row['keywords']);
foreach($keys=>$key)
echo '<a href="#">'.$key.'</a>&nbsp;&nbsp;';

اگه به جاي فاصله از هر كاراكتر ديگه اي استفاده كردي بايد همون رو به عنوان پارامتر اول به تابع explode بدي

MMSHFE
سه شنبه 23 اسفند 1390, 16:37 عصر
کد زیر رو ببینید:


<?php
$query = "SELECT `id`, `keywords` FROM `dynamic_tbl` WHERE (`id`='{$itemid}')";
$result = mysql_db_query($dbname,$query,$RSconn) or die('<p>'.$query.'</p>'.mysql_error());
while($RS = mysql_fetch_array($result)) {
$id = $RS['id'];
$kw = nl2br($RS['keywords']);
$keywords = explode('<br />', $kw);
foreach($keywords as $kw) {
echo "<p><a href={$proot}/keys/{$id}>{$kw}</a></p>";
}
}
?>

فرق این کد با کد شما:
1- از تگ php?> بجای ?> برای شروع کدهای PHP استفاده شده که در همه سرورها جواب میده ولی تگ خلاصه ?> ممکنه همه جا جواب نده.
2- کلمات کلیدی بعد از خونده شدن از دیتابیس، به تابع nl2br ارسال شدن تا بجای کارکتر New Line توی اونها تگ </ br> رو قرار بده.
3- بعد از این کار، متن موجود در متغیر kw$ برحسب رشته </ br> که در مرحله قبل توی اون گذاشتیم، شکسته شده و بصورت یک آرایه در میاد.
4- هرکدوم از خونه های آرایه مربوطه، با کمک ساختار foreach پیمایش شده و بصورت لینک توی صفحه درج میشن.
اگه جایی از کد رو مشکل داشتین، بفرمایید تا توضیح بدم. موفق باشید.

e601
سه شنبه 23 اسفند 1390, 18:49 عصر
سلام جناب MMSHFE

ممنون از توضیحاتتون
من از راهنمایی شما استفاده کردم و جواب داد فقط یه مشکل کوچیک هست.

ببینید برای تابع explode اگه آرگومان اول رو فقط 2تا کوتیشن چسبیده بهم باشه کد کار نمیکنه. اگه بین کوتیشنها فاصله بذارم همه ی کلمات رو بر اساس فاصله ها میشکونه. یعنی مثلا اگه عبارت "انجمن برنامه نویسی" رو در نظر بگیریم هر کدام از این کلمات تبدیل به یه لینک مجزا میشه مثل >> انجمن (http://site.com) برنامه (http://site.com) نویسی (http://site.com)

من خودم اومدم بجای فاصله ، عبارت </ br> رو در داخل تابع explode قرار دادم که کلمات رو بصورت لیستی در آورد ولی همش با هم 1 لینک سرتاسری شد. اگه بشه هر خطش یه لینک مجزا بشه کار من راه میفته !

مثلا اگه 3 تا کلمه ی زیر رو بعنوان کلمات کلیدی فرض کنیم ، با تغییری که خودم تو کد دادم هر 3 تا کلمه بصورت زیر درمیاد :
علایق
برنامه نویسی
پروژه (http://site.com)

در صورتیکه من میخوام بصورت زیر باشه :
علایق (http://site.com)
برنامه نویسی (http://site.com)
پروژه (http://site.com)

MMSHFE
سه شنبه 23 اسفند 1390, 22:36 عصر
شما گفتین کلمات کلیدی توی سطرهای مختلف هست. حالا اگه توی یک سطر هستن و با فاصله جدا شدن، روش کار کمی فرق میکنه. دقیقاً مشخص کنید چه نتیجه ای رو لازم دارین تا بهتر بشه توضیح بدیم. ضمناً درصورت امکان کدی که نوشتین رو بگذارین تا تغییرات لازم رو روی اون اعمال کنیم تا خروجی موردنظر شما رو تولید کنه. اگه یک تصویر هم از اطلاعات نمونه ای که توی دیتابیس گذاشتین (همون محیط phpmyadmin) بگذارین، خیلی بهتر میشه. موفق باشید.

e601
چهارشنبه 24 اسفند 1390, 13:49 عصر
سلام

بجای </ br> کاراکتر < رو در داخل تابع explode قرار دادم و مشکل حل شد.

با تشکر فراوان از راهنمایی شما