草庐IT

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

coder 2024-05-05 原文

我有一个函数来检查用户试图添加到 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 - foreach 循环根据当前条件将不正确的 str 值分配给错误 var的更多相关文章

  1. ruby - 树顶语法无限循环 - 2

    我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He

  2. ruby-on-rails - 在 Ruby 中循环遍历多个数组 - 2

    我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代

  3. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  4. ruby - 怎么来的(a_method || :other) returns :other only when assigning to a var called a_method? - 2

    给定以下方法:defsome_method:valueend以下语句按我的预期工作:some_method||:other#=>:valuex=some_method||:other#=>:value但是下面语句的行为让我感到困惑:some_method=some_method||:other#=>:other它按预期创建了一个名为some_method的局部变量,随后对some_method的调用返回该局部变量的值。但为什么它分配:other而不是:value呢?我知道这可能不是一件明智的事情,并且可以看出它可能有多么模棱两可,但我认为应该在考虑作业之前评估作业的右侧...我已经在R

  5. ruby - 如何找到调用当前方法的方法 - 2

    如何找到调用此方法的位置?defto_xml(options={})binding.pryoptions=options.to_hifoptions&&options.respond_to?(:to_h)serializable_hash(options).to_xml(options)end 最佳答案 键入caller。这将返回当前调用堆栈。文档:Kernel#caller.例子[0]%rspecspec10/16|===================================================62=====

  6. ruby - Ruby 中的闭包和 for 循环 - 2

    我是Ruby的新手,有些闭包逻辑让我感到困惑。考虑这段代码:array=[]foriin(1..5)array[5,5,5,5,5]这对我来说很有意义,因为i被绑定(bind)在循环之外,所以每次循环都会捕获相同的变量。使用每个block可以解决这个问题对我来说也很有意义:array=[](1..5).each{|i|array[1,2,3,4,5]...因为现在每次通过时都单独声明i。但现在我迷路了:为什么我不能通过引入一个中间变量来修复它?array=[]foriin1..5j=iarray[5,5,5,5,5]因为j每次循环都是新的,我认为每次循环都会捕获不同的变量。例如,这绝对

  7. ruby - 将全局 $stdout 重新分配给控制台 - ruby - 2

    我正在尝试将$stdout设置为临时写入一个文件,然后返回到一个文件。test.rb:old_stdout=$stdout$stdout.reopen("mytestfile.out",'w+')puts"thisgoesinmytestfile"$stdout=old_stdoutputs"thisshouldbeontheconsole"$stdout.reopen("mytestfile1.out",'w+')puts"thisgoesinmytestfile1:"$stdout=old_stdoutputs"thisshouldbebackontheconsole"这是输出。r

  8. python - Ruby 相当于 Python str[3 :] - 2

    是否有Ruby等效于Python的方法来获取在字符串末尾结束的子字符串,如str[3:]?必须输入字符串的长度并不方便。 最佳答案 传递最后一个元素=-1的范围str[3..-1] 关于python-Ruby相当于Pythonstr[3:],我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12978768/

  9. ruby - 以毫秒为单位获取当前系统时间 - 2

    在Ruby中,以毫秒为单位获取自纪元(1970)以来的当前系统时间的正确方法是什么?我试过了Time.now.to_i,好像不是我想要的结果。我需要结果显示毫秒并且使用long类型,而不是float或double。 最佳答案 (Time.now.to_f*1000).to_iTime.now.to_f显示包含十进制数字的时间。要获得毫秒数,只需将时间乘以1000。 关于ruby-以毫秒为单位获取当前系统时间,我们在StackOverflow上找到一个类似的问题:

  10. ruby - 为什么 Ruby 返回 `str[-1..1]` 它做了什么? - 2

    假设我们有一个字符串str。如果str仅包含一个字符,例如str="1",则str[-1..1]返回1.但是如果str的size(length)比一个长,比如str="anythingelse",然后str[-1..1]返回""(空字符串)。为什么Ruby会这样解释字符串切片? 最佳答案 这种行为正是字符范围的工作方式。范围开始是-1,这是字符串中的最后一个字符。范围结束为1,即从开始算起的第二个位置。所以对于单字符字符串,这相当于0..1,也就是那个单个字符。对于双字符字符串,这是1..1,即第二个字符。对于三个字符的字符串,这是

随机推荐