2012-02-17 21 views
0

誰も助けることができたら、これは意味があり、事前に感謝します。配列に追加の行を挿入してデータベースに入力してください

テーブルにデータの配列が表示されているため、データを編集して編集したデータでデータベースを更新できます。

<input type='button' value='new row' id='save' onClick="addRow()"/> 
<table id='mech_table'> 
<tr> 
<td></td> 
<td></td> 
<td><input type='text' size='30' name='value_total'id='mech_value_total' value='£0.00' readonly='readonly'/></td> 
<td></td> 
<td><input type='text' size='30' name='value_claim' id='mech_claim_total' value='£<?php echo $row_MECHT['mech_total']; ?>' readonly='readonly'/></td> 
</tr><tr> 
<th>ID</th> 
<th>Description</th> 
<th>Value</th> 
<th>%</th> 
<th>Claim</th> 
</tr> 
<?php while ($MECH = mysql_fetch_array($result)) { 
?> 
<form name='form_update' method='post' action="<?php echo $editFormAction; ?>"> 
<tr> 
<td><?php echo $MECH['id']; ?><input type='hidden' name='id[]' value='<?php echo $MECH['id'];?>' /></td> 
<td class='description_row'><input type='text' size='70' name='description[]' value='<?php echo $MECH['description'];?>' /></td> 
<td class='value_row'><input class='mech_value_total' type='text' size='30' name='value[]' value='<?php echo $MECH['value'];?>' /></td> 
<td class='percent_row'><input class='percent' type='text' size='10' name='percentclaim[]' value='<?php echo $MECH['percentclaim'];?>' /></td> 
<td class='claim_row'><input class='mech_claim_total' type='text' size='30' name='claim[]' value='<?php echo $MECH['claim'] ?>' readonly='readonly'/></td> 
</tr> 
<?php ++$ia; 
} 
?> 
</table> 
<input type='submit' value='save' id='save' /><br /><br /><br /> 
</form> 


$editFormAction = $_SERVER['PHP_SELF']; 
if (isset($_SERVER['QUERY_STRING'])) { 
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']); 
} 

$size = count($_POST['id']); 
$i = 0; 
while($i<$size){ 
$description= $_POST['description'][$i]; 
$value= $_POST['value'][$i]; 
$percentclaim= $_POST['percentclaim'][$i]; 
$claim= $_POST['claim'][$i]; 
$id = $_POST['id'][$i]; 
$query = "INSERT INTO applicationmech 
        SET id='$id', 
         description='$description', 
         value='$value', 
         percentclaim='$percentclaim', 
         claim='$claim' 
ON DUPLICATE KEY UPDATE description='$description', 
         value='$value', 
         percentclaim='$percentclaim', 
         claim='$claim'"; 
mysql_query($query) or die ("Error in query: $query"); 
$updateGoTo = "preditvaluation.php"; 
    if (isset($_SERVER['QUERY_STRING'])) { 
    $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?"; 
    $updateGoTo .= $_SERVER['QUERY_STRING']; 
} 
header(sprintf("Location: %s", $updateGoTo)); 
++$i; 
} 

私は私が私のテーブルに行を追加することができますJavaScriptを使用して簡単なボタンを作成しました。

function addRow() { 

$('#mech_table tr:last').after('<tr><td><input type="hidden" name="id[]" value="" /></td><td class="description_row"><input type="text" size="70" name="description[]" value="" /></td><td class="value_row"><input class="mech_value_total" type="text" size="30" name="value[]" value="" /></td><td class="percent_row"><input class="percent" type="text" size="10" name="percentclaim[]" value="" /></td><td class="claim_row"><input class="mech_claim_total" type="text" size="30" name="claim[]" value="" readonly="readonly"/></td></tr>'); 

} 

私の問題は、更新ボタンをクリックすると、新しい行のデータが保存されないということです。

私はさまざまな方法を試してきましたが、これを動作させる方法は毎回失敗しました。

+0

メッセージのエラー?? – chenio

+0

エラーメッセージが表示されず、既存のすべての行は正常に更新されますが、新しい行は挿入されません。コードをINSERTだけに変更しても、追加の行は無視されますか? – user1209361

答えて

0

新しい行のデータにはid値がないため、データベースはUPDATE操作で行を更新できません。 、ブラウザ側ではのようなものを

$newids = array(); 

if (!empty($row->id)) { 
    $DB->update('tablename', $data); 
} else { 
    $newid = $DB->insert('tablename', $data); 
    $newids[] = $newid; 
} 

// Now send the new ids back to the browser so that they can be put into those rows 
// and an update operation will be performed next time 
echo json_encode($ids); 

:あなたのような何かをするために、サーバー側のコードを必要とする問題がここに

var ids = jQuery.parseJSON(dataFromAjax); 
var inputsNeedingIds = $('input:inputclass').filter(
    function() { 
     return ($(this).val() == "") && ($(this).attr('name') == 'id[]'); }); 
inputsNeedingIds.each(
    function(i) { 
     this.id.value = ids[i];}); 
+0

ご返信ありがとうございますが、私はそれを動作させることができます!私はまだこれで全く新しいし、何をすべきかをよく理解していません。 私は昨日からいくつかのことを試みましたが、何も動作しませんでした。INSERT INTO ON DUPLICATE KEY UPDATEビットが実行されたときに追加された行が無視されるようです。 – user1209361

0

だけの事はDOMは、新しいフォームのあなたのほかに正しく更新されていないということですaddRow()関数によって補完される要素。フォームは、最初に表示されていたフォーム要素でサブビットされます。

これは、Ajaxサブミットを使用する場合にのみ可能です。最も簡単な方法はhttp://jquery.malsup.com/form/#ajaxFormで、非常に簡単に統合できます。試してみる! ; form_updateはフォームのIDである場合)

、コードは

$('#form_update').ajaxForm({ 
     target:  '#result-sub', 
     success:  function(){ 
      $('#result-sub').show(); 
      $('#form_update').hide(); 
    } 
}); 

が挿入の応答をお返しするためにIDが「結果サブ」でのdivまたは何かを追加だろう。

関連する問題