• ベストアンサー

なぜ、unexpected T_VARIABLEになるのでしょうか? 

WindowsXP機に、PHP5とPEARを入れています。 あるWebサイトに記述されている下記のサンプルスクリプトをコピペして(PEARは絶対パスに書き換えて)実行しましたが、次のエラーが出ます。全角スペースは入っていませんし、原因が分かりません。 なぜ、unexpected T_VARIABLEになるのでしょうか? どのようにすれば解決できるでしょうか? エラー Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in C:\Program Files\Apache Group\Apache2\htdocs\HQuickForm_test\QfrmSmpl.php on line 14 サンプルスクリプト一部抜粋: <?php require_once("C:\php\PEAR\HTML\QuickForm.php"); class QfrmSmpl{ var $_form; function QfrmSmpl($sbmtAct){ $this -> _form = new HTML_QuickForm("frmSmpl","post",$sbmtAct); } function setForm(){ $this -> _form -> addElement("text","txtName","名前(全角日本字):"); $this -> _form -> addElement("text","txtEname","名前(半角英字):"); $this -> _form -> addElement("text","txtEmail","E-mail:"); $this -> _form -> addElement("text","txtEmail2","E-mail(確認用):"); $this -> _form -> addElement("textarea","txtrComment","コメント:"); } $this -> _form -> applyFilter(__ALL__,"trim"); $this -> _form -> addRule("txtName","名前を入力!","required", null, "client"); $this -> _form -> addRule("txtEname","半角英字で入力!","alphanumeric", null, "client"); $this -> _form -> addRule(array("txtEmail","txtEmail2"),"メールアドレス不一致!","compare", null, "client"); $this -> _form -> addRule("txtEmail","無効なメールアドレス!","email", null, "client"); $this -> _form -> addRule("txtrComment","コメントを入力!","required", null, "client"); $this -> _form -> setRequiredNote("<font color='red'>*</font>必須入力"); } 以下略

  • PHP
  • 回答数2
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

検索したら似たようなスクリプトがあったんですが http://digit-01.com/ownpage/ownpage_quickform.html これの //フォーム入力チェックの定義(, null, "client")で、クライアント側でチェック function checForm(){ は function checForm(){ の前で改行が必要なようです

spindle
質問者

お礼

ご指摘の通りでした。なぜ気づかなかったのか、恥じ入るばかりです。 有難うございました。

その他の回答 (1)

noname#26650
noname#26650
回答No.1

> } > $this -> _form -> applyFilter(__ALL__,"trim"); 引用した1行目の } は、要るのでしょうか? この } でsetForm() が終了していますが、よいのでしょうか?

spindle
質問者

お礼

ANo.2のご指摘の通りで解決出来ました。 なお、ANo.1でご示唆頂いたように、エラーが出たとき、「視点を広げ、文脈を追って検証する」基本を心掛けたいと思います。有難うございました。

関連するQ&A

  • QuickFormのradioボタンでエラーが出る

    require_once("HTML/QuickForm.php"); $form = new HTML_QuickForm(); $ques[] = &HTML_QuickForm::createElement('radio', null, 'Yes', 'Yes', '1');←”ここでエラーがでる” $ques[] = &HTML_QuickForm::createElement('radio', null, 'No', 'No', '2'); $form->addGroup($ques, 'ques'); $form->addRule('ques', '入力してください。', 'required', null, 'client'); if ($form->validate()){ $form->freeze();} $form->addElement('submit','submit', '送信'); require_once("HTML/QuickForm/Renderer/ArraySmarty.php"); $renderer= new HTML_QuickForm_Renderer_ArraySmarty($smarty); $form->accept($renderer); $smarty->assign('form', $renderer->toArray()); $file = 'test.tpl'; $smarty->display($file) ----------------------------------------------------------- HTML_QuickFormでラジオボタンをチェックしたいのですが、「←”ここでエラーがでる”」の部分で、Fatal error: [] operator not supported for strings in /virtual/パス/test.php on line 19←ここの数字はエラー行 のエラーがでます。 どうやったら、エラーを回避できるか分かりません。 よろしくお願いします。

    • 締切済み
    • PHP
  • PEAR::HTML_QuickFormのfreezeについて

    PEAR::HTML_QuickFormのfreezeを使って、特定の項目だけフリーズさせたいと考えてます。 全体をフリーズさせるときは、 $this -> freeze(); としてますが、項目のみの場合も出来るような事が書いてありました。 下記のソースの場合は、どのように設定すればよいかおしえてもらえますでしょうか? <?php require_once "HTML/QuickForm.php"; $form = new HTML_QuickForm('frmTest', 'get'); $form->addElement('header', 'MyHeader', 'Testing QuickForm'); $form->addElement('text', 'MyTextBox', 'What is your name?'); $form->addElement('reset', 'btnClear', 'Clear'); $form->addElement('submit', 'btnSubmit', 'Submit'); if ($form->validate()) { # If the form validates then freeze the data $form->freeze(); } $form->display(); ?>

    • ベストアンサー
    • PHP
  • 参照渡しを使う理由がわかりません

    PEARの 'HTML/QuickForm.php' を利用し、フォームを作成しようと思いました。 以下ソースを入力していたところ、ラジオボタンのところで参照渡しが出てきました。 【$obj =& $form->addElement("radio", "age", "年代:", "10代", "10", array("checked"));】 ラジオボタン以前のテキストボックス等は = だったのですが、なぜ、 ラジオボタンだけ参照渡しをするのでしょうか? 何かメリットがあるから参照渡しをしているのだと思うのですが…。 ご教授よろしくお願いします ====ソースここから <?php // 必要パッケージの読込み require('HTML/QuickForm.php'); // ●Form要素の構築 $form = new HTML_Quickform("test","POST"); // formの設定 $form->setRequiredNote("<span style=color:red>*</span> 記入必須項目"); // 記入必須項目の説明用文字列設定 $form->setJsWarnings("エラー",""); // Javascriptエラーの際の文字列設定 // header 要素を追加 $form->addElement("header", "title", "情報を記入"); // hidden 要素を追加 $form->addElement("hidden", "id", uniqid("")); // text 要素を追加 $form->addElement("text", "name", "名前:", array("value"=>"","size"=>"24")); // radio 要素を追加 $obj =& $form->addElement("radio", "age", "年代:", "10代", "10", array("checked")); // デフォルトでチェックの設定にする $obj->setChecked(TRUE); $form->addElement("radio", "age", "", "20代", "20"); $form->addElement("radio", "age", "", "30代", "30"); $form->addElement("radio", "age", "", "40代", "40"); : : =========ソースここまで

    • ベストアンサー
    • PHP
  • クラスについて

    フォームの出力やエラーチェックを統括する自作クラスを作ろうとおもっております。 略すぎですが以下のようなソースの場合$formに値を返し配列にしていくにはどうすれば可能でしょうか? class Form { public function __construct() { } function addElement($type, $name, $label, $arr) { return "<textarea name=\"$name\"></textarea>"; } } $form = new Form(); $form->addElement('textarea', 'message', 'メッセージ:', array('rows' => 13, 'cols' => 58)); //同様に必要な分addElementでフォーム生成 うまく表せないのですがclass内で$formに配列を追加していくイメージになるのでしょうか? 例えば単純に $str = $form->addElement('textarea', 'message', 'メッセージ:', array('rows' => 13, 'cols' => 58)); とすれば$strに格納されるのですがpearのhtml_quickformを参考にしてみたところ出力されるものが 結果が全て$formに格納されるようでした。 できるだけソースもすっきりさせたくこのような方法を取り入れたいと思い最終的には$formをsmartyに 渡し表示させたいと思っております。 また、詳細な仕様もまだ決め兼ねている状態でこのようなものを自作するにあたり参考になる情報等が ありましたら是非教えて頂けますと幸いです。 上記のpearを参考にしようと思ったのですがファイル数も多く入り組んでおりなかなか理解できない状態です^^;

    • ベストアンサー
    • PHP
  • HTML_QuickFormのAdvCheckBox にデフォルトでチェックを入れるには

    HTML_QuickFormのAdvCheckBoxにデフォルトでチェックを入れたいのですが、 $form->addElement('advcheckbox', 'c1', '', 'Check1', NULL, array("f", "t")); $form->addElement('advcheckbox', 'c2', '', 'Check2', NULL, array("f", "t")); $form->addElement('advcheckbox', 'c3', '', 'Check3', NULL, array("f", "t")); $form->setDefaults(array('c2'=>'checked')); 上記のようにやってみたのですが Check2 にチェックを入れることは出来ませんでした。通常のcheckboxでは下記のようにやってチェックを入れることができました。 $form->addElement('checkbox', 'c1', '', 'Check1'); $form->addElement('checkbox', 'c2', '', 'Check2'); $form->addElement('checkbox', 'c3', '', 'Check3'); $form->setDefaults(array('c2'=>'checked')); AdvCheckboxは方法が違うのでしょうか?

    • ベストアンサー
    • PHP
  • PEARのライブラリはどこにインストールされるのでしょう

    お疲れ様です。 お世話になっております。 HTML_QuickFormに関して質問です。 CentOSでPEARをインストールし、 pear install HTML_QuickFormでインストールしました。 pear list すると HTML_Common 1.2.4 stable HTML_QuickForm 3.2.9 stable PEAR 1.4.9 stable と、インストールは確認できます。 php.iniのinclude_pathは include_path =".:/usr/lib/php/smarty:/usr/lib/php/pear" となっています。 smartyはrequire_once"Smarty.class.php";で呼び出しできるのですが、 HTML_QuickFormが"HTML/quick_form.php"でfile not foundになってしまいます。 pearのディレクトリをのぞいてみたら空の状態なんですが、いったいどこにHTML_QuickFormはインストールされているのでしょうか。 pearのライブラリはpearの配下にくると思っていたのですが。 呼び出すにはどこのパスを指定すればよいのでしょう・・・。

    • 締切済み
    • PHP
  • T_VARIABLE エラー

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> </head> <body> <h1 align="center"> 保存画面 </h1> <br> <?php //ファイルを保存 if(isset($_POST['hidFileFlag'])) { //ファイル確認状態である場合 //HTML文を出力 echo "<h3 align=\"center\">無題</h3> <h5 align=\"center\">ファイル名を入力してください</h5> <form action=\"TextEditorSave.php\" method=\"POST\"> <table align=\"center\"> <tr> <td align=\"center\"> <input type=\"text\" name=\"strNewName\" /> <br> <input type=\"submit\" name=\"save\" value=\"保存\" /> <input type=\"hidden\" name=\"hidMessage\" value=\"" . $_POST['txtaMessage'] . "\" /> </form> <form action=\"TextEditorTop.php\"> <input type=\"submit\" value=\"戻る\" /> </td> </tr> </table> </form>"; } else{ //ファイル名が存在する場合 if(isset($_POST['hidFileName'])){  //$_POST['hideFileName']に値が入っている場合 $strFileName = $_POST['hidFileName'];  //$strFileNameにファイル名の設定 $strMessage = $_POST['txtaMessage']; //$txtaMessageにメモ文章を設定 } elseif(isset($_POST['strNewName'])){//$_POST['strNewName']に値が入っている場合 $strFileName = $_POST['strNewName']; //$strFileNameにファイル名を設定 $strMessage = $_POST['hideMessage'];  //$strMessageにメモ文章を設定 } //タイトルにファイル名を表示 echo "<h3 align=\"center\">" . $strFileName . "</h3> <form action=\"TextEditorTop.php\"> <table align=\"center\"> <tr> <td>"; $strFilePath = "./data/" . $strFileName; $resFilePoint = fopen($strFilePath, "w"); //ファイルハンドルを取得 rewind($resFilePoint); //ファイルハンドルをファイルの先頭に移動 $intTimeStamp = mktime(); //現在のタイムスタンプの値を取得 $strNowTime = date("Y-n-d [H:i:s]", $intTimeStamp); //現在の時刻を取得 if(strcmp($strMessage, null)){ //文章をnullまで比較 fputs($resFilePoint, $strMessage . " " . $strNowTime); } fclose($resFilePoint); //ファイルハンドルを破壊 //HTML文を出力 echo "保存しました"<br> </td> </tr> <tr> <td align=\"center\"> <input type=\"submit\" value=\"戻る\" /> </td> </tr> </table> </form>"; } ?> </body> </html> ---------------------------------------------------------------- このプログラムを実行したら Parse error: syntax error, unexpected T_VARIABLE in C:\www\home\editor\TextEditorSave.php on line 39 とエラーがでました。どうすればなおりますか?教えて下さい?

    • 締切済み
    • PHP
  • 機種依存文字が?になる

    HTML_QuickFormを利用してフォーム送信しているのですが 受信したメールを見ると特定の文字が?になってしまい 文字化けをしてしまいます。 具体的にはメールで確認した際に<input type="text" ・・・>に 入力した半角カタカナと機種依存文字が?に変わっておりました。 php,tplファイルは全てutf-8で保存されphpのソースは以下のようになっております。 header('Content-Type: text/html; charset=utf-8'); mb_language('Japanese'); mb_http_input('UTF-8'); mb_http_output('UTF-8'); mb_internal_encoding('UTF-8'); require_once 'HTML/QuickForm.php'; require_once 'HTML/QuickForm/Renderer/ArraySmarty.php'; require_once 'Smarty/Smarty.class.php'; $to = 'mail@ad.com'; $form = new HTML_QuickForm('inq', 'post'); $form->addElement('text', 'name', '名前', array('class' => text)); $form->addElement('text', 'ad', '住所', array('class' => text)); $form->addElement('textarea', 'msg', 'コメント', array('rows' => 8, 'cols' => 30)); $value = $form->getSubmitValues(); if (isset($value['accept'])) { $subject = '連絡'; $message = <<<EOD 【名前】 {$value['name']} 【住所】 {$value['ad']} 【メッセージ】 {$value['msg']} 【メッセージ】 {$value['msg']} EOD; mb_send_mail($to, $subject, $message, "From: {$value['連絡']}"); $form->freeze(); ~略~ 半角カタカナの件は $message = mb_convert_kana ($message, 'K'); とし解決したのですが機種依存文字の解決策が見つからず自分なりに なんとか調べてみたところ下記のurlがみつかりました。 http://shimax.cocolog-nifty.com/search/2007/12/phpeucjputf8_f714.html utf-8では機種依存文字が?になるのは当たり前のことなのですね。 これを応用しなんとかできるかと思い下記のようにしてみたのですが 結果は同じでした・・・ $message = mb_convert_encoding(mb_convert_encoding($message,"sjis-win","UTF-8"),"UTF-8","sjis-win"); どのようにすれば解決できるものなのでしょうか? 宜しくお願い致します。

    • 締切済み
    • PHP
  • メールが送信されません。<phpを閉じて開いても

    メールが送信されません。<phpを閉じて開いても送信ボタンを押してメールが送信されません。 <?php namespace Application\Block\ExternalForm\Form\Controller; use Concrete\Core\Controller\AbstractController; use Core; use Page; class TForm2 extends AbstractController { // action を指定しなかった場合、view が実行されると思われる。初期表示。 public function view() { // 最初にフォームを開いた時の処理です。初期値を view に渡して、編集画面の表示を指定します。 $input['p_name'] = ''; $input['p_email'] = ''; $input['p_message'] = ''; $this->set('isvalid', true); $this->set('input', array()); $this->set('error', array()); $this->set('section', 'edit'); } // 入力値の検証処理 private function validate() { // バリデーション結果を成功に設定 $isvalid = true; // 入力値を取得 $input['p_name'] = trim($this->post('p_name')); $input['p_email'] = trim($this->post('p_email')); $input['p_message'] = trim($this->post('p_message')); // 検証実行 if ($input['p_name'] == '') { $isvalid = false; $error['p_name'] = 'お名前は、必ず入力してください。'; } if ($input['p_email'] == '') { $isvalid = false; $error['p_email'] = 'メールアドレスは、必ず入力してください。'; } if ($input['p_message'] == '') { $isvalid = false; $error['p_message'] = 'メッセージは、必ず入力してください。'; } // View に値を渡す $this->set('isvalid', $isvald); $this->set('input', $input); $this->set('error', $error); return $isvalid; } public function action_confirm() { // 検証結果によって、確認(confirm) を、編集(edit) セクションを出し分け。 if ($this->validate()) { $section = 'confirm'; } else { $section = 'edit'; } $this->set('section', $section); } public function action_update() { // 検証結果によって、完了(complete) を、編集(edit) セクションを出し分け。 if ($this->validate()) { //ここの部分でエラーが発生します。 ?>//一回閉じる。 //ここから追加しました。 <?php if ($_POST) { ?> <!-- 確認画面 --> <form action="./tform2.php" method="post"> 名前 <?php echo $_POST["fullname"] ?> Eメール <?php echo $_POST["email"] ?> 本文 <?php echo nl2br($_POST["message"]) ?> <input type="submit" name="back" value="戻る" /> <input type="submit" name="send" value="送信" /> </form> <?php } else { ?> <!-- 入力画面 --> <form action="./tform2.php" method="post"> 名前 <input type="text" name="fullname" value=""> Eメール <input type="email" name="email" value=""> 本文 <textarea name="message" id="" cols="" rows=""></textarea> <input type="submit" name="confirm" value="確認" class="button"> </form> <?php } ?> //ここまで <?php //もう一回開ける $c = Page::getCurrentPage(); header('location: ' . Core::make('helper/navigation')->getLinkToCollection($c, true) . '/complete'); exit; } else { $this->set('section', 'edit'); } } public function action_complete() { $this->set('section', 'complete'); } public function action_back() { // 戻るボタンで、編集(edit)セクションを表示します。 $section = 'edit'; $this->set('section', $section); } }

    • 締切済み
    • PHP
  • PHPのエラー教えて!parse error, unexpected T_STRING

    すみません PHPのエラー教えてください ------------------------------内容は↓ <?php // まずはクラス名を指定 class AboutMe { // 変数のタイプを指定します ●ここ●public $name = "デイビッド田中"; public $email = "david.tanaka@davidtanaka.localdomain"; public $phone = "011-81-333-333-3333"; } // クラスを呼び出します。 $About = new AboutMe(); // 情報を表示します print($About->name); ?> ---------------------------------ココまで ●ここ●は印のために入れたもの エラーは parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in ●ここ● エラー番号は●ここ●を指しています WindowXP、Apache、PHP5

    • ベストアンサー
    • PHP