亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我的代碼返回多個回顯字符串

為什么我的代碼返回多個回顯字符串

PHP
慕妹3146593 2021-10-15 15:30:04
每當我提交表單時,它都會將“Good”返回“GoodGoodGood”三倍,我正在嘗試找出原因。我所知道的唯一一件事就是它必須對數組做一些事情。check.php 檢查所有 3 個輸入是否都為空,如果一切正常,則回顯“好”。class Check {    public function mty() {        global $required;        global $field;        foreach($required as $field) {            if (empty($_POST[$field])) {                //Code...            } else {                echo "Good";            }        }    }}submit.php$check = new Check;//Gets names of inputs$required = array('name', 'price', 'id');if(isset($_POST['submit'])) {    $check->mty();}我是 OOP 的新手,只想找到解決問題的方法。這段代碼有什么我可以改進的地方嗎?
查看完整描述

2 回答

?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

問題是您在循環中的每次迭代中都回響“好”。


您可以創建一個變量來保存狀態并檢查它并在循環后回顯:


// The variable that keeps the state

$success = true;


foreach($required as $field) {

    if (empty($_POST[$field])) {

        // Set the state as false

        $success = false;

    }

}


// If state is true, no value was empty and we echo 'Good'... once.

if ($success) {

    echo 'Good';

}

正如其他人所提到的,global應盡可能避免使用(如果您的結構合理,則總是如此)。


還有你在循環中使用global $field;while的問題。如果您打算使用在該方法中導入的 using ,則應在. 如果您不打算使用它,請刪除.$fieldforeach$fieldglobal $field;foreachglobal $field;


查看完整回答
反對 回復 2021-10-15
?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

我更喜歡使用array_filter()僅獲取非空值并將其計數與原始$_POST計數進行比較


<?php

    # pretend like this was what was posted

    $posted = [

        'foo' => 'bar',

        'bar' => 'foo',

        'treybake' => 'is awesome?'

    ];


    # your GLOBALS

    $required = ['foo', 'treybake'];


    # compare the count of the array without any empty elements 

    # vs original post count

    if (count(array_filter($posted, function($el){return (!empty($el));})) === count($posted)) {

        echo 'good';

    } else {

        echo 'something bad';

    }


查看完整回答
反對 回復 2021-10-15
  • 2 回答
  • 0 關注
  • 122 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號