【解決方法】警告: foreach() 引数は、配列 | オブジェクト型でなければなりません。bool を指定してください


だから私は自分のcsvとユーザー入力を比較するのに忙しい
しかし、このエラーが発生し、理由がわかりません

Warning: foreach() argument must be of type array|object, bool given 

引数が array|bool である必要があると言っているのはわかっていますが、それが is_array() 関数を使用して配列であるかどうかを $row_data でチェックし、はい、配列であると言っていました。
私の引数が配列の場合、なぜ機能しないのでしょうか??

// //de csv check stopte de hele code??
// // Set the path to your CSV file
$csv_file = "checkcsvfileforuserinput.csv";

// Open the file for reading
$file_handle = fopen($csv_file, "r");

// Read the contents of the file
while (!feof($file_handle)) {
  // Get the current row of data from the CSV
  $row_data = fgetcsv($file_handle);

  // Loop through each item in the row
  foreach ($row_data as $item) {
    // Check if the item matches either of the user inputs
    if ($item == $Zipcode || $item == $Housenumber) {
    // User input found in the CSV
    $_SESSION['input_found'] = "user input found";

    }elseif($item == $Zipcode || $item == $Housenumber || $item == $Toevoeging){
      $_SESSION['input_found'] = "user input found";

    }else{
      $_SESSION['input_found'] = "user input not found";

    }
  }
}

私が試したこと:

まず、is_array を実行して $row_data が本当に配列であるかどうかを確認したところ、はいと言われました。
インターネットで調べてみましたが、csvファイルを

1000, ","

次の

$row_data = fgetcsv($file_handle);

だから私はそれを試しましたが、; idk 1000 の目的は何ですか。 私が持っているセパレーターです。 ただし、これは何も違うことを示していません

解決策 1

ドキュメントを見ると: PHP fgetcsv() 関数[^] 戻り値を示します。

引用:

戻り値: 成功した場合は CSV フィールドの配列、無効なファイルが指定された場合は NULL、その他のエラーと EOF の場合は FALSE

CSV ファイルにエラーがある場合、または見つからない場合は、 $row_data することができます bool

私はデバッガーから始めて、あなたが関数に何を渡しているのか、そしてそれが何を返すのかを正確に見つけます。

解決策 2

テストを AND (&&) to OR (||) あなたのループはまだ正しくありません。 行の 1 つの項目に正しい郵便番号が含まれている場合、入力は正しいと報告されます。 しかし、両方の正しいフィールドが同じ行に存在することを確認していません。 以前の質問で説明したように Csvチェックはコード全体を壊しますか?[^]、両方のフィールドに同時にアクセスして一緒にテストする必要があるため、次のようになります。

PHP
// Read the contents of the file
while (($row_data = fgetcsv($file_handle)) !== FALSE) {
  if ($row_data[0] == $Zipcode && $row_data[1] == $Housenumber && $row_data[2] == $Toevoeging)) { // NB check which actual fields contain the relevant items.
    // User input found in the CSV
    $_SESSION['input_found'] = "user input found";
  }
}

以前の回答に戻り、配列アクセスが説明されている PHP マニュアルへのリンクをたどってください。

コメント

タイトルとURLをコピーしました