• ベストアンサー

「@$変数」の「@の意味は?」

PHPの勉強中です。 サンプルプログラムを見ていて以下の「@」の意味がわかりません。 ------------------- // 入力内容を取得する $text1 = @$_POST["text1"]; if (strlen(@$text1) < 4 or strlen(@$text1) > 8) { echo "<p>4~8文字以内でお願いします"; } --------------------- マニュアルには「式の先頭につけるとエラーを非表示」と有りますが、変数の前につけるのはどういう意味があるのでしょうか? 試しに@を全て消しても同じ結果でした。 アドバイスよろしくお願いします。

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

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

  • ベストアンサー
  • nicolish
  • ベストアンサー率72% (13/18)
回答No.1

$_POST["text1"]; は、配列$_POSTに"text1"をキーとする値が無かったらエラー(E_NOTICE)になる。 $test1 = @$_POST["text1"]; とすると、E_NOTICEが出ない(この場合、$text1にはnullが入る)。 勉強中ならば、ソースコードの先頭に error_reporting(E_ALL); と宣言したほうがいい。初期設定だとE_NOTICEレベルのエラーはどこにも表示されず、どこにも出力されないからな。 E_ALLにしておくと、NOTICEが見えるようになるから、@が無い時にどういう動作をするか分かるはず。 <?php error_reporting(E_ALL); $array = array('hoge' => 'fuga'); $text1 = $array['key']; $text2 = $var; ?> //Notice: Undefined index: key in C:\xampp\htdocs\test.php on line 4 //Notice: Undefined variable: var in C:\xampp\htdocs\test.php on line 5

tantamu
質問者

お礼

早速の回答有り難うございました。 さすが専門家ですね。助かります☆ 特に「error_reporting(E_ALL);」は勉強になりました。 ホントにつけた方が良さそうですね(^_^;

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

変数も式です。

tantamu
質問者

お礼

なるほど…No1の人の回答も含めよくわかりました。 有り難うございました。

関連するQ&A

  • 変数の中に変数を

    お世話になっております。 質問タイトルにありますように、変数の記述のあるテキストを変数の中にいれたいのですが、元の変数が有効にならないため質問させていただきます。(グーグルで検索しているのですが、どれも解決に至らないので・・) データベースに変数($text)を含んだテキストを保存した後、以下のような構成のファイルをブラウザでみると、変数($text)は展開されずに、ブラウザ上に$textと表示されてしまいます。 <?php $text="テスト"; //DB問合わせ //上記、変数textを含んだテキストをDBから呼び出す echo $data;//この変数の中に、上記変数($text)が入っている。 ?> 以上のような場合、変数($text)を展開させるには、どのようにしたら宜しいのでしょうか? お忙しい中恐縮ですがアドバイスのほど宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • オプションボタンの値(value)を外部変数に読み込ませる機構

    例えば、下のコードの場合、 <?php echo' <select name=\"selname\" method=POST> <option value=\"1\">text1 <option value=\"2\">text2 <option value=\"3\">text3 <option value=\"4\">text4 </select> <input type=submit value=\'inputvalue\'> '; if($_POST[selname]=''){echo'君は何も選んでない';} else{$i=$_POST[selname]; echo'君は'.$i.'番目を選んだ';} ?> があったとして、 上のPHPコードでは、$_POST[selname] が各オプションのvalue1~4の値を取得するときは、ブラウザからオプションボタンから選んだときに選ばれたオプションのvalueの値を取得するのでしょうか? つまり、次のようなことになるのでしょうか. 1.新しくページを開いたときは$_POST[selname]=''  なので、ブラウザではフォームしか表示されない 2.オプションボタンでtext3を選んで<input>ボタンを  クリックしたら、フォームの下に    君は3番目を選んだ  と表示されるのでしょうか? このメカニズムを教えて下さい.   

    • ベストアンサー
    • PHP
  • 変数名を変数で指定するのに$_POST[

    http://oshiete1.goo.ne.jp/qa2691790.html の#1さんに,変数名を変数で指定できることを教わりました. 下記の3行目のように,です. for ($i=1;$i<=5;++$i){ if (${"var".$i}=="") { ${"errMsg".$i}=$i."が未入力"; } } ここで, (1) $_POST["form"] には「str」という文字列が入っています. (2) $Var には「10」という数値が入っています. (3) これらを結合し, どうしても $_POST["str10"] みたいな変数を作らなければならないのですが, ・<? echo $_POST["str" . $Var]; ?>では何も起こらず. ・<? echo $_POST[{"str" . $Var}]; ?>などと{}で括っても, Parse error: parse error, unexpected '{', expecting ']' in C:\temp.php on line 10. みたいなエラーになります. どういうのが正しい書き方でしょうか?

    • 締切済み
    • 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
  • phpのsetTextで変数の使用

    phpでのsetTextについて教えてほしいです。 $text 日本語の場合 setText($text); だと、空の状態です。 $text アルファベットの場合ちゃんと表示されます。 setText('あいうえお');の場合ちゃんと表示されます。 setText('abcde');の場合ちゃんと表示されます。 どうしても変数からの日本語が入らないのですがどうすればよいでしょうか。 $textは POSTで受け取ったものを変数としています。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • zampp  PHPでPOSTの変数が返ってこない

    お世話になります。 PHPを最近はじめたばかりの初心者です。 zampp をインストールし、Apache、PHPの動作は問題なく動いています。 「sample.html」「sample.php」の2つファイルを作成し、 C:\xampp\htdocsに保存しました。 「sample.html」と「sample.php」は、ある本からサンプルコードです。 ------------------- 「sample.html」 ------------------- <!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" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>sample page</title> </head> <body> <h1>フォームサンプル</h1> <form method="post" action="sample.php"> <input type="text" name="text1"> <input type="submit"> </form> </body> </html> ------------------- 「sample.php」 ------------------- <?php $str = $_POST['text1']; if ($str != ""){ $msg = "あなたは、「{$str}」って書いたね?"; } else { $msg = "何も書いてなかったよ?"; } ?> <!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" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>sample page</title> </head> <body> <h1>結果表示</h1> <div><?php echo $msg; ?> </body> </html> ------------------------------------ htmlファイルをブラウザーで開き、submit(送信ボタン)を押すと、 text1に入力した文字が、返ってきて .phpに表示されなければならないのですが、 .phpでブラウザーに表示されるのは、上記のコードがそのまま表示されてしまいます。 (入力した文字も代入されずに、コードのまま表示されます) 上記のコードとは違う、htmlファイルとphpファイルで動作させても コードがそのまま表示されて、$_POSTがうまいきません。 原因が分からずに困っています。 ご教授いただけますよう何卒よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPにて変数をテキストファイルに出力する方法

    PHPにて、変数のテキスト書き出しをしたいのですが、 シェルスクリプトでいう左記の動作ですが、「echo $seireki >> ./time.txt」 PHPで実施させる場合、どのようになるのでしょうか。 <? $seireki = $_POST{'seireki'}; `echo $seireki >> ./time.txt`; ?> では無理でした。 ご教示頂ければ幸いです。よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPの文字列をJavascriptの変数にする

    PHPの変数に格納された文字列を、直接Javascriptの変数の一部として格納しようと考えています。 例:) <script> var txt = "<?php echo $text; ?>"; </script> しかし、$textにダブルクォーテーションなどの文字が含まれていると、スクリプト全体が破綻します。今のところ、PHPの中で、問題を起こしそうな文字列を変換するように処理しています。 例:) $text = str_replace("\\", "\\\\", $text); $text = str_replace("\"", "\\\"", $text); $text = str_replace("\n", "\\n", $text); これよりもスマートな方法(たとえば用意されている関数を使うなど)がありますでしょうか。

    • ベストアンサー
    • PHP
  • PHPの参考書で分からないとこがあります

    PHPによるWebアプリケーションスーパーサンプル第2版のP.99のサンプルファイルにどうしても分からない箇所があります。 <html> <head> <title>絞込み検索キーワードをSQLに反映する</title> </head> <body> <?php // データを受け取る $text1 = @$_POST["text1"]; // SQL(ProductsテーブルからProductNameを抽出する) $sql = "SELECT ProductName FROM Products "; // キーワードが入力されているときはWHERE以下を組み立てる if (strlen($text1) > 0) { // 全角スペースを半角スペースに変換する $text2 = str_replace(" ", " ", $text1); // キーワードを空白で分割する $array = explode(" ", $text2); // 分割された個々のキーワードをSQLに反映する $where = "WHERE "; for ($i = 0; $i < count($array); $i++) { $where .= "(ProductName LIKE '%$array[$i]%')"; if ($i < count($array) - 1) { $where .= " AND "; } } } // 受け取った値を表示する echo "<p>検索キーワード:".$text1; // 組み立てたSQLを表示する echo "<p>組み立てたSQL:".$sql.@$where; ?> <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> <table> <tr> <td><input type="text" name="text1" value="<?php echo $text1?>"></td> <td><input type="submit" value="送信" name="sub1"></td> </tr> </table> </form> </body> </html> 上記の for ($i = 0; $i < count($array); $i++) { $where .= "(ProductName LIKE '%$array[$i]%')"; if ($i < count($array) - 1) { $where .= " AND "; } } の箇所なんですが、そこに複数ある「.(ドット)」は何を表しているのでしょうか? また、 if ($i < count($array) - 1) { $where .= " AND "; が行っている処理を教えて下さい。 初歩的な質問かもしれませんが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • フォームへ値の渡し方について

    こんばんわ。 PHPの勉強をしています。 入力されたIDを元にDBから氏名をクエリし、テキストボックスへ表示させようとしていますが、テキストボックスの指定の仕方が分からず、行き詰っています。 各テキストフォームは<?php?>の中に記述しています。 初心者のため簡単にできることなのかもしれませんが、ご教授願います。 <form method="POST" action="hyouji.php"> ID: <?php if($_POST["ID"]){ $id = $_POST["ID"]; echo "<input type=text name=ID onChange = submit() value = '$id'>"; ECHO "YES"; }else{ echo "<input type=text name=ID onChange = submit()>"; ECHO "NO"; } ?> Name: <?php echo "<input size=28 type=text name=Name ><br>"?> /*上記、テキストボックスに値を入力*/ <input type=submit name=bottun1 value=入力> </form> <?PHP $host = 'localhost'; $user = 'root'; $pass = 'root'; $db = 'DB'; if($_POST["ID"]){ $id = $_POST["ID"]; $link=mysql_connect($host,$user,$pass) or die("接続エラー"); mysql_query("SET NAMES sjis") or die("can not SET NAMES sjis"); mysql_select_db($db,$link) or die("接続エラー"); $sql="SELECT * FROM test WHERE id = '$id'"; $res=mysql_query($sql,$link) or die("データ抽出エラー"); $rows = mysql_fetch_array($res,MYSQL_ASSOC); echo "<tr>"; echo "<td>".$rows["user_id"]."</td>"; echo "<td>".$rows["customer"]."</td>"; echo "</tr>"; mysql_close($link); }else{ echo "表示データはなし"; } ?> 以上、長文になりましたがよろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう