|
|
|
มีวิธีรับตัวแปรจากฟอร์มจำนวนมากลงฐานแบบสั้นๆไหมครับ |
|
|
|
|
|
|
|
ใช้ for ครับ
Code (PHP)
for($i=0;$i<=count($_POST);$i++){
$Sql = ""; // insert $_POST[$i]
}
|
|
|
|
|
Date :
2014-12-01 08:59:08 |
By :
bunchuai |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ใช้ 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มีวิธีง่ายๆ ครับ คือใช้ลูปสร้าง INSERT query จากข้อมูลที่ได้ก่อน แล้ว run ทีเดียว
|
|
|
|
|
Date :
2014-12-01 09:09:41 |
By :
phpinfo() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมลืมบอกไป ผมต้องการชื่อตัวแปร POST ด้วยอะครับ
อย่างเช่น
001 A1 question1 ans1
001 A2 question2 ans3
มันมีวิธีรับค่า Name จากฟอร์ม ได้ไหมครับ
|
|
|
|
|
Date :
2014-12-01 11:58:49 |
By :
whtchk |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$_GET $_POST $_REQUEST เป็น array ที่รับค่าจาก form โดยตรงอยู่แล้วครับ
ใช้ json เก็บทั้งกระบิ เลยครับ ได้หมด ข้อเสียก้อย่างที่บอกไว้ครับ
แต่ถ้าใช้ regular expression ระดับ expert ก็โอเคอยู่ครับ
|
|
|
|
|
Date :
2014-12-01 12:23:48 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ฟอร์มเขียนไว้ประมาณไหน แล้วฐานข้อมูลมีโครงสร้างยังไงครับ จะได้บอกได้ว่าควรปรับเปลี่ยนยังไงและจะเขียนตัวอย่างให้ดู
|
|
|
|
|
Date :
2014-12-01 12:33:25 |
By :
phpinfo() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้ารู้จำนวน 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 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() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คือฟอร์มผมมันจะมี 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าแบบนี้ไม่ต้องเก็บเป็น json หรอกครับ
เก็บเป็น ตารางอ้างอิง ก็พอครับ
แต่ละคำถาม เป็น 1 record ไปเลยครับ จัดเก็บ เป็น divIsion section อ้างอิงครับ
ตารางที่เก็บ
ผู้ตอบ
part
ข้อที่
คำถาม
คำตอบ
|
ประวัติการแก้ไข 2014-12-01 13:48:33
|
|
|
|
Date :
2014-12-01 13:48:06 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้ามันเป็น 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() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ได้วิธีแล้วครับ หาทางจนได้
ใช้
Code (PHP)
foreach($_POST as $name => $value)
{
if($value != '') {
// insertMethod
}
}
|
|
|
|
|
Date :
2014-12-04 16:22:48 |
By :
whtchk |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 00
|