• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPの syntax error について)

PHPのsyntax errorについて

4017Bの回答

  • ベストアンサー
  • 4017B
  • ベストアンサー率73% (1303/1774)
回答No.1

4行目の $FileName="C:\xampp\htdocs\".$FileName; の \ を全て $FileName = "C:\\xampp\\htdocs\\".$FileName; ~という風に修正すれば通る様になると思います。 P.S. \ (日本語の¥マーク) はPHPコード内では出現場所の如何に関わらず常にエスケープ文字として機能するため、うっかり癖でローカル内ファイルへのURL(Windows風PATH)を記述してしまうと。ディレクトリ階層の区切りを示す「\ (¥)」がエスケープ文字と判断され、例文の $FileName へ代入された文字列は実際には C:xampphtdocs".$FileName;~(これ以降の改行も含む全ての記述が1つの文字列と判断されている)~という風になるため。 エラー表示で9行目と出るのは、4行目で発生したエスケープ処理の間違いにより、$FileName="" の終末を意味する " が「PHPプログラムとして正しい意味で次に最初に登場する部分」が9行目の echo "~の部分になるため。そこまでを1つの文字列として処理してしまうからです。 このため echo "~以降の部分から改めてPHPプログラムとしてサーバ側が解釈しようとしますが… <form id='next' method... ~なんてPHPプログラムは存在しないため、そこでエラーになって止まるのです。

papashiroSooke
質問者

お礼

早速にご回答を頂き、有難うございます。 ご忠告の通りに"\"を "\\" にしてみたらファイル名を渡すことが出来ました。 しかし今度は、「そんなファイルは存在しません」というメッセージが出てきました。 これはまた別の件として質問させていただきます。 もしよかったらそちらの方にもご回答いただけると有難いです。

関連するQ&A

  • PHPのエラーメッセージ

    HTML文書からPHPに送ったファイル名のついたファイルをunlink()関数で削除しようとしているのですが、添付したスクリーンショットのようなエアーメッセージが出てきて進めません。 PHPのコードは下のようなものです。 <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title> QAdeleteFile.php</title> </head> <body> <?php $FileName=$_POST["deleteFileName"]; $FileName="C:\\xampp\\htdocs\\".$FileName; echo $FileName ; unlink($FileName); echo "<form id='next' method='POST' action='QAgmeOver.php' >"; echo "<input type='submit' value='call QAgameOver' >"; echo "</form>"; ?> <!-- <script type="text/JavaScript"> window.document.getElementById("next").submit(); </script> --> </body> </html> エラーメッセージで言っているQAgameOver.phpというのは上に挙げたコードのプログラムです。このメッセージでは、PHP はそのファイルをこのプログラムの中で探そうとしているように見えますが、そのファイルは当然ローカルサーバーのルートであるhtdocs の中に置いてあります。 なぜこうなるのでしょうか?詳しい方、どうか教えてください。

    • ベストアンサー
    • PHP
  • phpについて 入力ホーム

    ホームページ php 入力ホームについて 初心者です。 HTML内に入力ホームに関するphpページを指定したいのですが <form action="form1.php" method="post">は指定できましたが、もう一つ<form action="form3.php" method="post">も指定したいくて、下のコードを書き込んだのですが、 <form action="form1.php" method="post"> <form action="form3.php" method="post"> 以下のようなエラーメッセージが出ます タグ<form>内に< form>を含むことができません。 どうしたら良いでしょうか?

    • 締切済み
    • PHP
  • phpのエラーチェックについて質問です!

    phpのエラーチェックについて質問です! エラーチェックについてです><; if(isset($_POST['name'])){ $name = htmlspecialchars($_POST['name']); if (empty($name)) { $message = '未入力があります'; と記入してエラーメッセージを表示したい場所に記載してます。 しかし、フォームで <form action="regist2.php" name="form" method="post"> でsubmit押すとフォームが空白でもactionでregist2.phpに送られてしまいます><; エラーがなければ、そのままsubmitでaction=regist2.phpに送りたいと考えております。 なにか解決方法はないでしょうか? ご教授お願いします!!!!!!!!

    • 締切済み
    • PHP
  • PHPのPHP_SELFに絡む設定を教えてください

    PHPを勉強中なのですが、以下のソースをSubmit(value=更新)処理すると 結果がURLが見つからない「ページを表示できません」がでます。 恐らく、「PHP_SELF」に絡む設定か、「localhost」のPathに問題があると思うのです。 何かの設定が抜けていると思うのですが、色々調べても分かりません。 どこの設定を直せばいいか教えてください。(^^ 【書籍】 ホンキで学ぼう!PHPのキホン 【環境】 OS:WindowsXPHomeEdition Apapche:1.3.26 PHP:4.2.3 【URL結果】 最初にPHPにアクセスしたときのURL:http://localhost/tmp/php/fileedit.php SubmitしたときのURL:http://tmp/php/fileedit.php 【ソース】書籍の抜粋 <? $filename = "todo01.txt"; if ( $submit ) { $backupfile = $filename.".bak"; echo $backupfile; if ( copy($filename, $backupfile) ) { $fp = fopen($filename, "w"); if(flock($fp, 2)){ fputs($fp, $contents); flock($fp, 3); }else{ echo "ERROR: file lock is failed.<BR>\n"; exit; } fclose($fp); }else{ echo "ERROR: backup failed.<BR>"; exit; } } // ファイル書き換え部終わり ?> <HTML> <HEAD> <TITLE> <? echo $filename ?> </TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=euc-jp"> </HEAD> <BODY> <FORM ACTION="<? echo $PHP_SELF; ?>" METHOD="POST"> <TEXTAREA NAME="contents" ROWS="25" COLS="100"> <? require ( $filename ); phpinfo(); ?> </TEXTAREA> <INPUT TYPE="submit" NAME="submit" VALUE="更新"> </FORM> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • フォームから受け取ったデータを変数に/PHP

    入力フォームからデータを送信し、受け取ります。 <form action="index.php" method="post"> <input type="text" name="hoge"> <input type="submit"> </form> <?php echo htmlspecialchars($_POST['hoge']); ?> この時に受けったデータが、「りんご」だとして この「りんご」を変数にしたいです。 ↓ <?php $keyword = "りんご"; ?> このようにするには、 <form action="index.php" method="post"> <input type="text" name="hoge"> <input type="submit"> </form> <?php echo htmlspecialchars($_POST['hoge']); ?> の後にどのような処理をすればよいでしょうか? または初めから「$keyword」としてフォームからデータを送ることはできるのでしょうか? 何卒ご指導の程よろしくお願いします。

    • ベストアンサー
    • PHP
  • javascript + php でエラー

    エラーを取り除くことができず、困っています。 助けてください。 下記のようなコードで、PHPからjavascriptに文字列を渡しているのですが、 文字列に改行コードがあるとエラーになってしまいます。 (改行コードがない場合はエラーはでません) 文字コードはEUC-JP、改行はLFとしています。 エラーの原因と、対策を教えてください。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <script type="text/javascript"> <!-- function sampl(str) { alert(str); } //--> </script> </head> <body> <form method="post" action="#"> <?php $str = "テスト\n改行あり"; ?> <input type="button" value="実行" onClick="sampl('<?=$str?>')"> </form> </body> </html>

  • PHPのフォームとAjaxを組み合わせたいのですが

    簡潔にコードを書かせて頂きますが、PHPとjQueryによるAjaxを連携させたいと考えています。 まずform.phpのフォームをsubmitし、その内容をpost.phpへ送り、リダイレクトにてres.phpへ送るという、PHPの基本的な動きをさせますが、 その結果はres.phpという新しいページではなく、Ajaxにてform.phpの<div id="text1">部に元々書かれている<form>ではなく、res.phpの出力内容を出力したいと考えております。 この場合、どのようにjQueryコードを記述すればいいのでしょうか? 色々考えて試してみたのですが、上手くいきませんでした。 自分はform.php、post.php、res.phpという3つのファイルを用意していますが、もしかしたらori.phpという出力用のファイルを用意し、その<div>空間内にform.phpのフォームやres.phpの結果をAjaxによって出力するのかなとも思いましたが、良く分かりませんでした。 アドバイス頂けないでしょうか? 宜しくお願い致しします。 (( form.php )) <html> <head> <script type="text/javascript" src="./js/jQuery-1.4.4.js"></script> </head> <body> <div id="text1"> <h2>その1</h2> <form action="post.php" method="POST" id="form" name="form" > <input type="checkbox" id="news" name="news" value="news" /> ニュース <br /> <input type="submit" name="submit" value="submit" /> <input type="reset" name="reset" value="reset" /> </form> </div> </body> </html> (( post.php )) <?php session_start(); session_regenerate_id(TRUE); $_SESSION["news"] = "news 表示"; $host = $_SERVER['HTTP_HOST']; $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); $extra = 'res.php'; header("Location: http://$host$uri/$extra"); (( res.php )) <?php session_start(); session_regenerate_id(TRUE); ?> <html> <head> <script type="text/javascript" src="./js/jQuery-1.4.4.js"></script> </head> <body> <div id="text2"> <h2>その2</h2> <?php $_SESSION["news"]; ?> </div> </body> </html> <?php session_destroy(); $_SESSION = ''; ?>

    • ベストアンサー
    • PHP
  • PHP foreachのループの中でPOST送信

    現在掲示板を作っています。 <?php foreach ($result as $record){ $id = $record ["id"]; $title = $record ["title"]; ?> <form method="post" name="form1" action="contents.php"> <input type="hidden" name="id" value="<?php echo $id; ?>"> <a href="javascript:form1.submit()" ><?php echo $title; ?></a> </form> <?php } $dbInfo = null; ?> </form> テーブルのidとtitleをすべて取り出しています。 titleを一覧表示で全件表示させリンクを貼り、移動先にidをPOSTで送信し投稿内容がみられるようにしたいのですが、リンクを貼れても飛べなかったり、移動できてもなにも送信していない状態(ただ移動しただけ)だったり。 2つ目のphp直後の「}」を1つ目の中で閉じるとPOST送信しつつ移動できるのですが、1件しか表示されなくなってしまいます。 <form method="POST" name="con-id"> <input type="hidden" name="id" value="<?php echo $id; ?>"> <a href='contents.php'><?php echo $title; ?></a> </form> などもしてみましたが、POST送信はされませんでした。 なにか方法はありませんでしょうか? ここをこうした方がいい、など教えて頂きたいです。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • 配列の中身をボタンをおすことによって順次表示させたいです

    $files は配列です。 この中に値が格納されております。 この値をNEXTボタンを押すことによって順次表示させていきたいです。 どのようにしたらよいのでしょうか? <?php if($_POST['next']){ echo "<img src=\"img/$files[4]\">"; } ?> <form method="post" action="test.php"> <input type="submit" name="next" value="NEXT" > </form>

    • ベストアンサー
    • PHP
  • php入力画面から確認画面へ情報の受け渡しについて

    php 参考書を見て、入力フォームを作成しているのですが、入力画面から確認表示画面へ情報の受け渡しについて。コードは下に記載してます。 最初の入力画面ではmethod=postで送信した値を$name = $_POST['name'];に格納して次ページに値を渡すそうですが、 しかし最初の入力画面のコードに$name = $_POST['name'];と、もうひとつ、$name = $_SESSION['name'];でセッションに保存して、次ページに送るそうですが、 保存したSESSIONの値は次ページの確認表示画面から戻る際に値を保持する際に使うからだそうですが、値を次ページに送る役割が$_POSTやSESSIONにあるならば、SESSIONの記述のみで 次ページに送れると思うのですが、なぜこのコードの場合、$_POSTに値を格納する必要があるのでしょうか? 以下のような解釈で正しいでしょうか?? 「$_POSTは送られた値をフォームのvalue内にechoで出力するため、SESSIONはページから戻る場合に値を保持するため」 回答よろしくお願いいたします。 コード 入力初期画面 <?php session_start(); $errors = array(); if(isset($_POST['submit'])){ $name = $_POST['name']; if($name === ""){ $errors['name'] = "お名前が入力されていません。"; } if(count($errors) ===0){ $_SESSION['name'] = $name; header('Location:https:次ページへform2.php'); exit(); } } ?> <body> <form action="form1.php" method="post"> お名前 <input type="text" name="name" value="<?php if(isset($name)){echo $name;}?>"> <input type="submit" name="submit" value="確認画面へ"> </body> コード 確認表示画面 <?php session_start(); if(isset($_SESSION['name'])){ $name = $_SESSION['name']; } <body> <form action="form3.php" method="post"> お名前 <?php echo $name;?> <input type="submit" name="submit" value="送信する"> p><a href="form1.php?action=edit">入力画面へ戻る</a></p> </body>

    • ベストアンサー
    • PHP