【问题标题】:Update Multiple Values in PHP在 PHP 中更新多个值
【发布时间】:2016-04-15 05:56:35
【问题描述】:

我正在尝试更新数据库中的多个值。但是,单击“提交”按钮时,我一次只能更新一个值。

注意:- 我只需要知道如何遍历 $_POST 变量,而不必对它们进行硬编码并将它们传递给函数(如果它不为 NULL)。

关于如何让这个提交多个字段的任何建议。

HTML:-

    First Name :
        <input type="text" name="CUSTOMER_FNAME" value="<?php if(isset($_POST['CUSTOMER_FNAME'])) echo htmlspecialchars($_POST['CUSTOMER_FNAME']); ?>" 
          placeholder="<?php echo $customerRegistration->property('CUSTOMER_FNAME');?>" />
    LastName:   
        <input type="text" name="CUSTOMER_LNAME" value="<?php if(isset($_POST['CUSTOMER_LNAME'])) echo htmlspecialchars($_POST['CUSTOMER_LNAME']); ?>" 
          placeholder="<?php echo $customerRegistration->property('CUSTOMER_LNAME');?>" />
    Email:
        <input type="text" name="EMAIL" value="<?php if(isset($_POST['EMAIL'])) echo htmlspecialchars($_POST['EMAIL']); ?>" 
          placeholder="<?php echo $customerRegistration->property('EMAIL');?>" />

函数在这里:-

$id= $_SESSION['id'];
if (isset($_POST['submit'])){
    foreach ($_POST as $key => $value) {
        if ($value!= NULL && $key!="submit") {
            $customerRegistration->update_one($id,$key,$value); 
        }
    }   
}


  public function update_one($id,$key,$value){
     mysqli_real_escape_string($con,$value)

    $sql  = "UPDATE `customer_registration` SET ";
    $sql .= "`{$key}`="."'{$value}' ";
    $sql .= "WHERE `CUSTOMER_ID`="."'{$id}' ";
    mysqli_query($con,$sql);

}

注意:- $customerRegistration 是 Customer Registration 类的一个实例,它可以访问 update_one($id, $key,$value) 方法并且可以针对单个值进行更新。

我只需要知道 $_POST 变量中的循环如何保持运行,只要它不为空(编辑多个值。)

Var 转储结果:-

      array(6) { ["CUSTOMER_FNAME"]=> string(4) "UMAR" ["CUSTOMER_LNAME"]=> string(5) "AFTAB" ["EMAIL"]=> string(16) "abcd@hotmail.com" ["PHONE"]=> string(10) "4154561235" ["CUSTOMER_DOB"]=> string(0) "" ["submit"]=> string(14) "Submit Changes" }

【问题讨论】:

  • 如果不知道 $customerRegistration 是什么实例,很难说。
  • 在你的 $_POST 中运行一个 var_dump,看看是否所有需要的值都在那里
  • @wogsland 但更新功能工作正常
  • @PhiterFernandes 他们是……
  • 我的问题是遍历它们

标签: php mysql html mysqli


【解决方案1】:

如果设置了任何参数,您的 while 循环将变为无限循环。用一个简单的 if() 替换 while 循环。 $value 变量不能为空,最大为空字符串,因此请从 if 中删除该条件:

    if ($key!="submit") {
        $customerRegistration->update_one($id,$key,$value); 
    }

【讨论】:

  • 那行不通,我从 if 改为 while,不过感谢您的努力。
  • “不起作用”是毫无意义的回应。请提供准确的错误消息或描述意外行为!
  • 我在切换到 while 之前尝试过。 if 只更新一个值并且只允许一个更新
  • 但是现在它忽略了正在提交空值的事实,它会将原始值替换为空值。
  • 不能通过 html 表单提交 php null 值。你把东西混在一起了。您的更新代码中没有错误处理。为什么?
【解决方案2】:

只是一个建议,如果您使用的是 PHP 5.6,您可以使用可变参数。请参阅下面的链接。希望这可以帮助。 :)

https://philsturgeon.uk/php/2013/08/30/potential-variadic-function-syntax-for-php-56/

if (isset($_POST['submit']))
{
    function update_one($id, $_POST);

}


function update_one($id, ...$params)
{
    $sql = "UPDATE `customer_registration` SET ";
    foreach ($params as $key => $val){
        if ($value != NULL && $key != "submit") { 
            $sql.= "`{$key}`="."'{$value}' ";
        }
    }
    $sql.= "WHERE `CUSTOMER_ID`="."'{$id}' ";
    mysqli_query($con,$sql);

}

【讨论】:

  • 您能否说明这将如何帮助我遍历 $_POST 变量。
  • 查看更新,它未经测试。我希望你能明白
  • 不要混合使用可变数量参数的数组。您不需要在这里使用可变参数方法,因为您只需将 $_POST 数组作为参数传递。
  • @Shadow 是的,我同意你的观点,但如果他想传递多个特定参数,那么可变参数将是理想的。无论如何,这只是一个建议。
【解决方案3】:

您忘记在 $_POST 中指定输入的名称。这就是它的目的

$id= $_SESSION['id'];

if (isset($_POST['submit'])){
$input_names = ['CUSTOMER_FNAME', 'CUSTOMER_LNAME', 'EMAIL'];
  for($i=0;$i<count($input_names);$i++){
    foreach ($_POST[$input_names][$i] as $key => $value) {
      if ($value!= NULL && $key!="submit") {
        $customerRegistration->update_one($id,$key,$value); 
      } // end of if
    }  // end of foreach
  } // end of for

} // end of if

【讨论】:

  • 为此,应将 html 中的字段名称更改为包含尾随 []。但问题并不表示更新了多条记录。
  • $_POST[$input_names[$i]] = $_POST['CUSTOM_FNAME']。如果我将 $i 放在 $_POST 后面,您所说的将是正确的,如下所示:$_POST[$input_names][$i]。我遍历名称数组。
  • foreach ($_POST[$input_names[$i]] as $key => $value) 循环意味着您相信每个输入名称在帖子中出现多次。
  • ye sry :D 3:30 AM,所以正确的是 $_POST[$input_names][$i]。
  • 或者for循环在这里甚至没有用,他需要做的就是做foreach($_POST[$input_names] as $key => $value)
猜你喜欢
  • 2016-04-01
  • 2013-11-26
  • 2019-04-12
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 2010-09-22
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多