PDA

نسخه کامل مشاهده نسخه کامل : چطور یه فرم جستجو ساده بسازم؟



vahid-p
29-07-2010, 20:34
سلام.
می خوام ببینم چطور می تونم مثلا
به صورت نام : نام خانوادگی:
خب یا نام و نام خانوادگی یا حداقل نام خانوادگی رو ارسال که کردیم، تو ستون جدول بانک اطلاعاتی بگرده و نتایج رو بیاره و مثلا فیلد آدرس جلوش رو بنویسه. من از این کد های آماده استفاده کردم، کار نکرد. برای همین می خوام خیلی سریع آموزش بدین چطور می تونم این کار رو انجام بدم. ممنون

tehro0n
29-07-2010, 23:47
شما در My Sql خودتون 2 چیز دارید
1- نام جدول table
2- نام فیلد name

و مثلا به این شکل نام رو نمایش می دید


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اگه جایی رو نفهمیدی بگو

vahid-p
30-07-2010, 13:55
بهتره بگم خودم چقدر می دونم. ببینید من یه فرم درست کردم که باید دو تا اسم بگیره، و به صورت GET به همون صفحه ای که جستجو کرده می ره. برای همین تو یه شرط نوشتم که اگر داده ای بود می ری جستجو می کنی ، و گرنه که هیچ.
خب حالا مثلا داریم

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خب حالا من می خوام بدونم این جستجو رو چطور درست کنم. یه دیتابیس داریم به اسم mainDB . خب تو اون جدولی هست به اسم members. حالا فقط کافیه نام و نام خانوادگی رو از تو داده ها جستجو کنه. تو جدول members دو قسمت هست که یکی fname و lname و یکی هم number است. خب حالا هر کی lname یا fname و lname رو جستجو کرد، اون داده هایی که درسته رو فقط داده های داخل number رو براش نشون بده.
همین. ممنون می شم توضیح بدین.

tehro0n
30-07-2010, 15:27
بهتره بگم خودم چقدر می دونم. ببینید من یه فرم درست کردم که باید دو تا اسم بگیره، و به صورت GET به همون صفحه ای که جستجو کرده می ره. برای همین تو یه شرط نوشتم که اگر داده ای بود می ری جستجو می کنی ، و گرنه که هیچ.
خب حالا مثلا داریم

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدخب حالا من می خوام بدونم این جستجو رو چطور درست کنم. یه دیتابیس داریم به اسم mainDB . خب تو اون جدولی هست به اسم members. حالا فقط کافیه نام و نام خانوادگی رو از تو داده ها جستجو کنه. تو جدول members دو قسمت هست که یکی fname و lname و یکی هم number است. خب حالا هر کی lname یا fname و lname رو جستجو کرد، اون داده هایی که درسته رو فقط داده های داخل number رو براش نشون بده.
همین. ممنون می شم توضیح بدین.

سئوالتون رو من اینجوری فهمیدم که:
شما lname از فرم گرفتید و اگر فیلد lname وجود داشته باشه داده های داخل number مشابه همان lname داخل sql را نمایش دهد!

برای این کار از این کد استفاده کنید


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

از طرف دیگه هم اطلاعات دیتابیس رو در فایلی مثلا به نام config وارد می کنی


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

vahid-p
03-08-2010, 12:22
تو این خط اررور می ده :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

mamadfelfel1988
04-08-2010, 10:48
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

vahid-p
04-08-2010, 14:19
این ارور رو می ده :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد شما رو هم جایگزین کردم. باز ام همون مشکل

vahid-p
06-08-2010, 19:27
کسی نیست راهنمایی کنه

vahid-p
08-08-2010, 12:56
یکی کمک کنه لطفا

vahid-p
10-08-2010, 14:27
یکی لطفا این دفعه کمک کنه.
من تو این خط مشکل دارم :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

David.Jn
10-08-2010, 16:00
اینطور که این error میگه انگاری فیلدی که داری جستجو میکنی وجود نداره
و اینکه خروجی mysql_fetch_object تعداد فیلدهایی که با عبارت مچ شده رو برمیگردونه(البته فکر میکنم به این شکل که شما نوشتین)

اینو چک کند ببینید جواب میده:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

vahid-p
11-08-2010, 23:33
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اینم از اررو.

David.Jn
12-08-2010, 08:08
تو لاین 63 ارور سینتکسی داری

vahid-p
12-08-2010, 14:27
تو لاین 63 ارور سینتکسی داری
خب این یعنی چی؟ یعنی چیکارش کنم؟

David.Jn
12-08-2010, 15:28
خوب باید درستش کنی دیگه
اون قسمت کدتو بزار اینجا ببینم چیه

moz
12-08-2010, 15:34
index.php


<form name="form" action="search.php" method="get">
<input type="text" name="q" />
<input type="submit" name="Submit" value="Search" />
</form>



search.php

<?php

// Get the search variable from URL

$var = @$_GET['q'] ;
$trimmed = trim($var); //trim whitespace from the stored variable

// rows to return
$limit=10;

// check for an empty string and display a message.
if ($trimmed == "")
{
echo "<p>Please enter a search...</p>";
exit;
}

// check for a search parameter
if (!isset($var))
{
echo "<p>We dont seem to have a search parameter!</p>";
exit;
}

//connect to your database ** EDIT REQUIRED HERE **
mysql_connect("localhost","root","db_pass"); //(host, username, password)

//specify database ** EDIT REQUIRED HERE **
mysql_select_db("site") or die("Unable to select database"); //select which database we're using

// Build SQL Query
$query = "select * from shop where name like \"%$trimmed%\"
order by name"; // EDIT HERE and specify your table and field names for the SQL query

$numresults=mysql_query($query);
$numrows=mysql_num_rows($numresults);

// If we have no results, offer a google search as an alternative

if ($numrows == 0)
{
echo "<h4>Results</h4>";
echo "<p>Sorry, your search: &quot;" . $trimmed . "&quot; returned zero results</p>";

// google
echo "<p><a href=\"[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]"
. $trimmed . "\" target=\"_blank\" title=\"Look up
" . $trimmed . " on Google\">Click here</a> to try the
search on google</p>";
}

// next determine if s has been passed to script, if not use 0
if (empty($s)) {
$s=0;
}

// get results
$query .= " limit $s,$limit";
$result = mysql_query($query) or die("Couldn't execute query");

// display what the person searched for
echo "<p>You searched for: &quot;" . $var . "&quot;</p>";

// begin to show results set
echo "Results";
$count = 1 + $s ;

// now you can display the results returned
while ($row= mysql_fetch_array($result)) {
$title = $row["name"];

echo "$count.)&nbsp;$title" ;
$count++ ;
}

$currPage = (($s/$limit) + 1);

//break before paging
echo "<br />";

// next we need to do the links to other results
if ($s>=1) { // bypass PREV link if s is 0
$prevs=($s-$limit);
print "&nbsp;<a href=\"$PHP_SELF?s=$prevs&q=$var\">&lt;&lt;
Prev 10</a>&nbsp&nbsp;";
}

// calculate number of pages needing links
$pages=intval($numrows/$limit);

// $pages now contains int of pages needed unless there is a remainder from division

if ($numrows%$limit) {
// has remainder so add one page
$pages++;
}

// check to see if last page
if (!((($s+$limit)/$limit)==$pages) && $pages!=1) {

// not last page so give NEXT link
$news=$s+$limit;

echo "&nbsp;<a href=\"$PHP_SELF?s=$news&q=$var\">Next 10 &gt;&gt;</a>";
}

$a = $s + ($limit) ;
if ($a > $numrows) { $a = $numrows ; }
$b = $s + 1 ;
echo "<p>Showing results $b to $a of $numrows</p>";

?>

vahid-p
12-08-2010, 18:13
الان اون اررور که گفتم رو درستش کردم و اون اررور مربوط به خط دیگه ای بود. ولی الان که کد شما رو گذاشتم، ارور نمی ده ولی نتیجه ای رو هم نشون نمی ده.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

David.Jn
12-08-2010, 18:28
این کد باید درست کار کنه
شما کد فرمتون رو هم قرار بدید
یا چک کنید ببینید اسمی که برای این فیلد خاص قرار(lname) قرار دادید با این اسم یکی هست یا نه
یا اینکه نگاه کنید متدی که داره ارسال میکنه get هستش یا نه
چون بنظر میاد چیزی برای کوئری گرفتن ارسال نمیشه یعنی اینجا
if(isset($_GET['lname']))چون چیزی ست نمیشه دیگه چیزی هم تو کوئری گرفتن لحاظ نمیشه
البته اینا یه احتمالن

vahid-p
12-08-2010, 18:37
باشه چک می کنم بهتون می گم.
ولی مطمئنم که get هست.

vahid-p
12-08-2010, 19:30
اینایی که گفتین رو نگاه کردم ، همش درست بود. ضمنا این کد رو جای اون وارد کردم :
if(isset($_GET['lname']) and $_GET['lname']!=""){

و برای همین مطمئنم که داده ورودی به $_GET['lname'] نسبت داده شده. حتی فیلد مربوطه رو نوشتم :
<input type="text" name="lname" size="17" value="<?php if(isset($_GET["lname"])) echo $_GET["lname"]; ?>">

حالا به نظرتون مشکل از کجاست؟

David.Jn
12-08-2010, 21:21
کد یه مشکل کوچولو داشت
من زمانی که داشتم کد رو چک میکردم به جای متغیر از یه رشته استفاده کردم
و چون رشته بود باید میزاشتم تو دابل کوتیشن ( &quot; ) دیگه یادم رفت اونجا رو تغییرش بدم و به سینگل کوتیشن تغییرش بدم
این خط رو عوض کن:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

vahid-p
13-08-2010, 03:05
باز همونه. اررور نمی ده ولی نتیجه ای رو هم برنمی گردونه
اصلا احتمال داره مشکل از جدول های بانک اطلاعاتی باشه.
اگه ممکنه براتون کامل بفرستم یه چک بکنید ببینید کجاش مشکل داره.

David.Jn
13-08-2010, 08:02
این کد رو امتحان کن ببین جواب میده:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگر اروری هم تو دیتابیست داشته باشیایم کد باید نشون بده

vahid-p
13-08-2010, 13:55
اررور نمی ده. اصلا می شه بانک اطلاعاتیش رو به صورت mysql برام بفرستی تا import کنم. فکر می کنم مشکل از دیتابیس باشه.
خلاصه هیچ ارروری نداد. نتیجه ای رو هم برنمی گردونه.

vahid-p
13-08-2010, 14:09
البته یه چیزی که هست، اینه که من اینو گذاشتم تو برنامه خودم، و اجراش که می کردم، درست اررور نمی داد، ولی از همونجا کد متوقف می شد و ادامه برنامه رو نمی خوند. احتمالا یه مشکلی تو بانک اطلاعاتی باشه. شما اینطور فکر نمی کنید؟ چون من اونقدرا تو تنظیم بانک اطلاعاتی مهارت ندارم و دقیقا نمی دونم برای هر داده ای چی رو براش باید تعریف کرد.

David.Jn
13-08-2010, 16:36
بانک اطلاعاتی من چیزی نداره
2 تافیلد گذاشتم به یکی number یکی دیگه lname همین
تنظیمات خاصی هم نمیخواد
تو بانک اطلاعاتی اگر اروری وجود داشت نشون میداد
من یه احتمال میدم داده ای که شما میخواید Select کنید وجود نداره یا اصلاً فیلدهای تیبل خالی هستن!!
من اون کدو نوشتم که شما با منطق کار آشنا بشید
حالا اینو چک کنید اگر هم فیلدی وجود نداشته باشه یا داده ای ذخیره نشده باشه No Match برمیگردونه

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

vahid-p
14-08-2010, 18:37
واقعا شرمندم. مشکل از فارسی بودن lname ها بود. یکی رو انگلیسی نوشتم خیلی خوب پیدا کرد. راستی برای اینکه فارسی هم قبول کنه ، collection فیلد lname باید رو چی باشه؟
ضمنا چطور می شه مثلا برای جستجو انجام شده، هر چند مورد که هست بیاره و نشون بده.
من اومدم و از for برای اینکار استفاده کردم، ولی مشکل اینجاست که نمی دونم چطور سطرهای دیگه رو از آرایه زیر بدست بیارم.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
فکر کردم اینطور می شه از سطر i و ستون 0 اطلاعات $number رو بیرون کشید.

David.Jn
15-08-2010, 08:45
collation_general_ci یا collation_persian_ci
خط بعد از else:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
رو به اینصورت تغییر بده:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

vahid-p
15-08-2010, 14:48
collaction رو روی utf8-general-ci تنظیم کردم. فایده ای نداشت . ( حتی utf8-persian-ci )
تو بانک اطلاعاتی مشکلی نداره، ولی اومدم یکی رو از تو برنامه نشون دادم ، به صورت ؟؟؟؟؟؟؟؟ نشون می ده.
در صورتی که برنامه روی utf-8 هستش :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در ضمن اون ساختار while هم هر حلقه اررور می ده. اون number کجا تعریف شده؟
اینم از اررور :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

vahid-p
15-08-2010, 15:59
البته یه دستور پیدا کردم، کار می کنه، ولی به نظرم جالب نمی اد :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای مشکل number هم جای نامبر 0 نوشتم، درست شد. خودش به صورت اتوماتیک 0 رو یکی یکی بالا می برد و اطلاعات رو می نوشت. اگه برای مشکل فارسی راه حل دیگه ای دارین، بفرمائین و فکر کنم سوالاتم تموم شد !!!!!