【问题标题】:Php Array Post ErrorPhp 数组发布错误
【发布时间】:2017-09-26 05:43:00
【问题描述】:

我有一个包含 1200 条记录的数组,但是当我提交表单时,代码在数组中计算了 250 条记录。为什么?

这是代码:

<?php
if (isset($_POST['ok'])) {
    echo count($_POST['precios']);
    // showme only 250 récords
}
?>
<form method='POST' action='productos.php'>
    <button class="btn green"  type="submit" name="ok"> Actualizar de forma masiva</button>
    <?php
    $query4334x = "select * from Productos";

    $result_categorias4334x = mysql_db_query($dbname, $query4334x)
        or die("Failed Query of " . $query4334x);  //guardo en una variable los registros obtenidos con el query

    $numero5 = mysql_num_rows($result_categorias4334x);
    echo $numero5;
    // showme 1200 récords

    while ($row = mysql_fetch_array($result_categorias4334x)) {
        $precio = $row['Precio'];
        ?>
        <input type="text" name="precios[]" value="<?php echo $precio; ?>">
        <?php
    }
    ?>
</form>

【问题讨论】:

  • 为什么要使用早已弃用的 mysql_ 代码库?它在多年前就停产了,并在 PHP7 中完全删除。不应使用此库编写新代码。它使您容易受到 SQL 注入攻击(由于缺乏参数化查询支持)和潜在的其他未修补漏洞。尽快切换到使用 mysqli 或 PDO,然后学习如何编写参数化查询来保护您的数据免受恶意输入。请参阅bobby-tables.com 以获得对风险的简单说明以及一些用于安全编写查询的示例 PHP 代码。
  • 感谢您提供的信息。我会去 bobby-tables.com

标签: php arrays forms


【解决方案1】:

如果您无法更改 php.ini max_input_varspost_max_size 中的设置

试试下面对我有用的东西

implode() 数组变成一个长字符串,explode() 在服务器端。

json_encode() 可能也可以。

例子:

while ($row = mysql_fetch_array($result_categorias4334x)) {
        $precio[] = $row['Precio'];
    }
<input type="text" name="precios" value="<?php echo implode(",",$precio); ?>">

//发布

<?php
if (isset($_POST['ok'])) {
    $precios = $_POST['precios'];
    $preciosarr = explode(",", $precios);
    print_r($preciosarr);
}
?>

注意:元素中允许的最大字符数。默认值为 524288

【讨论】:

  • 谢谢!但我需要一个输入记录来刷新价格。代码只显示一个输入
  • 完美!作品!但我有一个问题。用户必须使用他想要的每条记录的值(价格)来修改输入。这样我只有一个输入。原代码为:while ($row = mysql_fetch_array($result_categorias4334)){ $precio = $row['Precio']; }
  • 大豆能帮我@AhmedGinani吗?
【解决方案2】:

请尝试在您的 php.ini 中更新以下设置

ma​​x_input_vars = 1500

post_max_size = 64M

您只需根据需要调整两个变量即可。

【讨论】:

  • 我的服务器不允许我更改 php.ini。其他解决方案?
  • 你能确认你能使用 ini_set 吗? ini_set('max_input_vars',1500); ini_set('post_max_size','64M');
  • 此设置在运行时不可更改,它们在脚本执行之前应用。
【解决方案3】:

如果您无权访问 php.ini,您可以尝试在 .htaccess 中设置它们

php_value  max_input_vars  1500   
php_value  post_max_size   64M

【讨论】:

    【解决方案4】:

    如果这是循环的一部分,则需要索引数组

    for ($i = 0; $i < count($_POST['precios']); $i++) { ?>
        ...
        <input type="text" name="precios[]" value="<?php echo $precio; ?>">
        ...
        <?php
    }
    

    也检查这个而不是 echo 使用 print_r()var_dump()

    print_r( count($_POST['precios']));
    

    【讨论】:

    • 循环访问 POST 变量有何帮助?用户想要显示来自 DB 的数据,但是回发的值太小。您还没有定义 $precio。
    猜你喜欢
    • 2012-02-06
    • 2017-04-17
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多