PHP和jQuery从表单传递值。数据库上的更新函数

时间:2013-08-21 作者:user33913

我会循环foreach:

<?php  $myrows = $wpdb->get_results( "SELECT * FROM wp_myprojects" ); ?>
<form  id="aad-form2" action="" method="POST">
<?php foreach($myrows as $a): ?>

<input id="id" type="text" name="id" value="<?php echo $a->id; ?>">
<input id="name" type="text" name="name" value="<?php echo $a->name; ?>">
<input id="header" type="text" name="header" value="<?php echo $a->header; ?>">
<input id="body" type="text" name="body" value="<?php echo $a->body; ?>">
<input id="urls" type="text" name="urls" value="<?php echo $a->urls; ?>">
<input type="submit" name="aad-submit2" id="aad_submit2" class="button- primary"value="<?php _e(\'Update\', \'aad\'); ?>"/>
<img src="<?php echo admin_url(\'/images/wpspin_light.gif\'); ?>" class="waiting" id="aad_loading2" style="display:none;"/>
<br />

<?php endforeach ?>
</form>
和我的jquery代码:

jQuery(document).ready(function($) {
$(\'#aad-form2\').submit(function(){
//alert(\'test\');
$(\'#aad_loading2\').show();
$(\'#aad_submit2\').attr(\'disabled\', true);
data2 = {
action: \'aad_get_results2\',
form_data2: $(\'#aad-form2\').serialize()
//aad_nonce: aad_vars.aad_nonce
};

$.post(ajaxurl, data2, function (response) {
$(\'#aad_results\').html(response);
$(\'#aad_loading2\').hide();
$(\'#aad_submit2\').attr(\'disabled\', false);
}); 
return false;
});
});
当我执行操作时,最后一个表单是数据库中的更新。示例我在数据库中有5条记录。Foreach print me 5表单,但当我单击submit按钮record 1或record 2时,什么都没有发生。

循环中只有最后一条记录是更新的。帮助

告诉我为什么?也许我现在没有看到jquery好:)帮帮我。

插件中的我的更新功能:

function aad_process2_ajax() {
global $wpdb;
parse_str($_POST[\'form_data2\'], $form_data2);
echo $id = $form_data2[\'id\'];
echo $name = $form_data2[\'name\'];
echo $header = $form_data2[\'header\'];
echo $body = $form_data2[\'body\'];
echo $urls = $form_data2[\'urls\'];
$wpdb->update(\'wp_myprojects\', array(\'id\'=>$id, \'name\'=>$name, \'header\'=>$header, \'body\'=>$body, \'urls\'=>$urls), array(\'id\'=>$id));
$wpdb->show_errors();
/*EVRY PROCESS AJAX MUST DIE!!!!*/
die();
/*EVRY PROCESS AJAX MUST DIE!!!!*/
}
add_action(\'wp_ajax_aad_get_results2\',\'aad_process2_ajax\');

1 个回复
最合适的回答,由SO网友:Charles Clarkson 整理而成

每组表单字段都具有相同的字段名称集([...] 是代码的其余部分):

<?php foreach ( $myrows as $a ): ?>

    <input id="id" type="text" name="id" value="<?php echo $a->id; ?>">

    [...]

<?php endforeach ?>
如果返回3行$myrows 值为fee, fie, foe, 每个字段的值属性都会更改,但字段名称始终相同。以下是前3个字段组合在一起:

<input id="id" type="text" name="id" value="fee">
<input id="id" type="text" name="id" value="fie">
<input id="id" type="text" name="id" value="foe">
web服务器只看到最后一个值:id = foe feefum 没关系。

因此,每一组表单字段都被前一组替换。为每个循环定义唯一的名称。以下是第一个表单字段:

<?php
$row_count = 0;
foreach ( $myrows as $a ): ?>

    <input id="id-<?php echo $row_count; ?>" type="text" name="id-<?php echo $row_count; ?>" value="<?php echo $a->id; ?>">

    [ ... ]

    <?php
    $row_count++;
endforeach; ?>
更换[ ... ] 使用其他代码。

现在,这3个字段将如下所示:

<input id="id-0" type="text" name="id-0" value="fee">
<input id="id-1" type="text" name="id-1" value="fee">
<input id="id-2" type="text" name="id-2" value="fee">
您可以在隐藏的表单变量(foreach循环外部)中定义行计数。

<input type="hidden" name="row_count" value="<?php echo count( $myrows );">
然后,在aad_process2_ajax() 循环遍历所有名称,并根据中的行数进行更新row_count 表单字段。

结束