Snooze1229
@Snooze1229 (佐々木 統吾)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

phpのUncaught ArgumentCountErrorが解決できない

解決したいこと

Fatal error: Uncaught ArgumentCountError: Too few arguments to function regist_item(), 6 passed in /var/www/html/admin_add_product.php on line 47 and exactly 7 expected~ のエラーを解決したい

商品登録機能をphp.7.2で作っています。渡している引数の数はあっているのに実際にコードを動かしてみると7個渡されていることになっている?ようです。そもそもエラーの解釈自体あってますでしょうか、、phpは引数の数が多い分には大丈夫と聞いたのですが、、

ソースコードは以下です。

$name = get_post('product_name');
$price = get_post('price');
$status = get_post('status');
$stock = get_post('stock');
$image = get_file('new_file');



if(regist_item($db, $name, $price, $stock, $status, $image)){
  set_message('商品を登録しました。');
}else {
  set_error('商品の登録に失敗しました。');
}

regist_item定義箇所

//新規商品登録処理
function regist_item($db, $name, $price, $stock, $status, $image){
  
  //商品画像名を$fileimageに代入
  $filename = get_upload_filename($image);
  
  
  //商品登録の入力時に不備がある場合
  if(validate_item($name, $price, $stock, $filename, $status) === false){
    return false;

  }


return regist_item_transaction($db, $name, $price, $stock, $status, $image, $filename);

}

出ているエラーメッセージを入力

Fatal error: Uncaught ArgumentCountError: Too few arguments to function regist_item(), 6 passed in /var/www/html/admin_add_product.php on line 47 and exactly 7 expected

不慣れですので不足している情報等があるかもしれません。追加いたしますのでおっしゃって下さい。
何卒よろしくお願い致します。

0

2Answer

console.log();でもechoでもよいですが、変数の中身を確認してみてください。
エラーメッセージをGoogle翻訳に突っ込むと
致命的なエラー:Uncaught ArgumentCountError:関数regist_item()への引数が少なすぎます。6行目で/var/www/html/admin_add_product.phpに渡され、正確に7行目が必要です。
と返されます。

0Like

Comments

  1. @Snooze1229

    Questioner

    回答ありがとうございます!

    $dbにはPDOが入っており、$name,$price,$stock,$statusには$_POSTの内容、$imageには$_FILESの内容がしっかり入っておりました!

    function regist_itemの定義の時点で引数は上記の6つしか指定していないのになぜ7個目が必要?といったニュアンスのエラー文が出るのか分かりかねています、、
  2. 一応の確認ですが、
    $filenameこちらではないですよね、値が空なのは
  3. @Snooze1229

    Questioner

    回答遅くなりました、、

    少しニュアンスが汲み取りきれてないと思うのですが$filenameはコメントアウトしても特にエラー文に変わりはありませんでした

    関数の定義部分の1行目と$filenameの間でvar_dumpしても同様の上記のエラーが出るので$filenameは関係なさそうです、、
<?php
$db = "f";
$name = "a";
$price = "b";
$status = "c";
$stock = "d";
$image = "e";

if(regist_item($db, $name, $price, $stock, $status)){
  var_dump('商品を登録しました。');
}else {
  var_dump('商品の登録に失敗しました。');
}

function regist_item($db, $name, $price, $stock, $status, $image){
  return true;  
}
?>
Fatal error: Uncaught ArgumentCountError: Too few arguments to function regist_item(), 5 passed in C:\xampp\htdocs\test\test.php on line 9 and exactly 6 expected in C:\xampp\htdocs\test\test.php:15 Stack trace: #0 C:\xampp\htdocs\test\test.php(9): regist_item('f', 'a', 'b', 'd', 'c') #1 {main} thrown in C:\xampp\htdocs\test\test.php on line 15

regist_item($db, $name, $price, $stock, $status, $image)こちらを変更
regist_item($db, $name, $price, $stock, $status)
強引に同じエラー文を出してみました やはり引数が少ないのが原因

動作確認として、引数に$test7を足して値を入れてみて動くのか
regist_item($db, $name, $price, $stock, $status, $image, $test7)
動いたのなら、呼び出している関数が合っているか確認(echoなどで)しかないと思います。

0Like

Comments

  1. @Snooze1229

    Questioner

    お返事遅くなってしまい申し訳ありません、
    あれから試行錯誤してみましたが解決しませんでしたので作り直すことにしました。
    ご協力いただきありがとうございました!

Your answer might help someone💌