PDA

View Full Version : آموزش: نحوه نمایش اطلاعات پس از جستجو



delphiprog3000
یک شنبه 05 خرداد 1392, 07:43 صبح
با سلام به دوستان و اساتید گرامی
بنده میخوام با دوستان همفکری کنیم و روشهای نمایش اطلاعات جستجو شده را در صقحه نمایش دهیم.
حالا هرکسی لطف کنه راهی رو که میدونه مناسبتر و اصولی تره رو برای بنده وسایرین قرار بده شاید مورد پسند دیگران قرار بگیره. با تشکر

مثلا این قطعه کد را بنده استفاده کردم.



<?php
if ( isset( $_POST["btn_sub2"] ) ){
$searchfield=$_POST["text"];



$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("signup", $con);
$cc=mysql_query("SET NAMES 'utf8'");
$result = mysql_query ("select * from signup WHERE name LIKE '%$searchfield%' OR phone LIKE '%$searchfield%' OR email LIKE '%$searchfield%' OR comment LIKE '%$searchfield%' ");
$info = array();
while ($data = mysql_fetch_array($result)){
$info[] = $data;

}

if(count($info)!= 0){
?>

<table direction="rtl" border="1 px" width="90%" align="center"><tr align="center"><td>شرح</td><td>وب سایت</td><td>ایمیل</td><td>تلفن</td><td>نام / نام خانوادگی</td><td>ردیف</td></tr>

<?php

foreach ($info as $k => $v) {
print "<tr><td>".$v[1]."</td><td>".$v[2]."</td><td>".$v[3]."</td><td>".$v[4]."</td><td>"."<a href=\"http://localhost/test/index.php?kind=peace&id=$v[1]\" class=\"printbot\">حذف</a>"."</td></tr>".$v[5]."</td><td>".$v[6]."</td><td>";

}

?>
</table>
<?php

}
}

?>




در اینجا درصورت کلیک برروی دکمه چک میکنه اتصال رو و برقرار میکنه. بعد متن مورد نظر که در یک تکست قرار دادیم رو با دستور sql کنترل میکنه که در پایگاه داده وجود دارد.و بعد بر اساس تعداد اطلاعات واکشی شده میاد table میسازه و اطلاعات رو در جدول نشون کاربر میده.

خوب به نظر دوستان این روش مناسب اگه پیشنهاد یا راهی به ذهنشون میخوره لطفا قرار بدن.البته بنده دنبال روشهای بهینه تر و حرفه ای تر هستم .با تشکر.....

delphiprog3000
یک شنبه 05 خرداد 1392, 09:10 صبح
اینم عکس نمایش اطلاعات پس از جستجو :

104674

abolfazl-z
یک شنبه 05 خرداد 1392, 10:03 صبح
سلام
در مورد این خط باید بگم هک میشه! (تو انجمن در مورد SQL Injected جستجو کنید.)

$searchfield=$_POST["text"];

و درمورد خط زیر باید یک else در نظر بگیرید که اگر اطلاعاتی وجود نداشت بنویسد "یافت نشد!"


if(count($info)!= 0){

xcodex
یک شنبه 05 خرداد 1392, 12:20 عصر
با سلام

بله داداش ابوالفضل درست میگه شما باید اطلاعات ورودی به دیتا بیس مثل $searchfield رو sanitize کنید و بعد به دیتابیس بفرستید و اطلاعات رو استخراج کنید. یه سرچ کوچیک بزنید درباره sanitize کردن مطلب زیاده در گوگل.

والا در مورد حرفه ای تر و بهینه تر بودن دقیقا نمیدونم منظورتون چیه مثلا شما میتونید یه کلاس جدا تعریف کنید و نحوه نمایش رو اونجا تعریف کنید مثلا یه متد داشته باشه این کلاس که با دادن یه آرایه بهش یه table از نوع html رو با مقادیر اون آرایه تکمیل کنه و اکو کنه. امیدوارم منظورم رو رسونده باشم.

delphiprog3000
یک شنبه 05 خرداد 1392, 12:52 عصر
با سلام

بله داداش ابوالفضل درست میگه شما باید اطلاعات ورودی به دیتا بیس مثل $searchfield رو sanitize کنید و بعد به دیتابیس بفرستید و اطلاعات رو استخراج کنید. یه سرچ کوچیک بزنید درباره sanitize کردن مطلب زیاده در گوگل.

والا در مورد حرفه ای تر و بهینه تر بودن دقیقا نمیدونم منظورتون چیه مثلا شما میتونید یه کلاس جدا تعریف کنید و نحوه نمایش رو اونجا تعریف کنید مثلا یه متد داشته باشه این کلاس که با دادن یه آرایه بهش یه table از نوع html رو با مقادیر اون آرایه تکمیل کنه و اکو کنه. امیدوارم منظورم رو رسونده باشم.

با تشکر ممنون از توضیحاتون دوستان گرامی.
منظورم همینه که نظرات گرانبهاتون قرار بدید.
و اگر میشه در این باره یه مثال بیارید که هم بنده و هم دیگر دوستان با این متد شما آشنا بشن با سپاس......

MostafaEs3
دوشنبه 06 خرداد 1392, 10:11 صبح
برای جستجو در دیتابیس از این کد نیز (با تغیرات در کوئری) میتوانید استفاده کنید ::


$q = trim(mysql_real_escape_string($_GET['q']));

$query = "SELECT SQL_CALC_FOUND_ROWS *,
MATCH(code) AGAINST ('$q' IN BOOLEAN mode) AS score1,
MATCH(name) AGAINST ('$q' IN BOOLEAN mode) AS score2
FROM tablename
WHERE
MATCH(code,name) AGAINST ('$q' IN BOOLEAN mode)
ORDER BY score1 DESC, score2 DESC LIMIT 20";

$sql = mysql_query($query);

$result_count = mysql_query("SELECT FOUND_ROWS()") or die(mysql_error());
$total = mysql_fetch_array($result_count);
$totalrows = $total[0];

if (mysql_num_rows($sql) > 0) {
echo '<p>Found <b>'.$totalrows.'</b> results for <b>"' . htmlentities($_GET['q']) . '"</b></p>';
$i = 1;
while ($row = mysql_fetch_array($sql)) {
echo '<p>' . $i . '<a href="view.php?id=' . $row['id'] . '">' . $row['name'] . '</a></p>';
$i++;
}
} else {
echo '<h2>No Results Found!</h2>';
}

engmmrj
دوشنبه 06 خرداد 1392, 10:49 صبح
برای جستجو در دیتابیس از این کد نیز (با تغیرات در کوئری) میتوانید استفاده کنید ::


$q = trim(mysql_real_escape_string($_GET['q']));

$query = "SELECT SQL_CALC_FOUND_ROWS *,
MATCH(code) AGAINST ('$q' IN BOOLEAN mode) AS score1,
MATCH(name) AGAINST ('$q' IN BOOLEAN mode) AS score2
FROM tablename
WHERE
MATCH(code,name) AGAINST ('$q' IN BOOLEAN mode)
ORDER BY score1 DESC, score2 DESC LIMIT 20";

$sql = mysql_query($query);

$result_count = mysql_query("SELECT FOUND_ROWS()") or die(mysql_error());
$total = mysql_fetch_array($result_count);
$totalrows = $total[0];

if (mysql_num_rows($sql) > 0) {
echo '<p>Found <b>'.$totalrows.'</b> results for <b>"' . htmlentities($_GET['q']) . '"</b></p>';
$i = 1;
while ($row = mysql_fetch_array($sql)) {
echo '<p>' . $i . '<a href="view.php?id=' . $row['id'] . '">' . $row['name'] . '</a></p>';
$i++;
}
} else {
echo '<h2>No Results Found!</h2>';
}

درابره این تیکه میشه توضیح بدید :

MATCH(code) AGAINST ('$q' IN BOOLEAN mode) AS score1,
و فرقش با LIKE چیه ؟

MostafaEs3
دوشنبه 06 خرداد 1392, 11:00 صبح
لینکهای زیر رو ببینید ::

لینک 1 :: http://stackoverflow.com/questions/792875/which-sql-query-is-better-match-against-or-like
لینک 2 :: http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqls.doc/sqls977.htm
------------------------
اگر اشتباه نکنم یکسری کاراکتر های خاص (همانند عبارات منظم) در MATCH قابل استفاده هست که در (لینک 2) میتونید ببینید

delphiprog3000
دوشنبه 06 خرداد 1392, 13:04 عصر
باسلام. ممنون از توجه دوستان.
هنگام نمایش به چند طریق میشه اطلاعات رو نمایش داد اطلاعاتی که پس از جستجو فراخوانی میشن.
یعنی در table یا با دستور echo نمایش بدیم سنجیده تره.
لطفا راهنمایی کنید..

با تشکر

delphiprog3000
دوشنبه 06 خرداد 1392, 19:31 عصر
با سلام.
منظورم اینه که بتونیم نتیجه جستجو رو در یک به قول مایکروسافت datagrid , datalist نمایش بدیم.فک کنم منظورم رسوندم.میخوام توگرید به نمایش در بیاد

اگه امکانش هست راهنمایی نمایید. با تشکر...