質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

15647閲覧

PHPのエラーFatal error: Function name must be a string in が直せない

sumikko6210

総合スコア138

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/12/15 03:17

編集2016/12/15 03:30

現在phpで掲示板を作成しており、入力値の検証ができるようにしています。
検証のコードを実装したところ、Fatal error: Function name must be a string in C:\xampp\htdocs\php_data\board.php on line 14
というエラーが出てしまい直すことができません

php

1<?php 2require_once 'C:\xampp\htdocs\php_data\DbManager.php'; 3require_once 'C:\xampp\htdocs\php_data\MyValidator.php'; 4 5date_default_timezone_set('Asia/Tokyo'); 6 7$dataFile ='bbs.txt'; 8 9if(isset($_POST['toukou'])){ 10 11 $v = new MyValidator(); 12 $v->requiredCheck($_POST['name'], '名前'); 13 $v->requiredCheck($_POST['contents'], 'メッセージ'); 14 $v(); 15 16 $name = htmlspecialchars($_POST['name']); 17 $contents = htmlspecialchars($_POST['contents']); 18 $postedAt = date('Y-m-d H:i:s'); 19 20 21 22 $newData = (sizeof(file($dataFile)) + 1)." ".$name." ".$contents." ".$postedAt. "\n"; 23 24 $fp = fopen($dataFile,'a'); 25 fwrite($fp, $newData); 26 fclose($fp); 27 28} 29 30 try { 31 $db = getDb(); 32 33 $stt = $db->prepare('INSERT INTO bulletin(name, contents) VALUES(:name, :contents)'); 34 35 $stt->bindParam(':name', $_POST['name']); 36 $stt->bindParam(':contents', $_POST['contents']); 37 $stt->execute(); 38 $db = NULL; 39 40 } catch(PDOException $e) { 41 die("エラーメッセージ:{$e->getMessage()}"); 42} 43 44?> 45<!DOCTYPE html> 46<html lang="ja"> 47<head> 48 <meta charset="utf-8"> 49 <title>簡易掲示板</title> 50</head> 51<body> 52 <h1>簡易掲示板</h1></br> 53 <p>名前は20文字以内、メッセージは50文字以内で入力してください</p> 54 55 <form action="" method="POST"> 56 57 名前:<input type="text" name="name"> 58 メッセージ:<input type="text" name="contents"> 59 60 <input type="submit" name='toukou' value="投稿"></br></br> 61 62 </form> 63 64<?php 65 66 $file=file($dataFile); // ファイルの内容を配列に格納 67 foreach( $file as $value ){ 68 $line = explode(" ",$value); 69 echo $value."<br />\n"; // 改行しながら値を表示 70 } 71?> 72</body> 73</html> 74 75
<?php require_once 'C:\xampp\htdocs\php_data\DbManager.php'; class MyValidator{ private $_errors; public function requiredCheck($value, $name) { if(trim($value) === ''){ $this->_errors[] = "{$name}は必須入力です。"; } } public function lengthCheck($value, $name, $len) { if(trim($value) !== ''){ if(mb_strlen($value) > $len){ $this->_errors[] = "{$name}は{$len}文字以内で入力してください。"; } } } } ?>

このエラーは$_COOKIE['name'] → $_COOKIE('name')になってしまっているときなどに起こるエラーだそうですが、このコードに該当しませんでした。
修正よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2016/12/15 03:27

エラーメッセージにファイル名と行番号が出ていませんか?
sumikko6210

2016/12/15 03:29

すいません記載漏れでした! Fatal error: Function name must be a string in C:\xampp\htdocs\php_data\board.php on line 14とでています
guest

回答3

0

$v();が原因では?あなたの調べたケースにそのまま該当します。

投稿2016/12/15 03:35

otn

総合スコア84421

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

14行目の$v();の意味は?

投稿2016/12/15 03:35

hitsujimeeee

総合スコア486

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sumikko6210

2016/12/15 03:52

$v();でエラーメッセージが出るような記載が本に書いてあるのですがそれが間違いだったようです。 どのようにすればエラーメッセージが出るのでしょうか?
guest

0

ベストアンサー

php

1$v = new MyValidator(); 2$v->requiredCheck($_POST['name'], '名前'); 3$v->requiredCheck($_POST['contents'], 'メッセージ'); 4$v();

この$v();ってなんでしょうか? $v は objectなので()を付けても質問記載のエラーになります。
Function name must be a string 訳:関数名は文字列でなければなりません


再現コード

PHP

1<?php // test.php 2class foo { 3} 4 5$a = new foo(); 6$a();

実行結果

$ php test.php
PHP Fatal error: Function name must be a string in - on line 6

投稿2016/12/15 03:35

編集2016/12/15 03:47
Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sumikko6210

2016/12/15 03:43

回答ありがとうございます。 この場合、どのように修正すればよいのでしょうか? $v;としても$v();を消しても$v->requiredCheckに行かずエラー文が出ません・・・
Y.H.

2016/12/15 04:33 編集

>この場合、どのように修正すればよいのでしょうか? 何かしたいかわからないので答えようがありません。 本質問は「Fatal error: Function name must be a string in が直せない」が主題ですよね? この質問に対して回答しましたがこれで解決ではないのですか? 別の問題は別の質問としてください。(なんかこのままプログラムが完成するまで突き合わされそうなので。。。) --- というだけではなんなので。ヒントだけ。 (これ以降本質問以外のコメントをいただいても返信は差し控えさせていただきます。別の質問として下さい) $v->requiredCheck() は正常に実行れていると思います。$v->requiredCheck() の中で if(trim($value) === ''){ $this->_errors[] = "{$name}は必須入力です。"; } と$valueを値のチェックをしているのに $name のメッセージになってます。 $nameのチェックは一切されてません。単なるバグです。
sumikko6210

2016/12/15 03:58

失礼しました。別の質問でさせていただきます。 いただいたヒントを元に改善いたします。 丁寧なご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問