Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > PHP > PHP Forum > มีวิธีรับตัวแปรจากฟอร์มจำนวนมากลงฐานแบบสั้นๆไหมครับ



 

มีวิธีรับตัวแปรจากฟอร์มจำนวนมากลงฐานแบบสั้นๆไหมครับ

 



Topic : 112975



โพสกระทู้ ( 17 )
บทความ ( 0 )



สถานะออฟไลน์




คือสมมติว่าผมมีแบบสอบถามอยู่ 1 หน้า มี 70 ข้อ
ผมส่งข้อมูลจากฟอร์มมาประกอบไปด้วย

user,formID,question1,...,question70

ซึ่งเวลาเก็บลงฐานผมจะเก็บลงฐานแบบ

user | formID | questionSeq | txtAnswer | 001 A01 1 test 001 A01 2 test 001 A01 3 test 001 A01 4 test


ซึ่งหากผมเขียนโค๊ด PHP ผมจะต้อง insert ครั้งละ 1 คำถามแน่ๆ

มันจะมีวิธีไหมครับที่จะไม่ต้องเขียน stringQuery 70 บรรทัด



Tag : PHP, MySQL









ประวัติการแก้ไข
2014-12-01 08:56:11
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2014-12-01 08:48:53 By : whtchk View : 771 Reply : 14
 

 

No. 1



โพสกระทู้ ( 221 )
บทความ ( 3 )



สถานะออฟไลน์
Facebook

ใช้ for ครับ

Code (PHP)
for($i=0;$i<=count($_POST);$i++){
      $Sql = ""; // insert $_POST[$i] 
}







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-12-01 08:59:08 By : bunchuai
 


 

No. 2



โพสกระทู้ ( 9,559 )
บทความ ( 2 )



สถานะออฟไลน์


ใช้ longtext เก็บเป็น json ยัดเข้าไปเล่น ทั้ง request

Code (PHP)
$jsonstring=mysql_real_escape_string( json_encode($_REQUEST));
$sql="insert into table set jsonfield='$jsonstring' ";


ข้อเสีย sort ไม่ได้ ค้นหาลำบาก 55555

ก็เลือกเอานะครับ ได้อย่างเสียอย่าง
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-12-01 09:06:12 By : Chaidhanan
 

 

No. 3



โพสกระทู้ ( 1,819 )
บทความ ( 20 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

มีวิธีง่ายๆ ครับ คือใช้ลูปสร้าง INSERT query จากข้อมูลที่ได้ก่อน แล้ว run ทีเดียว
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-12-01 09:09:41 By : phpinfo()
 


 

No. 4



โพสกระทู้ ( 17 )
บทความ ( 0 )



สถานะออฟไลน์


ผมลืมบอกไป ผมต้องการชื่อตัวแปร POST ด้วยอะครับ

อย่างเช่น

001 A1 question1 ans1
001 A2 question2 ans3

มันมีวิธีรับค่า Name จากฟอร์ม ได้ไหมครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-12-01 11:58:49 By : whtchk
 


 

No. 5



โพสกระทู้ ( 9,559 )
บทความ ( 2 )



สถานะออฟไลน์


$_GET $_POST $_REQUEST เป็น array ที่รับค่าจาก form โดยตรงอยู่แล้วครับ

ใช้ json เก็บทั้งกระบิ เลยครับ ได้หมด ข้อเสียก้อย่างที่บอกไว้ครับ
แต่ถ้าใช้ regular expression ระดับ expert ก็โอเคอยู่ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-12-01 12:23:48 By : Chaidhanan
 


 

No. 6



โพสกระทู้ ( 1,819 )
บทความ ( 20 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

ฟอร์มเขียนไว้ประมาณไหน แล้วฐานข้อมูลมีโครงสร้างยังไงครับ จะได้บอกได้ว่าควรปรับเปลี่ยนยังไงและจะเขียนตัวอย่างให้ดู
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-12-01 12:33:25 By : phpinfo()
 


 

No. 7



โพสกระทู้ ( 140 )
บทความ ( 0 )



สถานะออฟไลน์


ถ้ารู้จำนวน input ที่แน่นอนก็ใช้ loop ในการสร้าง SQL Syntax ก็ได้ครับ

เช่นสมมุติว่า เราต้องการ INSERT INTO questionary (user, formID, questionSeq, txtAnswer) VALUES ('001', 'A01', '1', 'test'), ('001', 'A01', '2', 'test2');

ก็อาจจะเขียนแบบนี้ก็ได้ครับ

Code (PHP)
<?php
$data = '';
for($i=1;$i<=70;$i++){
     if($i==1){
          $data .= "('".$_SESSION["user_id"]."','".$_POST["form_id"]."','".$i."','".$POST["question".$i]."')";
     } else {
          $data .= ", ('".$_SESSION["user_id"]."','".$_POST["form_id"]."','".$i."','".$POST["question".$i]."')";
     }
}
$sql = "INSERT INTO questionary  (user, formID, questionSeq, txtAnswer) VALUES ".$data;
$query = mysql_query($sql);
?>


ประมานนี้ครับ


ประวัติการแก้ไข
2014-12-01 13:02:50
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-12-01 13:01:08 By : zinlucifer
 


 

No. 8



โพสกระทู้ ( 1,819 )
บทความ ( 20 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 7 เขียนโดย : zinlucifer เมื่อวันที่ 2014-12-01 13:01:08
รายละเอียดของการตอบ ::
ผมก็จะบอกคล้ายๆ แบบนั้นล่ะครับ
แต่ผมจะไม่มี if ข้างใน พอเชื่อมต่อจบ ก็ตัด , ออก 1 ตัว ไม่ต้องเขียนโค้ดซ้ำ


Code (PHP)
<?php
$sql = 'INSERT INTO `questionary` (`user`, `formID`, `questionSeq`, `txtAnswer`) VALUES ';
for($i = 1; $i <= 70; $i++) {
	$sql .= sprintf("('%s','%s','%s','%s'),",
		$_SESSION['user_id'],
		mysql_real_escape_string($_POST['form_id']),
		$i,
		mysql_real_escape_string($POST['question' . $i])
	);
}
$result = mysql_query(rtrim($sql, ','));




ประวัติการแก้ไข
2014-12-01 13:17:11
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-12-01 13:12:37 By : phpinfo()
 


 

No. 9



โพสกระทู้ ( 17 )
บทความ ( 0 )



สถานะออฟไลน์


คือฟอร์มผมมันจะมี 5 Part ครับ แล้วผมจะตั้งชื่อตัวแปร question+part+ข้อ

เช่น
ตอนที่ 1
ข้อ 1 <input type="text" name="q11">
ข้อ 2 <input type="text" name="q12">

ตอนที่ 2
ข้อ 1 <input type="text" name="q21">
ข้อ 2 <input type="text" name="q22">

แต่จะติดตรงที่ว่า ตอนที่ 4 จะเป็นแบบ Dynamic คือคนสร้างฟอร์มจะสร้างกี่คำถามก็ได้


ส่วนฐานข้อมูลที่รองรับไว้ก็ตามนี้เลยครับ
user | formID | questionSeq | txtAnswer

ตอนแรกจะทำเป็น 1 คน 1 Record เลย คือนำคำถามมาทำเป็นฟิลด์เลย แต่ติดตรงที่ว่า Part 4 มัน Dynamic เลยจำเป็นต้องเก็บแบบนี้น่ะครับ

ส่วนเรื่อง json คือผมไม่เคยศึกษาและใช้ตัวนี้เลยน่ะครับ คงต้องศึกษาดูก่อน

ขอบคุณครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-12-01 13:36:37 By : whtchk
 


 

No. 10



โพสกระทู้ ( 9,559 )
บทความ ( 2 )



สถานะออฟไลน์


ถ้าแบบนี้ไม่ต้องเก็บเป็น json หรอกครับ

เก็บเป็น ตารางอ้างอิง ก็พอครับ
แต่ละคำถาม เป็น 1 record ไปเลยครับ จัดเก็บ เป็น divIsion section อ้างอิงครับ

ตารางที่เก็บ
ผู้ตอบ
part
ข้อที่
คำถาม
คำตอบ


ประวัติการแก้ไข
2014-12-01 13:48:33
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-12-01 13:48:06 By : Chaidhanan
 


 

No. 11



โพสกระทู้ ( 1,819 )
บทความ ( 20 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

ถ้ามันเป็น dynamic คุณควรใช้ input แบบ array ครับ
ซึ่ง array จะใช้ index เป็นตัวเลขหรือ string ก็ได้

Code (PHP)
<form method="post">
<input type="text" name="q[A01][1]"> <!-- พาร์ท 1 ข้อ 1 -->
<input type="text" name="q[A01][2]"> <!-- พาร์ท 1 ข้อ 2 -->
<input type="text" name="q[A01][3]"> <!-- พาร์ท 1 ข้อ 3 -->
.
.
.
<input type="text" name="q[A02][1]"> <!-- พาร์ท 2 ข้อ 1 -->
<input type="text" name="q[A02][2]"> <!-- พาร์ท 2 ข้อ 2 -->
<input type="text" name="q[A02][3]"> <!-- พาร์ท 2 ข้อ 3 -->


แล้วพออ่านใน php ก็อ่านแบบนี้

$_POST['q']['A01'][1] // พาร์ท 1 ข้อ 1
$_POST['q']['A01'][2] // พาร์ท 1 ข้อ 2
$_POST['q']['A01'][3] // พาร์ท 1 ข้อ 3


ซึ่งพอมันเป็น array แบบนี้แล้ว การวนลูปเพื่อทำอะไรกับมันจะง่ายมากครับ ไม่ต้องใช้การเชื่อมสตริงให้ยุ่งยาก เพราะ php มี foreach

<?php
$sql = 'INSERT INTO `questionary` (`user`, `formID`, `questionSeq`, `txtAnswer`) VALUES ';
foreach ($_POST['q'] as $form_id => $q_group) {
	foreach ($q_group as $seq => $ans)
		$sql .= sprintf("('%s','%s','%s','%s'),",
			$_SESSION['user_id'],
			$form_id,
			$seq,
			mysql_real_escape_string($ans)
		);
	}
}
$result = mysql_query(rtrim($sql, ','));


ประมาณนี้ครับ
ถ้าทำแบบนี้ก็จะมีการ INSERT แค่ครั้งเดียว มีประสิทธิภาพมากๆ


ประวัติการแก้ไข
2014-12-01 13:58:10
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-12-01 13:57:23 By : phpinfo()
 


 

No. 12



โพสกระทู้ ( 17 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 11 เขียนโดย : phpinfo() เมื่อวันที่ 2014-12-01 13:57:23
รายละเอียดของการตอบ ::
โอ้ววว ทำไมผมคิดไม่ถึงครับเนี่ยยยย T^T โอเคครับ เดี๋ยวจะลองทำดูครับ

ขอบคุณทุกท่านมากครับผมสำหรับการช่วยเหลือครั้งนี้

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-12-01 15:10:23 By : whtchk
 


 

No. 13



โพสกระทู้ ( 140 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 8 เขียนโดย : phpinfo() เมื่อวันที่ 2014-12-01 13:12:37
รายละเอียดของการตอบ ::
จะจำไปใช้ครับ ขอบคุณมากครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-12-01 15:43:18 By : zinlucifer
 


 

No. 14



โพสกระทู้ ( 17 )
บทความ ( 0 )



สถานะออฟไลน์


ได้วิธีแล้วครับ หาทางจนได้

ใช้

Code (PHP)
foreach($_POST as $name => $value)
	{
		if($value != '') { 
                     // insertMethod
                 }
	}

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-12-04 16:22:48 By : whtchk
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : มีวิธีรับตัวแปรจากฟอร์มจำนวนมากลงฐานแบบสั้นๆไหมครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 05
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่