Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 过多的Post数据变量?_Php_Mysql_Wordpress - Fatal编程技术网

Php 过多的Post数据变量?

Php 过多的Post数据变量?,php,mysql,wordpress,Php,Mysql,Wordpress,这是我第一次发布问题: 我正在开发一个WordPress插件,它允许用户在数据库中创建数据行。当一个表单要更新多达100行的数据时,我遇到了一个问题。每一行数据包含八个POST数据变量,因此当表单中有100行时,将发送800多个POST变量。然而,只有一定数量的变量更新数据库,目前只有112行更新。我不知道什么会阻止函数完成对数据库的更新。看起来我好像被太多的post变量或post数据大小超载了 只要输入的条目少,一切都会正常工作,但一旦超过100行,就会停止工作 以下是我的表格结构: $sql

这是我第一次发布问题:

我正在开发一个WordPress插件,它允许用户在数据库中创建数据行。当一个表单要更新多达100行的数据时,我遇到了一个问题。每一行数据包含八个POST数据变量,因此当表单中有100行时,将发送800多个POST变量。然而,只有一定数量的变量更新数据库,目前只有112行更新。我不知道什么会阻止函数完成对数据库的更新。看起来我好像被太多的post变量或post数据大小超载了

只要输入的条目少,一切都会正常工作,但一旦超过100行,就会停止工作

以下是我的表格结构:

$sql2 = "CREATE TABLE IF NOT EXISTS $item_table (
    id smallint(5) NOT NULL AUTO_INCREMENT,
    menu smallint(5) NOT NULL,
    itemorder smallint(5) NOT NULL,
    item text NOT NULL,
    description text,
    image tinytext NOT NULL,
    value tinytext NOT NULL,
    value2 tinytext NOT NULL,
    UNIQUE KEY id (id)
    ) $charset_collate;";
}
以下是我的POST数据处理程序函数:

foreach($_POST['id'] as $i){

    $image = $_POST['image'][$i];
    $item = $_POST['item'][$i];
    $desc = $_POST['desc'][$i];
    $value = $_POST['value'][$i];
    $value2 = $_POST['value2'][$i];
    $order = $_POST['order'][$i];

    if ($_POST['strike'][$i] == 'checked' ){
        $wpdb->query( $wpdb->prepare("DELETE FROM $item_table WHERE id = $i") );
    }
    else{
        $wpdb->update( $item_table, array(
            'image' => $image,
            'item' => $item,
            'itemorder' => $order,
            'description' => $desc,
            'value' => $value,
            'value2' => $value2
         ),
         array( 'id' => $i ) );
        }
    }

    //Sort items by order, then rewrite the order with no gaps left from deleted items
    $targetmenu = $_POST['targetmenu'];

    $rows = "SELECT * FROM $item_table WHERE menu = $targetmenu ORDER by itemorder ASC";
    $result = $wpdb->get_results($rows);
    $n = 1;
    foreach ($result as $r){
        $id = $r->id;
        $wpdb->update( $jsrm_item_table , array( 'itemorder' => $n ), array( 'id' => $id ) );
        ++$n;
    }
    $loc = "&mode=editmenu&targetmenu=".$targetmenu;

    header("Location:".JSRM_SELF.$loc);
    exit(); 

}
这是我的PHP表单:

$the_menu = $wpdb->get_row("SELECT * FROM $menu_table WHERE id = $_GET[targetmenu]");
$menuid = $the_menu->id;

$q = "SELECT * FROM $item_table WHERE menu = $menuid ORDER by itemorder ASC";
$result = $wpdb->get_results($q);
if ($result) {
?>
<form id="edit-menu-form" action="<?php echo _SELF; ?>" method="post">
    <input type="hidden" name="targetmenu" value="<?php echo $menuid; ?>">
    <input type="hidden" name="dbtouch" value="updateitems">

<table>
    <?php
    foreach ($result as $r) {
        $order = $r->itemorder;
        $image = $r->image;
        $imagesrc = ($image) ? esc_html(stripslashes($r->image)) : 'addimage.jpg';
        $item = esc_html(stripslashes( $r->item ));
        $description = esc_html(stripslashes($r->description));
        $value = esc_html(stripslashes($r->value));
        $value2 = esc_html(stripslashes($r->value2));
        $id = $r->id;
    ?>

    <tr id="<?php echo $id ?>">
        <td><?php echo $order ?></td>
        <td><a class="edit-item-img" id="item-image-<?php echo $id ?>" style="background-image:url(<?php echo $imagesrc ?>);" title="Edit image"></a>
            <input type="hidden" name="image[<?php echo $id ?>]" id="field-item-image-<?php echo $id ?>" value="<?php echo $image ?>" />
            <img class="remove-image-button" id="image-<?php echo $id ?>" src="removeimage.png"
                <?php if(!$image){ ?> 
                    style="visibility:hidden;" 
                <?php } ?>
            />
        </td>
        <td><textarea name="item[<?php echo $id ?>]"><?php echo $item ?></textarea></td>
        <td><textarea name="desc[<?php echo $id ?>]"><?php echo $description ?></textarea></td>
        <td><input type="text" name="value[<?php echo $id ?>]" value="<?php echo $value ?>" /></td>
        <td><input type="text" name="value2[<?php echo $id ?>]" value="<?php echo $value2 ?>" /></td>
        <td><input type="checkbox" class="strike" name="strike[<?php echo $id ?>]" value="checked"/></td>
        <input type="hidden" name="order[<?php echo $id ?>]" value="<?php echo $order ?>" id="order<?php echo $id ?>"/>
        <input type="hidden" name="id[<?php echo $id ?>]" value="<?php echo $id ?>" id="id<?php echo $id ?>"/>
    </tr>

    <?php
    }
    ?>  
</table/>
<p><input type="submit" id="update-items-button" value="Update All" class="button-primary"/></p>
</form>

<?php
}   
?>

我今天也有类似的问题。我的表单有250多行,每行5个变量,但是$u POST变量似乎被截断了。在我的例子中,它在1000个元素之后停止

有一个名为max_input_vars的PHP设置,默认值为1000。此设置设置了将拉入PHP脚本的变量数量上限。您可能需要在服务器设置中增加此值以使页面正常工作。随着此值的增加,可能会导致拒绝服务攻击,但我不完全理解其中的一些安全含义

由于您正在开发Wordpress插件,您可能需要查看是否有方法更改表单以减少发送的变量数量,因为您可能无法为使用插件的用户更改服务器配置


阅读更多关于此设置的信息:

我今天遇到了类似的问题。我的表单有250多行,每行5个变量,但是$u POST变量似乎被截断了。在我的例子中,它在1000个元素之后停止

有一个名为max_input_vars的PHP设置,默认值为1000。此设置设置了将拉入PHP脚本的变量数量上限。您可能需要在服务器设置中增加此值以使页面正常工作。随着此值的增加,可能会导致拒绝服务攻击,但我不完全理解其中的一些安全含义

由于您正在开发Wordpress插件,您可能需要查看是否有方法更改表单以减少发送的变量数量,因为您可能无法为使用插件的用户更改服务器配置

请在此处阅读有关设置的更多信息: