วันพฤหัสบดีที่ 23 พฤษภาคม พ.ศ. 2556

การอ่านค่าจาก check box จาก php script แบบง่าย



สวัสดีครับ พอดีมีคนถามเข้ามาครับ เรื่องจะอ่าน input จาก check box ได้ยังไง ผมว่าเรื่องนี้น่าสนใจดีครับ
เพราะว่าช่วงแรกที่ผมเขียน php ใหม่ๆ ก็เขียนแบบเด็กๆมากเลย โดยตรวจมันหมดทุกตัวเลย ช้าชะมัด หรืออย่างคน
ที่เขียนถามเข้ามาเข้าใจว่าไม่ได้ ตรวจตัวแปรให้ดีเลยทำให้มีปัญหา ผมเลยได้ทำการเสาะแสวงหา code การอ่าน
check box มาลองใช้ดูพบว่า เจ๋งดีครับ เลยเขียนเป็นบทความลงมาให้ดูเผื่อใครอยากรู้บ้าง

วิธีการง่ายๆให้ใช้ array ครับ ยกตัวอย่างเช่น ใน form ของเรามี html ดังนี้นะครับ
------------------------------------------------------------------------------
คุณเลี้ยงอะไรบ้าง?
<FORM>
<INPUT TYPE=checkbox NAME=PET_ARRAY[] value=dog>หมา<br>
<INPUT TYPE=checkbox NAME=PET_ARRAY[] value=cat> แมว<br>
<INPUT TYPE=checkbox NAME=PET_ARRAY[] value=fish> ปลา<br>
</FORM>
------------------------------------------------------------------------------

ถ้าสังเกตุชื่อตัวแปรจะตั้งเป็น PET_ARRAY[] ซึ่งเป็นตัวแปรแบบ array นะครับ ทีนี้ถ้าอยากรู้ว่าผู้ใช้เลือกอะไรบ้างให้ลองดู code นี้ครับ
------------------------------------------------------------------------------
if ($PET_ARRAY)
{
$PET = implode($PET_ARRAY, ",");
$result = mysql_query ("UPDATE dbname SET PET = '$PET'");
if(!$result)
{
echo "<B>UPDATE unsuccessful:</b> ", mysql_error();
exit;
}
}
------------------------------------------------------------------------------
ถ้าสังเกตุอีกจะเห็นว่าเราใช้ฟังก์ชัน implode เพื่อทำให้ $PET เป็นข้อความที่ถูกคั่นด้วย comma ครับ หรือหากใครต้องการใช้ทีละตัว ก็อาจใช้ code
ได้ดังนี้ครับ
------------------------------------------------------------------------------
for ($i=0;$i<count($PET_ARRAY);$i++) {
$PET = $PET_ARRAY[$i];
echo $PET."<br>";
mysql_query("UPDATE dbname SET PET='$PET'");
}
------------------------------------------------------------------------------
อะไรทำนองนี้ครับ ลองเอาเทคนิคนี้ไปใช้ดูครับ ช่วยได้เยอะทีเดียวครับ ถ้างงๆ ก็ถามเพิ่มเติมเข้ามาได้ครับ

การอ่านค่าจาก check box จาก php script แบบง่าย


สวัสดีครับ พอดีมีคนถามเข้ามาครับ เรื่องจะอ่าน input จาก check box ได้ยังไง ผมว่าเรื่องนี้น่าสนใจดีครับ
เพราะว่าช่วงแรกที่ผมเขียน php ใหม่ๆ ก็เขียนแบบเด็กๆมากเลย โดยตรวจมันหมดทุกตัวเลย ช้าชะมัด หรืออย่างคน
ที่เขียนถามเข้ามาเข้าใจว่าไม่ได้ ตรวจตัวแปรให้ดีเลยทำให้มีปัญหา ผมเลยได้ทำการเสาะแสวงหา code การอ่าน
check box มาลองใช้ดูพบว่า เจ๋งดีครับ เลยเขียนเป็นบทความลงมาให้ดูเผื่อใครอยากรู้บ้าง

วิธีการง่ายๆให้ใช้ array ครับ ยกตัวอย่างเช่น ใน form ของเรามี html ดังนี้นะครับ
------------------------------------------------------------------------------
คุณเลี้ยงอะไรบ้าง?
<FORM>
<INPUT TYPE=checkbox NAME=PET_ARRAY[] value=dog>หมา<br>
<INPUT TYPE=checkbox NAME=PET_ARRAY[] value=cat> แมว<br>
<INPUT TYPE=checkbox NAME=PET_ARRAY[] value=fish> ปลา<br>
</FORM>
------------------------------------------------------------------------------

ถ้าสังเกตุชื่อตัวแปรจะตั้งเป็น PET_ARRAY[] ซึ่งเป็นตัวแปรแบบ array นะครับ ทีนี้ถ้าอยากรู้ว่าผู้ใช้เลือกอะไรบ้างให้ลองดู code นี้ครับ
------------------------------------------------------------------------------
if ($PET_ARRAY)
{
$PET = implode($PET_ARRAY, ",");
$result = mysql_query ("UPDATE dbname SET PET = '$PET'");
if(!$result)
{
echo "<B>UPDATE unsuccessful:</b> ", mysql_error();
exit;
}
}
------------------------------------------------------------------------------
ถ้าสังเกตุอีกจะเห็นว่าเราใช้ฟังก์ชัน implode เพื่อทำให้ $PET เป็นข้อความที่ถูกคั่นด้วย comma ครับ หรือหากใครต้องการใช้ทีละตัว ก็อาจใช้ code
ได้ดังนี้ครับ
------------------------------------------------------------------------------
for ($i=0;$i<count($PET_ARRAY);$i++) {
$PET = $PET_ARRAY[$i];
echo $PET."<br>";
mysql_query("UPDATE dbname SET PET='$PET'");
}
------------------------------------------------------------------------------
อะไรทำนองนี้ครับ ลองเอาเทคนิคนี้ไปใช้ดูครับ ช่วยได้เยอะทีเดียวครับ ถ้างงๆ ก็ถามเพิ่มเติมเข้ามาได้ครับ

Field Clear Script

<script language="Javascript">
<!--
//This credit must stay intact
//Script by http://www.java-Scripts.net and http://wsabstract.com
 function doClear(theText) {
     if (theText.value == theText.defaultValue) {
         theText.value = ""
     }
 }
//-->
</script>

การใช้งาน
<form>
<input type="text" size=15 value="Enter name" onFocus="doClear(this)">
</form>

limitation of shapefile

  เมื่อวานมีน้องคนหนึ่งโทรมาถาว่าทำไม่ dump ข้อมูลจาก database มาเป็น shapefile แล้วไม่สำเร็จสักที นั่งดูกันอยู่สักพักก็ถึงบางอ้อ เพราะว่า shapefile ก็มีข้อจำกัดที่ผมคิดว่าหลายๆคนยังไม่รู้ ข้อจำกัดที่ว่าได้แก่
         1. shapefile 1 ไฟล์ประกอบด้วยไฟล์ย่อยหลักๆคือ .shp, .shx, .dbf และ prj (srs info) โดยหนึ่ง shapefile จะบรรจุข้อมูลได้ไม่เกิน 2 GB
          2. shapefile 1 ไฟล์บรรจุข้อมูลได้ทั้งหมด 65535 records เกินไม่ได้
          3. ใน 1 recordเก็บข้อมูลได้มากสุด 1000 bytes หรือ ไม่เกิน 32 field
          4. ชื่อ Field limited แ ค่ 8 ตัวอักษร
          5. เก็บตัวอักษรใน field ได้มากสุด 254 byte
         6. ไม่ support Unicode

อ่านรายละเอียดเพิ่มเติมที่ http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf

วันศุกร์ที่ 17 พฤษภาคม พ.ศ. 2556

Start Service Apache ไม่ได้

  ที่มา http://roboticlab.blogspot.com/2012/04/start-service-apache.html

       ก่อนอื่นๆ ก็เนื่องจากมีเพื่อนมาถามเยอะมาก และก็บ่นกันบ่อย โดยเฉพาะตอนเรียนวิชาเว็บ หรือเกิดอยากจะทำเว็บขึ้นมาแต่พอไปรัน Service ของ Apache แล้วเกิดปัญหาขึ้น
XAMPP apache port problem 80 or 443
ถึง ณ จุดนี้ัแล้ว ผมก็จะของนำเสนอวิธีแบบตรงจุด ไม่ต้องมาสุ่มไล่ลบโปรแกรมตามที่ในลายๆเว็บเค้าแนะนำกัน จากจุดนี้เราทราบว่า Port  80 หรือ 443 มีปัญหาเรามีวิธีง่ายๆ

1.ตรวจสอบโปรแกรมที่ใช้่ Port ชนกัน

  • Start >> พิมพ์คำสั่ง cmd ขึ้นมา 
  • พิมพ์คำสั่ง netstat -o -n -a | findstr 0.0:80 หรือ netstat -o -n -a | findstr 0.0:443 เพือตรวจสอบ Port ที่ใช้งาน โดยที่เลข  80 กับ 443 คือ Port สามารถที่จะปรับเปลี่ยนได้ตามความเหมาะสมจ้า
  • เราก็จะพบว่ามี  1 Process ที่เกี่ยวข้อง โดยเราจะมาสนใจที่เลข 1044
  • เลข 1044 คือ เลข PID คือ หมายเลขของ Process โดยเราจะไปตรวจดูต่อว่าเลขนี้ เป็นของอะไร โดยการเปิด Task Manager ขึ้นมา จากนั้นไปที่เมนู View >> Select Column เพื่อไปเลือกให้แสดงค่า PID ออกมาจากนั้นเราก็ไล่หา จะพบว่าเป็นของ VMWARE

2.จะแก้ไขอย่างไร 

          จากจุดนี้เราก็ทราบแล้วว่าจะแก้ปัญหาอย่างไร ถ้าเป็นโปรแกรมอื่น เช่น Skype เราอาจจะไปปรับ option ของโปรแกรม แต่ในกรณีนี้เป็นของ VMWARE ซึ่งเราก็กลัวว่าถ้าแก้แล้ว จะมีปัญหากับ Host ที่รันอยู่ในระบบ หรือ ไม่ ผมก็เลยจะเปลี่ยน Port ของทาง Apache แทน แต่จะเขียนรวมไปถึง Mysql ด้วยโดยจะยกตัวอย่างจาก xampp
  • การเปลี่ยน Port 80 (Http) ใน Apache
    1. เปิดไฟล์ \xampp\apache\conf\httpd.conf
    2. หาคำว่า “Listen 80″ เปลี่ยนเป็น “Listen 8080″
    3. หาคำว่า “ServerName localhost:80″ เปลี่ยนเป็น “ServerName localhost:8080″
  • การเปลี่ยน Port 443 (Https) ใน Apache
    1. เปิดไฟล์ \xampp\apache\conf\extra\httpd-ssl.conf
    2. หาคำว่า “Listen 443″ เปลี่ยนเป็น “Listen 450″
    3. หาคำว่า “ServerName localhost:443″ เปลี่ยนเป็น “ServerName  localhost:450″
  • การเปลี่ยน Port 3306 ของ Mysql
    1. เปิดไฟล์ \xampp\mysql\bin\my 
    2. หาคำว่า “port = 3306″ เปลี่ยนเป็น “port = 3336″ (มีสองจุด)

แก้ปัญหา Start Apache 2.2 ไม่ได้

ที่มา:http://langisser.wordpress.com/2012/05/15/%E0%B9%81%E0%B8%81%E0%B9%89%E0%B8%9B%E0%B8%B1%E0%B8%8D%E0%B8%AB%E0%B8%B2-start-apache-%E0%B9%84%E0%B8%A1%E0%B9%88%E0%B9%84%E0%B8%94%E0%B9%89/

ถ้าวันนึงไม่สามารถ start service apache ได้ลองทำตามนี้ดู
1.ลองดูให้เห็นกับตาว่า  start service apache ไม่ขึ้น ให้ไปที่ Service แล้วคลิ็กขวาเลือก All Tasks -> Start

2. ไม่ขึ้นจริงๆด้วย โดยจะขึ้นข้อความ “Windows could not start the Apache2.2 on Local Computer. For more information, review the System Event Log. If this is a non-Micorsoft service, contact the service vendor, and refer to service-specific error code 1.”
apache service.jpg
2.1 จากที่ลองค้นหาดูตามเวบต่างๆพบว่าที่ start ไม่ขึ้นนั้นเกิดจาก port 80 มีการใช้งานอยู่ ตรงนี้มันวิธีแก้ง่ายๆอยู่คือเปลี่ยน port ของ Apache ให้ไปใช้ port อื่น เช่น 8080 หรือ 8088 หรือ เลขอื่นๆแทนที่ไม่ชนกับที่มีอยุ่ โดย เข้าไปเปลี่ยนที่ไฟล์ C:\AppServ\Apache2.2\conf\httpd.conf แล้วแก้เลข port จาก “Listen 80″ เป็น port ที่ต้องการ เช่น “Listen 8080″ แล้ว start service อีกครั้งก็จะใช้งานได้

3.  จากที่แนะนำไปคือการเปปลี่ยนสามารเปลี่ยน default port ของ apache ถ้าไม่อยากเปลี่ยนให้ตรวจสอบสิ่งเหล่านี้
3.1 ดูว่า service ไหนใช้ port 80 อยู่ แล้วทำการปิด service นั้น โดยพิมพ์คำสั่ง netstat -nao ที่ Command prompt จะได้ output ประมาณนี้
1
2
3
4
5
6
7
8
9
10
11
12
Active Connections
 
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 868
TCP 0.0.0.0:443 0.0.0.0:0 LISTENING 2616
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:902 0.0.0.0:0 LISTENING 2416
TCP 0.0.0.0:912 0.0.0.0:0 LISTENING 2416
TCP 0.0.0.0:1025 0.0.0.0:0 LISTENING 508
TCP 0.0.0.0:1026 0.0.0.0:0 LISTENING 984
TCP 0.0.0.0:1027 0.0.0.0:0 LISTENING 328
จะเห็นว่ามี 0.0.0.0:80 ถูกใช้งานอยู่โดย PID(Process Identifier) เลข 4 ขั้นตอนต่อไปก็ดูว่า process นี้คืออะไร ปิดได้หรือไม่
3.2 ดู process id ว่าคือ service อะไรให้ไปที่ Task Manager คลิ้กที่ process แล้วเลือก view -> select column แล้วติ้กถูกที่ PID(Process Identifier)
3.3 จะเป็นว่า PID 4 เป็น process ของ system ไม่สามารถที่จะ kill ได้ หากเป็นของ program อืนๆที่เรารู้จักก็ให้ลองปิด program นั้นๆไปก่อนแล้วลอง start service อีกครั้ง Skype, NOD32 หรือ IIS

4. เมื่อพบว่าเป็นของ system ทำให้ไม่สามารถปิดได้ วิธีการก็คือไม่ให้มัน start ขึ้นมาแทน อ้างอิงจากที่นี่
1) Launch RegEdit
2) Go to: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP
3) Change the value of ’start’ to 4 (disabled)
4) Re-boot your computer
5. ลอง Start service Apache อีกครั้ง

appserv 2.5.10 บน OS Windows 7 (64 bit) แล้วเข้า localhost ไม่ได้

1.ลองตรวจสอบ ว่า service apache start หรือไม่ครับ
ถ้า start ปกติ ลองเรียกเป็นแบบ ip ดูว่าได้หรือไม่นะครับ. http://127.0.0.1
ลองตรวจสอบเรื่อง program ที่ใช้งาน ว่ามีการใช้งานบน port 80 อยู่แล้วหรือไม่
เช่นพวก iis หรือตรวจสอบที่เครื่อง app server ว่ามีการลง firewall หรือ av ที่มี firewall
ไป block หรือไม่ครับ

2.ปกติแล้ว Windows 7 นั้นจะไม่ได้เปิด ให้ใช้ localhost ไว้ที่ host file หน่ะครับ เราต้องไปเอา comment ออกก่อน เข้าไปเชค DocumentRoot ที่ไฟล์ config ของ Apache ดู

C:\AppServ\Apache2.2\conf\httpd.conf

ว่าอยู่ที่ C:/AppServ/www
และเชค ServerName


#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName localhost:80

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "C:/AppServ/www"


 


ปล.ถ้าไม่ได้จริงๆ  โทรหาผม วีระพงษ์ 086-6451435