php - foreach 循环根据当前条件将不正确的 str 值分配给错误 var

标签 php

我有一个函数来检查用户试图添加到 mySQL 数据库中的数据条目是否存在。虽然我不允许 DB 表中的元组允许插入重复项,但此功能只是为了用户的利益,以便他们通过易于理解的错误消息知道为什么他们的数据输入被拒绝。

所以有两个数字要检查,都是唯一的,在示例中列为 ourNum => $ourNumvenNum => $venNum。问题是,当 func 检查第一个数组元素 (ourNum) 时,由于 mysqli_query 成功而失败,结果 $errMsg 显示它是 $venNum 已经存在,而不是 $ourNum。现在 $venNum 实际上,实际上应该证明也是重复的,因为 $ourNum 只能与有效的 $venNum 一起存在于数据库中>,但使用信息是错误的,而且明显是错误的。

function eqpt_num_dupe_check( $ourNum, $venNum, &$errMsg ){

  // create associative array to hold ourNum => $ourNum and venNum => $venNum
  $eqptNumArr = array(
    'ourNum' => $ourNum,
    'venNum' => $venNum );

  // check for duplicate eqptNum entry
  foreach ( $eqptNumArr as $eqpt => $num ) {
    $sqlQ = "SELECT * FROM table WHERE $eqpt = $num";

    if ( $rs = mysqli_query( $dbcon, $sqlQ ) ) { // if $rs is assigned then eqptNum already exists in DB, so display errMsg for user
      $errMsg = 'Data entry refused: ' . $eqpt . ': ' . $num . ' already exists in database.';
    }
  }
}

在第一个元素的数据重复性 $errMsg 显示给用户之前,似乎 foreach 已经移动到数组的第二个元素上。

最佳答案

$errMsg赋值后,需要在if条件中添加一个break,这样当有重复数据时,就不会再进行处理了发现。

if ( $rs = mysqli_query( $dbcon, $sqlQ ) ) { // if $rs is assigned then eqptNum already exists in DB, so display errMsg for user
    $errMsg = 'Data entry refused: ' . $eqpt . ': ' . $num . ' already exists in database.';
    break;
}

如果没有 breakforeach 会愉快地继续加载后续的数组元素,处理每个元素,直到没有更多元素要加载为止。 break 恰好在发现重复数据时停止此处理,因此将为用户显示正确的 $errMsg。如果 $venNum 也被证明是重复的,那么只有当用户为 $ourNum 输入唯一值时,它才会被正确检测到。

if (!$rs) 然后加载下一个数组元素并运行 mysqli_query 以检查其可能的重复性。

关于php - foreach 循环根据当前条件将不正确的 str 值分配给错误 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42228236/

相关文章:

php - Json_encode 缺失数据

PHP MySQL 插入语句不会将数据插入我的数据库

php - magento 1.9.1.0 local.xml 不工作

PHP MySQL 如果关系表中的键不存在则插入

php - jQuery ajax php重命名文件名的一部分

php - 词袋模型 : 2 PHP functions, 相同的结果 : Why?

php - WooCommerce 根据产品类别替换购物车/结帐中的 "Available on backorder"

javascript - 如何从同一页面上的选择框获取值

php - 当我定义它时类中 undefined variable

php - 无法让 Beanstalkd 队列为 PHP 工作