各位大大好:
想做每個作品評分,要怎麼把每個作品的號碼跟3個評分寫在同一列資料庫,謝謝
echo "<form action='r_wr.php' method='post'>";
$i=1;
//echo "<thead><tr><td>作品編號</td><td>作品名稱</td><td width='40%'>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr></thead>";
$result=$conn->query($sql);
foreach($result->fetchAll() as $row)
{
echo '<table border=3 id="electable" width="80%" height="100%">';
echo"<tbody><tr>";
echo "<td width='15%'align='center' bgcolor='#cccccc'>題目</td><td width='40%'>".$row['name']."</td><td width='5%'align='center'bgcolor='#cccccc'>編號</td><td colspan='4'width='15%' align='center'><input type='hidden' name='num$i' value='$i'>".$row['識別碼']."</td>";
echo"</tr>";
echo "<tr><td width='15%' align='center' bgcolor='#cccccc' >組員</td><td colspan='6'>".$row['author']."</td></tr>";
echo"<tr><td align='center' bgcolor='#cccccc'>項次</td><td bgcolor='#cccccc'>評分項目</td><td align='center' bgcolor='#cccccc'>5</td><td align='center' bgcolor='#cccccc'>4</td><td align='center' bgcolor='#cccccc'>3</td><td align='center' bgcolor='#cccccc'>2</td><td align='center' bgcolor='#cccccc'>1</td></tr>";
echo"<tr><td align='center'>1</td><td>目的與動機</td><td align='center'><input type='radio' name='purpose$i' value='5'></td><td align='center'><input type='radio' name='purpose$i' value='4'></td><td align='center'><input type='radio' name='purpose$i' value='3'></td><td align='center'><input type='radio' name='purpose$i' value='2'></td><td align='center'><input type='radio' name='purpose$i' value='1'></td></tr>";
echo"<tr><td align='center'>2</td><td>產品構想</td><td align='center'><input type='radio' name='conception$i' value='5'></td><td align='center'><input type='radio' name='conception$i' value='4'></td><td align='center'><input type='radio' name='conception$i' value='3'></td><td align='center'><input type='radio' name='conception$i' value='2'></td><td align='center'><input type='radio' name='conception$i' value='1'></td></tr>";
echo"<tr><td align='center'>3</td><td>技術原理</td><td align='center'><input type='radio' name='techonology$i' value='5'></td><td align='center'><input type='radio' name='techonology$i' value='4'></td><td align='center'><input type='radio' name='techonology$i' value='3'></td><td align='center'><input type='radio' name='techonology$i' value='2'></td><td align='center'><input type='radio' name='techonology$i' value='1'></td></tr>";
echo"</tbody>";
echo "</table>";
echo"<br/>";
$i++;
}
echo "<input type='submit' value='確認送出' />";
echo "</form>";
r_wr.php
請問寫回資料庫要怎麼分排列1怎麼寫回第一列
$post_['num1']=1,
$post_['$purpose1']=5,
$post_['$conception1']=5,
$post_['$techonology1']=5
請問寫回資料庫要怎麼分排列2怎麼寫回第二列
$post_['num2']=1,
$post_['$purpose2']=4,
$post_['$conception2']=5,
$post_['$techonology2']=4
我寫這樣好像變成每個值就是一個迴圈
foreach($_POST as $key => $value){
echo($key."=".$value."<br>");
if(substr($key, 0, 2) == 'num'){
$projectnum=$value;
echo($key."=". $projectnum."<br>");
}
else if (substr($key, 0, 6) == 'purpose') {
$purpose=$value;
echo($key."=".$purpose."<br>");
}
else if (substr($key, 0, 9) == 'conception'){
$conception=$value;
echo($key."=".$conception."<br>");
}
else if(substr($key, 0, 10) == 'techonology' ){
$techonology=$value;
echo($key."=".$techonology."<br>");
}
$sql6="INSERT INTO score(projectnum,purpose,conception,techonology) values (:projectnum,:purpose,:conception,:techonology)"; //單冒號宣布冒號裡的字串 雙冒號是分析這個冒號裡的語法
$sql8 =$conn->prepare($sql6);
$sql8->execute(array(
"projectnum" =>$projectnum,
"purpose"=>$purpose,
"conception"=>$conception,
"techonology"=>$techonology
));
主頁模擬您的寫法,忽略sql資料庫
index.php
<?php
for($i=1; $i<=5; $i++){
echo "
<table>
<tr>
<td>組員</td>
<td><input type='text' name='author[]' value='我是組員$i'></td>
<td>編號</td>
<td colspan='4'><input type='text' name='num[]' value='$i'></td>
</tr>
<tr>
<td>題目</td>
<td colspan='6'><input type='text' name='title[]' value='我是題目$i'></td>
</tr>
<tr>
<td>項次</td>
<td>評分項目</td>
<td>5</td>
<td>4</td>
<td>3</td>
<td>2</td>
<td>1</td>
</tr>
<tr>
<td>1</td>
<td>目的與動機</td>
<td><input type='radio' name='purpose".$i."[]' value='5'></td>
<td><input type='radio' name='purpose".$i."[]' value='4'></td>
<td><input type='radio' name='purpose".$i."[]' value='3'></td>
<td><input type='radio' name='purpose".$i."[]' value='2'></td>
<td><input type='radio' name='purpose".$i."[]' value='1'></td>
</tr>
<tr>
<td>2</td>
<td>產品構想</td>
<td><input type='radio' name='idea".$i."[]' value='5'></td>
<td><input type='radio' name='idea".$i."[]' value='4'></td>
<td><input type='radio' name='idea".$i."[]' value='3'></td>
<td><input type='radio' name='idea".$i."[]' value='2'></td>
<td><input type='radio' name='idea".$i."[]' value='1'></td>
</tr>
<tr>
<td>3</td>
<td>技術原理</td>
<td><input type='radio' name='tec".$i."[]' value='5'></td>
<td><input type='radio' name='tec".$i."[]' value='4'></td>
<td><input type='radio' name='tec".$i."[]' value='3'></td>
<td><input type='radio' name='tec".$i."[]' value='2'></td>
<td><input type='radio' name='tec".$i."[]' value='1'></td>
</tr>
</table>";
}
?>
<button type="submit">確認</button>
</form>
接收頁
post.php
<?php
$author = $_POST['author'];
$title = $_POST['author'];
for($i=0;$i<sizeof($author);$i++){
$purpose = $_POST['purpose'.($i+1)];
$idea = $_POST['idea'.($i+1)];
$tec = $_POST['tec'.($i+1)];
echo "作者".$author[$i]." + 題目".$title[$i]." + 分數一:".$purpose[0]." + 分數二:".$idea[0]." + 分數三:".$tec[0]."<br>";
}
?>
同一個作者與題目所評選之分數就會在同一列!
不知這個回答是否是你所需要的?
er大您好:沒錯這是我想要的,想詢問為什麼$tec[0]是用0呢
謝謝你
你可以先用
echo $purpose...
等三個變數,網頁的回應會顯示這三個都是陣列。不會顯示分數
然後你再用
echo var_dump($purpose);
得到的網頁回應如下:
array(1) { [0]=> string(1) "3" } array(1) { [0]=> string(1) "3" } array(1) { [0]=> string(1) "3" } array(1) { [0]=> string(1) "3" } array(1) { [0]=> string(1) "3" }
每一組的陣列都是[0]
先學好form的特性吧。
input的radio類型,請用如下的方式處理
<input type='radio' name='conception$i[]' value='5'>
之後再用FOREACH做整合出來就行了。
你用這樣子要寫是一件很麻煩的事。而且你因該post值也會不正確才對。
先學好form。
浩瀚大大您好:我加了以後會變這樣@ @
Parse error: syntax error, unexpected ']', expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)
我猜您是想conception[] ($i是變數),但多加[]每個作品的項次1只能選一個作品點選,所以才用變數處理..
['$num'],['$purpose'],['$conception'],['$techonology']
你這個是陣列吧 你存回資料庫的欄位名稱不一樣 當然就被資料庫認為是新的欄位了
是的,因為都同一個名稱radio點的時候會有問題
其實我不懂這邊為什麼要用
<input type='radio' name='conception$i[]' value='5'>
這樣 $_POST[conception$i]
如果有值
不是只是一個只有一個元素的陣列嗎?
那為何不直接用原來的寫法就好?
頁面顯示會是我想要的結果,但是寫回資料庫,無法寫在同一列,會一直產生新的一筆資料(有點難解釋..)
$post_['num1']=1,
$post_['$purpose1']=5,
$post_['$conception1']=5,
$post_['$techonology1']=5
$sql8->execute(array(":projectnum" =>$projectnum,":purpose"=>$purpose,":conception"=>$conception,":techonology"=>$techonology));
這個不用加冒號嗎?
剛剛有把資料慢慢拆解成我要的,但是總覺得有更簡便的方法..
望各位不吝指教
foreach ($_POST as $key => $value){
$menu_category[] = $value;
}
$block=array_chunk($menu_category,4);
foreach ($block as $key => $row) {
$projectnum=$row[0];
$purpose=$row[1];
$conception=$row[2];
$techonology=$row[3];
$sql6="INSERT INTO score(projectnum,purpose,conception,techonology) values (:projectnum,:purpose,:conception,:techonology)";
$sql8 =$conn->prepare($sql6);
$sql8->execute(array(
"projectnum" =>$projectnum,
"purpose"=>$purpose,
"conception"=>$conception,
"techonology"=>$techonology
));
}
conception$i[]
為什麼 不改成
conception[$i]
這樣送出的時候會直接轉成陣列 不是比較好操做嗎
回一下取值的部分
原先的做法是
foreach($_POST as $key => $value) {
//依據 $key ,把 $value 設定給對應參數
}
這邊可能會因為 $key 順序的問題得不到想要的結果
下面是 r_wr.php 關於取值的部分提供參考
(SQL部分就先略過了)
<?php
$nameArray=['purpose', 'conception', 'techonology'];
$incomplete=[]; //儲存沒有填寫完成的 index
$data=[]; //儲存結果
for($i=1; isset($_POST["num$i"]); ++$i) {
$tmp=[];
$complete=true;
foreach($nameArray as $name) {
if(!isset($_POST[$name.$i])) {
$incomplete[]=$i;
$complete=false;
break;
}
$tmp[$name]=$_POST[$name.$i];
}
if(!$complete) {
continue;
}
$data[$_POST["num$i"]]=$tmp;
}
if(count($incomplete) > 0) {
exit('有欄位尚未填寫');
}
echo "<h3>取得資料</h3>";
echo "<pre>".print_r($data, true)."</pre>";
要不要考慮在前端用 js 處理後
以 json 的格式傳到後端呢?
然後你的回覆
怎麼讓我感覺你想要問的是 update
不是就忽略掉sql語句那部分
前端
<?php
echo "<form action='r_wr.php' method='post' id = 'myForm'>";
...//中間都沒動
echo "</form>";
?>
<script>
const myForm = document.getElementById('myForm');
myForm.addEventListener('submit', (e) => {
e.preventDefault();
const myData = [];
for (let i = 1; i <= <?php echo count($datas)?>; i += 1) {
const tempData = {};
const projectNum = document.getElementsByName(`num${i}`)[0].value;
const purposeScore = [...document.getElementsByName(`purpose${i}`)].filter(radio => radio.checked)[0].value;
const conceptionScore = [...document.getElementsByName(`conception${i}`)].filter(radio => radio.checked)[0].value;
const techonologyScore = [...document.getElementsByName(`techonology${i}`)].filter(radio => radio.checked)[0].value;
myData.push({ projectNum, purposeScore, conceptionScore, techonologyScore});
}
/*
傳到後端的資料長這樣
[
{
"projectNum":"1",
"purposeScore":"5",
"conceptionScore":"4",
"techonologyScore":"3"
},
{
"projectNum":"2",
"purposeScore":"3",
"conceptionScore":"2",
"techonologyScore":"1"
}
]
*/
const myformData = new FormData();
myformData.append('data', JSON.stringify(myData));
// 以下可用jquery之類取代
const xhr = new XMLHttpRequest();
xhr.open('POST', 'r_wr.php', true);
xhr.send(myformData);
});
</script>
後端
<?php
$conn = new PDO('mysql:host=localhost;dbname=myDB;charset=utf8', 'root', '');
$mydata = json_decode($_POST['data'], true);
foreach ($mydata as $key => $value) {
$projectnum = $mydata[$key]['projectNum'];
$purpose = $mydata[$key]['purposeScore'];
$conception = $mydata[$key]['conceptionScore'];
$techonology = $mydata[$key]['techonologyScore'];
$sql6="UPDATE `score` SET `purpose` = ?, `conception` = ?, `techonology` = ? WHERE projectnum = ?";
$sql8 =$conn->prepare($sql6);
$sql8->execute(array(
$purpose, $conception, $techonology, $projectnum
));
}
?>
大概是這樣
可能有些地方沒寫得很好
請見諒
如果你要在一個頁面上同時出現二個以上表單讓USER填寫
表單的欄位一開始就要用陣列的概念處理
例如
<input type="text" name="title[]" value="">
<input type='radio' name='techonology[]' value='4'>
<input type='radio' name='techonology[]' value='3'>
<input type='radio' name='techonology[]' value='2'>
<input type='radio' name='techonology[]' value='1'>
後端你接收到時,你收到的每個欄目就是一個陣列,每個欄目資料由0開始
title[0]
title[1]
.......