Mon 11 Sep 2006 23:05:02
สวัสดีครับ
ขอขอบคุณมากสำหรับคำแนะนำ ในเรื่องของ การเรียกข้อมูลจากฐานข้อมูล Mysql ออกมาในรูปของ check box และ radio box
ด้านล่างเป็น code program ที่เขียนบันทึกลงใน Mysql
ข้อมูลที่เป็น check box
<form action="add.php" method="post">
<b>Food products group</b>
<input type="checkbox" name="agri" value="1" >Agricultural Products<br>
<input type="checkbox" name="alkohol" value="2">Alkoholic Beverages<br>
<input type="checkbox" name="nonal" value="3">Non Alkoholic Beverages<br>
<input type="checkbox" name="bakery" value="4">Bakery Products<br>
</form>
ข้อมูลที่เป็น radio box
<b>Would you like to receive food news and post buy and sell information?</b>
<input type="radio" name="mail" value="receive" checked>Receive
<="input type="radio" name="mail" value="nreceive">Not receive<br>
********* ที่คุณแนะนำมาให้เขียนเพื่อดึงข้อมูลจาก mysql ขึ้นมาโชว์เป็น check box และ radio box ข้างล่างนี้
<input type="checkbox" name="chk[]" value="1"<? echo (($row["field_name"] == 1)?" selected":""); ?>>
<input type="radio" name="rad" value="1"<? echo (($row["field_name"]==1)?" selected":""); ?>>
<input type="radio" name="rad" value="2"<? echo (($row["field_name"]==2)?" selected":""); ?>>
********* ไม่ทราบว่าเมื่อผมนำมาประยุกต์แล้วผมเขียนถูกหรือเปล่า
<input type="checkbox" name="agri" value="1"<? echo (($row["agri"] == 1)?" selected":""); ?>>
<input type="checkbox" name="alkohol" value="2"<? echo (($row["alkohol"] == 2)?" selected":""); ?>>
<input type="checkbox" name="nonal" value="3"<? echo (($row["nonal"] == 3)?" selected":""); ?>>
<input type="checkbox" name="bakery" value="4"<? echo (($row["bakery"] == 4)?" selected":""); ?>>
<input type="radio" name="mail" value="receive"<? echo (($row["mail"]==receive)?" selected":""); ?>>
<input type="radio" name="mail" value="nreceive"<? echo (($row["mail"]==nreceive)?" selected":""); ?>>
********* ถ้าผมเขียนถูก ปรากฎว่าพอรันออกมาแล้ว มันไม่โชว์ในสิ่งที่เลือกนะครับ ช่วยแนะนำให้อีกครั้งครับ
อนันต์
<input type="checkbox" name="agri" value="1"<? echo (($row["agri"] == 1)?" selected":""); ?>>
<input type="checkbox" name="alkohol" value="1"<? echo (($row["alkohol"] == 1)?" selected":""); ?>>
<input type="checkbox" name="nonal" value="1"<? echo (($row["nonal"] == 1)?" selected":""); ?>>
<input type="checkbox" name="bakery" value="1"<? echo (($row["bakery"] == 1)?" selected":""); ?>>
ในส่วนของ checkbox คุณต้องแบ่ง field เพื่อที่จะเก็บค่าทั้งหมดเนื่องจาก checkbox ออกแบบมาเพื่อให้ส่งค่าได้หลายค่าครับ ฉะนั้นในแต่ละ field บนฐานข้อมูลก็เก็บเพียง 0 หรือ 1 ก็เพียงพอครับ จากโค๊ดข้างบนในฐานข้อมูลคุณจึงต้องมี field ชือ agri, alkohol, nonal, bakery เพื่อให้เก็บค่าที่ เป็น 0 หรือ 1 ครับ
ส่วน radio นั้นออกแบบมาให้สามารถเลือกได้เพียงค่าเดียวครับดังนั้น
<input type="radio" name="mail" value="receive"<? echo (($row["mail"]==receive)?" selected":""); ?>>
<input type="radio" name="mail" value="nreceive"<? echo (($row["mail"]==nreceive)?" selected":""); ?>>
ผิดตรงที่ค่าที่ควรจะได้นั้นถ้าคุณส่งเป็น string ตอนได้มาจาก database ก็จะเป็น string ครับโค๊ดควรจะเป็น
<input type="radio" name="mail" value="receive"<? echo (($row["mail"]=="receive")?" selected":""); ?>>
<input type="radio" name="mail" value="nreceive"<? echo (($row["mail"]=="nreceive")?" selected":""); ?>>
ทั้งหมดนี้คุณลองทำการเปรียบเทียบข้อมูลในฐานข้อมูลดูครับว่าแต่ละ field มีค่าที่บันทึกเป็นอะไรครับ ตรงตามแต่ละ condition ที่ตรวจสอบไว้หรือไม่ครับ
Tue 12 Sep 2006 22:36:42
สวัสดีครับ
ขอขอบคุณมากสำหรับคำตอบ แต่พอไปเขียนแล้ว ปรากฎว่ายังคงมีปัญหาเหมือนเดิมครับ คือ มันไม่โชว์คลิ๊กที่ลูกค้าเลือกไว้ ผมได้ส่งโค้ดโปรแกรมมาให้ทางคุณช่วยเหลือข้างล่างนี้ครับ รบกวนอีกครั้งนะครับ
<?
if($email=="")
{
print("Error no email");
}
else
{
$link=mysql_connect("localhost","root","");
if (!$link)
{
print("Error");
}
else
{
mysql_select_db("test",$link);
$sql="select*from test where email=$email";
$res=mysql_query($sql,$link);
$n=mysql_num_rows($res);
if($n==0)
print("Error entry not found");
else
{
$row=mysql_fetch_row($res);
?>
<p><form method="post" action="update.php">
Email:<?=$row[1]?><br>
<input type="hidden" name="email" value="<?=$row[1]?>">
Company:<input type="text" name="company" value="<?=$row[0]?>"><br>
Country:<input type="text" name="country" value="<?=$row[2]?>"><br>
Product group:<br>
<input type="checkbox" name="agri" value="1"<?echo(($row["agri"]==1)?"selected":"");?>>Agricultural Products<br>
<input type="checkbox" name="alkohol" value="1"<?echo(($row["alkohol"]==1)?"selected":"");?>>Alkoholic Beverages<br>
<input type="checkbox" name="bakery"value="1"<?echo(($row["bakery"]==1)?"selected":"");?>>Bakery Products<br>
Would you like to receive food news?<br>
<input type="radio" name="mail" value="receive"<? echo (($row["mail"]=="receive")?" selected":""); ?>>Receive<br>
<input type="radio" name="mail" value="nreceive"<? echo (($row["mail"]=="nreceive")?" selected":""); ?>>Not receive
<p><input type="submit" value="Add data">
</form>
<?
}
}
}
?>
1. เปลี่ยน index ของ $row เป็น index ของ field นั้นๆครับ
2. เปลี่ยนไปใช้ mysql_fetch_array() เพื่อจะได้คืนค่ามาเป็น Associative array ครับ
คุณอาจจะใช้ mysql_fetch_array() ก็ได้โดยไม่ต้องระบุ parameter ที่สอง จะมีผลทำให้คุณสามารถอ้างได้ทั้งแบบ array และ associative array ครับ
Wed 13 Sep 2006 20:23:24
สวัสดีครับ
ขอขอบคุณมากครับสำหรับคำแนะนำ ผมสมารถแก้ปัญหานี้ได้แล้วครับ
ผมเริ่มหัดเขียน PHP and Mysql และคิดว่าคงจะมีปัญหาค่อนข้างมาก ซึ่งถ้าหาทางแก้เองคิดว่าต้องใช้เวลานานแล้วก็ไม่รู้ว่าจะแก้ได้ไหม เพราะว่าไม่ได้เรียนมา ซึ่งคำแนะนำของคุณเป็นประโยชน์อย่างมาก
อย่างไรก็ตามคิดว่าคงจะมีคำถามอีกมากที่จะต้องรบกวนถามคุณ เป็นไปได้ไหมครับที่จะเป็นที่ปรึกษาในการเขียนโปรแกรมสำหรับเว็บที่ผมเขียนอยู่นี้ เว็บนี้เป็นเว็บของบริษัทผมเอง ไม่ได้เขียนให้ใคร และเหตุผลที่ต้องการเขียนเองเพราะว่าถูกใจมากกว่าให้โปรแกรมเมอร์คนอื่นเขียนและแก้ไขเองได้ด้วย
ระยะเวลาในการเขียนเว็บไซค์ตัวนี้คิดว่าคงจะใช้เวลาประมาณ 15 วัน จากวันนี้ 13 กันยายน 2549 ถึงวันที่ 28 กันยายน 2549 และอีก 15 วันหลัง สำหรับการขึ้นเว็บและแก้ไขปัญหาต่างๆ ซึ่งรวมทั้งหมด 30 วัน โดยมีข้อแม้ว่าคุณเป็นที่ปรึกษาให้คำแนะนำในการเขียน โดยผมเสนอค่าตอบแทน 3,000 บาท สำหรับเวลา 30 วัน ตั้งแต่วันที่ 13 กันยายน - 12 ตุลาคม 2549 ถ้า OK ขอให้แจ้งเลขที่บัญชีมาด้วยครับ
ขอขอบคุณเป็นอย่างสูงอีกครั้ง
อนันต์
ขอบคุณอีกครั้งครับ

















