พบกับบทความเกี่ยวกับคอมพิวเตอร์และ programming ได้ที่ http://articles.modoeye.com | บล็อกอาหาร
PHP development / การ search ข้อมูลกับ Listbox 3 levels
twin
twin
Mon 14 Jan 2008 20:22:30

ท่านที่เก่ง ๆ (รวม Admin ด้วย) ช่วยตอบเป็นวิทยาทานเถอะ เพราะไปมาหลายเว็บแล้วครับบางท่านก็ไม่ตอบ หรือไม่ทราบก็ไม่รู้   (ขอตัวอย่างโค้ดด้วยครับ) มี 2 คำถามครับ

1). กรณีเรามี Listbox 3 Levels (สร้างตัวแปรเป็น $province, $ampur, $tumbol โดยดึงข้อมูลจาก MySQL ที่เราได้คีย์เข้าไปผ่าน phpMyAdmin, เป็นคนละกรณีกับคำถามที่ผ่าน ๆ มาน่ะครับ เพราะที่ผ่านมาจะเก็บรายชื่อตำบล อำเภอ จังหวัดทั้งหมดมีอยุ่ในประเทศไทย แต่กรณีของผมนั้นจะมีเฉพาะบางตำบล อำเภอ จังหวัด ที่จะต้องใช้) ใน listbox เมื่อเลือกข้อมูลได้สร้างบรรทัดแรก default ไว้เป็น  --- Select ----    ปรากฎว่ามันออก default เป็นข้อมูลสุดท้ายใน table ที่มีอยู่  มันผิดที่ตรงไหนครับ

2.) ค้นหาข้อมูล 3 field (company, type, province)ในเทเบิลเดียว tbl_customer จาก MySQL เวลาส่งค่าเพื่อเช็คค่านั้นเราใช้คำสั่งแบบนี้ได้ไหมครับ

$sql="SELECT * FROM tbl_customer WHERE $company=company AND $type=type AND $province=province";

ไม่ทราบว่าผิดตรงไหน มันไม่แสดงข้อมูลออกมาครับ

twin
twin
Mon 14 Jan 2008 20:24:43

ขอโทษครับในข้อ 2.) แก้ไขเป็นดังนี้ครับ

$sql="SELECT * FROM tbl_customer WHERE $province=province AND $ampur=ampur AND $tumbol=tumbol";

webmaster
webmaster
Tue 15 Jan 2008 11:38:11
การเรียงลำดับก็ใช้ ORDER BY ครับ
ส่วน query นั้นถ้าตัว field ที่ต้องการค้นหาเป็นแบบ Varchar, Text หรือ Binary สิ่งที่ค้นหาต้องใส่ ' คร่อมครับ เช่น
"SELECT ..... WHERE '".$province."'=province..."
twin
twin
Tue 15 Jan 2008 15:08:06

ก็ยังไม่เข้าใจครับ ลองหลายครั้งแล้วก็ไม่ได้ ขอให้ลองใส่ตัวอย่างจริงตามนี้ครับว่าจะใส่อย่างไร แบบนี้ถูกไหมครับ ขอบคุณล่วงหน้าครับ มือใหม่งง

$sql="SELECT * FROM tbl_customer WHERE '.$Changwat.'=changwat AND '.$ampur.'=ampur  AND '.$tambol'=tambol" ORDER BY 'Changwat', 'ampur', 'tambol'";

webmaster
webmaster
Tue 15 Jan 2008 18:54:08
$sql="SELECT * FROM tbl_customer WHERE '".$Changwat."'=changwat AND '".$ampur."'=ampur  AND '".$tambol."'=tambol ORDER BY changwat, ampur, tambol";

ที่ไม่สามารถทำงานได้ก็เนื่องจากคุณเขียนผิด Syntax ซึ่งผมจะใช้ . เพื่อใช้ในการเชื่อม string โดยปกติผมไม่นิยมเอาตัวแปลไปใส่ใน string ตรงๆ แบบ "SELECT * FROM tbl_customer WHERE $company=company AND $type=type AND $province=province"

ที่ผมบอกคือต้องมี ' คร่อมค่าที่ต้องการ ซึ่งต้องเข้าใจในการทำงานของคำสั่ง SQL ด้วยครับ และชื่อ field ใน MySQL จะเป็นแบบ Case-Sensitive ด้วยครับ
twin
twin
Tue 15 Jan 2008 19:35:52

ต้องขอโทษที่รบกวนครับ และขอบคุณอย่างสูงที่ได้กรุณาตอบครับ

คือผมก็หาจากหนังสือ (ข้อมูลน้อย) และหาตามเว็บต่าง ๆ (ไทย) ก็ไม่ค่อยจะมีหรือผมหาไม่เจอเอง (วัน ๆ ก็ท่องไปตลอด) เว็บต่างประเทศก็ละเอียดดีครับ แต่แปลแล้วก็ยังไม่ค่อยเข้าใจ จึงมาพึ่งเว็บไทยเราด้วยเพิ่มเติมครับ

webmaster
webmaster
Tue 15 Jan 2008 20:37:21
มีปัญหาก็สามารถสอบถามได้ครับ ยินดีตอบให้ (เมื่อว่างนะครับ) จริงๆถ้าพยายามอ่านภาษามันก็ไม่ได้ยากครับมีแต่คำเดิมๆ นอกจากว่าจะไปอ่าน webboard ของเขาอาจจะเจอพวกสแลงต่างๆ แต่ก็จะพอจับใจความได้

โปรเจ็ค Document ภาษาไทยยังไม่เสร็จเสียที (ตอนนี้กำลังสนุกกับ OOP Javascript) จริงๆยังมีอีกหลายอย่างอยากเขียนแต่ไม่ได้เริ่มสักที
twin
twin
Wed 16 Jan 2008 14:33:11

ขอรบกวน admin ด้วยครับ เพราะยังไงก็ยังไม่ได้ ขอนำตัวอย่างจริงให้ดูครับ  ตามตัวอย่างดังนี้ครับ

1. ไฟล์ FormCheckRat.php   เป็นฟอร์มระบุข้อมูล Listbox 3 levels, โดยดึงข้อมูลจาก MySQL มาแสดงและตัดข้อมูลที่ซ้ำ,  เช่น ตัวเลือกที่ 1 เลือก สระบุรี, ตัวเลือกที่ 2 เลือก เฉลิมพระเกียรติ, ตัวเลือกที่ 3 เลือก ผึ้งรวง

<?
// Connect database
mysql_connect("localhost","root","17491749");
mysql_select_db("db_mysql");

// If submitted, check the value of "select". If its not blank value, get the value and put it into $select.
if(isset($select)&&$select!=""){
$select=$_GET['select'];
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874" />
</head>
<body>
<form id="form1" name="form1" method="get" action="ReportCheckRat4.php">

จังหวัด :
<select name='select1'>
<option value="" selected>--- Select ---</option>
<?
// Get records 1st from database (table "tbl_Ratcharule").
$list_1=mysql_query("select distinct Changwat from tbl_Ratcharule order by Changwat asc");

// Show records 1st by while loop.
while($row_list=mysql_fetch_assoc($list_1)){
?>
<option value="<? echo $row_list['id']; ?>" <? if($row_list['id']==$select){ echo "selected"; } ?>><? echo $row_list['Changwat']; ?></option>
<?
// End while loop.
}
?>
</select>
<br><br>

อำเภอ :
<select name='select2'>
<option value="" selected>--- Select ---</option>
<?
// Get records 2nd from database (table "tbl_Ratcharule").
$list_2=mysql_query("select distinct Ampur from tbl_Ratcharule order by Ampur asc");

// Show records 2nd by while loop.
while($row_list=mysql_fetch_assoc($list_2)){
?>
<option value="<? echo $row_list['id']; ?>" <? if($row_list['id']==$select){ echo "selected"; } ?>><? echo $row_list['Ampur']; ?></option>
<?
// End while loop.
}
?>
</select>
<br><br>

ตำบล :
<select name='select3'>
<option value="" selected>--- Select ---</option>
<?
// Get records 3th from database (table "tbl_Ratcharule").
$list_3=mysql_query("select distinct Tambol from tbl_Ratcharule order by Tambol asc");

// Show records 3th by while loop.
while($row_list=mysql_fetch_assoc($list_3)){
?>
<option value="<? echo $row_list['id']; ?>" <? if($row_list['id']==$select){ echo "selected"; } ?>><? echo $row_list['Tambol']; ?></option>
<?
// End while loop.
}
?>
</select>

<input type="submit" name="Submit" value="ตกลง" />
</form>
<hr>
<p>

<?

// If you have selected from list box.
if(isset($select)&&$select!=""){

// Get records from database (table "tbl_Ratcharule").
/*
$result=mysql_query("select * from tbl_Ratcharule where id='$select'");
$row=mysql_fetch_assoc($result);
*/
?>
Information about <strong><? echo $row['name']; ?></strong> company...</p>
<p>........................................<br>
........................................<br>
........................................
<?
// End if statement.
}

// Close database connection.
mysql_close();
?>
</p>
</body>
</html>

2. ไฟล์ ReportCheckRat4.php    

<?php
$link = mysql_pconnect("localhost","root","newkid");
mysql_select_db("db_mysql");
$userselect = mysql_query("SELECT Changwat,  Ampur, Tambol, Name_File FROM tbl_ratcharule ORDER BY Changwat, Ampur, Tambol");
$numfield = mysql_num_fields($userselect);
print "<center><table border='1'>";
print "<tr>";
for ($i=0;$i<$numfield;$i++) {
  print "<th><font size='2'>".mysql_field_name($userselect,$i)."</font>";
}
while ($selectrow=mysql_fetch_array($userselect)) {
  print "<tr>";
  for ($i=0;$i<$numfield;$i++) {
    print "<td><font size='2'>".$selectrow[$i]."</font>";
  }
}
print "</table></center>";
?>

เป็นไฟล์รับค่า ไม่ทราบว่าผิดตรงไหน ตรง Select ข้อมูล ? หรือผิดตั้งแต่ไฟล์แรก ? การกำหนดตัวแปรของข้อมูลที่ระบุ ??? เพราะเมื่อส่งค่าแล้วแสดงออกมาหมดเลย ไม่เป็นเฉพาะที่เราเลือก สระบุรี, เฉลิมพระเกียรติ, ผึ้งรวง ครับ

Changwat Ampur Tambol Name_File
นนทบุรี บางใหญ่ บางเลน r199_165a_141148_4
สระบุรี เฉลิมพระเกียรติ ผึ้งรวง r122_108a_161150_1
สระบุรี เฉลิมพระเกียรติ ผึ้งรวง r152_199a_161150_1
สระบุรี เฉลิมพระเกียรติ ผึ้งรวง r148_155a_161150_2
สระบุรี เมือง ดาวเรือง r122_108a_161150_1
สิงห์บุรี เมือง ดาวเรือง r123_108a_141148_4

webmaster
webmaster
Thu 17 Jan 2008 13:37:34
เมื่อมีการเลือก จังหวัด ให้ส่งค่าไปยังหน้านี้ โดยใน select ที่ 2 ก็ให้ตรวจสอบว่ามีตัวแปรจังหวัดส่งมาหรือเปล่า ถ้ามีค่าส่งมาก็ให้เอามา query เอาอำเภอในจังหวัดนั้นมาแสดง เมื่อมีการเลือกอำเภอ ก็ให้ส่งค่ามายังหน้านี้ โดยใน select ที่ 3 ก็ทำการตรวจสอบว่ามีการส่งค่าอำเภอมาหรือไม่ ถ้ามีก็ให้เอาอำเภอมา query เอาตำบลในจังหวัดนั้นๆมาแสดง

ดังนั้นต้องมีการส่งตัวแปรที่ชื่อไม่ซ้ำกันอย่างน้อย 2 ตัวแปร

ถ้ายังไม่ได้โปรดแจ้งด้วยครับว่าไม่ได้อย่างไร มี Error อะไรบ้าง
twin
twin
Thu 17 Jan 2008 14:02:32

มือใหม่ ไม่ได้เขียนโปรแกรมหรอกครับ จึงไม่ค่อยจะรู้เรื่อง ที่อธิบายมาก็ไม่รู้จะเขียนอย่างไร

twin
twin
Thu 17 Jan 2008 14:10:26

ช่วยดูตามตัวอย่างโค้ดได้ไหมครับ ว่าจะแก้ตรงไหน อย่างไร ขอบคุณครับ

webmaster
webmaster
Thu 17 Jan 2008 15:52:57
ขอโทษครับ Reply ข้างบนเข้าใจผิด

mysql_query("SELECT Changwat,  Ampur, Tambol, Name_File FROM tbl_ratcharule ORDER BY Changwat, Ampur, Tambol");

คำสั่งนี้ เป็นการเลือก โดยไม่มีเงื่อนไข ซึ่งไม่ต่างกับ

mysql_query("select distinct Tambol from tbl_Ratcharule order by Tambol asc");

ในเมื่อคุณต้องการใช้แสดงเฉพาะสิ่งที่คุณเลือก จะต้องใส่เงื่อนไขเข้าไป เช่น

SELECT Changwat,  Ampur, Tambol, Name_File FROM tbl_ratcharule WHERE Changwat='นนทบุรี' ORDER BY Changwat, Ampur, Tambol


การใช้ WHERE เพื่อบอกว่าให้เอาเฉพาะข้อมูลที่มี Condition ตามที่ระบุเท่านั้น ความหมายของตัวอย่างข้างบนคือ เลือกเอา record ที่มี field Changwat มีค่าเป็น นนทบุรี เท่านั้น ถ้าคุณต้องการระบุมากกว่า 1 Condition ก็ให้ใส่ AND เข้าไประหว่าง Condition นั้นๆ เช่น
SELECT .... WHERE .... AND ... ORDER BY ....
twin
twin
Fri 18 Jan 2008 08:53:39

ขอบคุณครับที่ได้ตอบ

และหากว่า ... WHERE Changwat='นนทบุรี' เป็นการกำหนดค่าตายตัวครับ และถ้าหากเราให้ได้ข้อมูลตามที่ users ระบุ listbox เข้ามา เช่น สระบุรี หรืออาจจะเป็น ชัยภูมิ ดังนี้น่ะในไฟล์กแรกที่ส่งข้อมูลเข้ามาจะต้องกำหนดตัวแปรอย่างไร ? กำหนด syntax อย่างไรที่จะรับส่งค่ากันได้ครับ (เพราะเคยเห็นตัวอย่างแบบนี้ WHERE Changwat='$received')

webmaster
webmaster
Fri 18 Jan 2008 10:22:22
ถ้าคุณส่งมาแบบ get ก็รับแบบ $_GET[""] ถ้าส่งมาแบบ post ก็รับแบบ $_POST[""] คุณจะสร้างตัวแปร local มารับแบบข้างบนก็ได้แล้วแต่ความถนัดครับ
twin
twin
Fri 18 Jan 2008 20:42:29

ให้ช่วยแสดงตัวอย่างกำหนดค่าการส่งและรับค่ากับ script ด้านบนที่ให้ไปได้ไหมครับ

webmaster
webmaster
Fri 18 Jan 2008 21:25:38
<form id="form1" name="form1" method="get" action="ReportCheckRat4.php">
แปลว่าคุณส่งค่าแบบ get ก็ต้องรับแบบ get

<select name='select3'>
ถ้าคุณต้องการรับค่าจาก object นี้ ก็ใช้ $_GET["select3"]

ถ้าเอาไปใส่ใน SQL ก็เช่น
"SELECT .... WHERE Changwat='".$_GET["select3"]."' ...."
จะเห็นว่ายังคงมี ' (Single Quote) คร่อมค่าอยู่เหมือนเดิม ส่วน . นั้นใช้เพื่อการต่อ string ในรูปแบบที่ถูกต้อง
twin
twin
Sat 19 Jan 2008 13:54:04

ขอบคุณครับ จะขอไปลองต่อ แล้วถ้าได้ผลและไม่ได้ผลอย่างไร จะมาแจ้งครับ

Reply
Name:
E-mail:
Home | Services | Forum | Classified | Directories | Support | Contact
ATOM feed RSS 0.9 feed RSS 1.0 feed RSS 2.0 feed
Copyright © 2005 - 2007 Modoeye.com, All Rights Reserved.
Disclaimer | Privacy policy | Term of Use | Term of Services
Valid XHTML Valid CSS! PHP: Hypertext Preprocessor MySQL database Apache Powered! FreeBSD Power to serve
Modoeye Sitemap Client login