gpt4 book ai didi

php - 发布数据变量太多?

转载 作者:行者123 更新时间:2023-11-29 04:49:23 28 4
gpt4 key购买 nike

这是我第一次发布问题:

我正在开发一个 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 个变量的表单,但 $_POST 变量似乎被截断了。就我而言,它在 1000 个元素后停止。

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

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

在此处阅读有关设置的更多信息:http://www.php.net/manual/en/info.configuration.php#ini.max-input-vars

关于php - 发布数据变量太多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13617339/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com