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

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

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

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

Q&A

解決済

1回答

199閲覧

PHPスコープについて

Chandler_Bing

総合スコア673

PHP

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

0グッド

1クリップ

投稿2019/02/01 16:07

画像のアップデートに成功(失敗)すると、セッション変数success(error)にメッセージを格納し、変数に格納するgetResultsメソッドがあります。getResultsを

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$uploader->upload();
list($success, $error) = $uploader->getResults();
}

のようにifの中で呼び出すとsuccess変数の文字がJqueryに反応せず表示されません、スコープの問題でしょうか。
getResultsの中の
$success = null;
$error = null;
を削除し、index.phpの宣言しif文の中でgetResultsを呼び出しても表示されません。何故か教えてください。

PHP

1<?php 2 3session_start(); 4 5ini_set('display_errors', 1); 6define('MAX_FILE_SIZE', 1 * 1024 * 1024); // 1MB 7define('THUMBNAIL_WIDTH', 400); 8define('IMAGES_DIR', __DIR__ . '/images'); 9define('THUMBNAIL_DIR', __DIR__ . '/thumbs'); 10 11if (!function_exists('imagecreatetruecolor')) { 12 echo 'GD not installed'; 13 exit; 14} 15 16function h($s) { 17 return htmlspecialchars($s, ENT_QUOTES, 'UTF-8'); 18} 19 20require 'ImageUploader.php'; 21 22$uploader = new \MyApp\ImageUploader(); 23 24if ($_SERVER['REQUEST_METHOD'] === 'POST') { 25 $uploader->upload(); 26} 27 28list($success, $error) = $uploader->getResults();//質問です 29 30$images = $uploader->getImages(); 31 32?> 33<!DOCTYPE html> 34<html lang="ja"> 35<head> 36 <meta charset="utf-8"> 37 <title>Image Uploader</title> 38 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 39 <style> 40 body { 41 text-align: center; 42 font-family: Arial, sans-serif; 43 } 44 ul { 45 list-style: none; 46 margin: 0; 47 padding: 0; 48 } 49 li { 50 margin-bottom: 5px; 51 } 52 </style> 53</head> 54<body> 55 56 <form action="" method="post" enctype="multipart/form-data"> 57 <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo h(MAX_FILE_SIZE); ?>"> 58 <input type="file" name="image"> 59 <input type="submit" value="upload"> 60 </form> 61 62 <?php if (isset($success)) : ?> 63 <div class="msg success"><?php echo h($success); ?></div> 64 <?php endif; ?> 65 <?php if (isset($error)) : ?> 66 <div class="msg error"><?php echo h($error); ?></div> 67 <?php endif; ?> 68 69 <ul> 70 <?php foreach ($images as $image) : ?> 71 <li> 72 <a href="<?php echo h(basename(IMAGES_DIR)) . '/' . basename($image); ?>"> 73 <img src="<?php echo h($image); ?>"> 74 </a> 75 </li> 76 <?php endforeach; ?> 77 </ul> 78 79</body> 80 81<script> 82$(function() { 83 $('.msg').fadeOut(3000); 84}); 85</script> 86 87</html>

PHP

1//該当メソッドのみ 2 public function upload() 3 { 4 try { 5 // error check 6 $this->_validateUpload(); 7 8 // type check 9 $ext = $this->_validateImageType(); 10 // var_dump($ext); 11 // exit; 12 13 // save 14 $savePath = $this->_save($ext); 15 16 // create thumbnail 17 $this->_createThumbnail($savePath); 18 19 $_SESSION['success'] = 'Upload Done!'; 20 } catch (\Exception $e) { 21 $_SESSION['error'] = $e->getMessage(); 22 // exit; 23 } 24 // redirect 25 header('Location: index.php'); 26 exit; 27 } 28 29 public function getResults() 30 { 31 $success = null; 32 $error = null; 33 if (isset($_SESSION['success'])) { 34 $success = $_SESSION['success']; 35 unset($_SESSION['success']); 36 } 37 if (isset($_SESSION['error'])) { 38 $success = $_SESSION['error']; 39 unset($_SESSION['error']); 40 } 41 return [$success, $error]; 42 }

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

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

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

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

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

wwbQzhMkhhgEmhU

2019/02/02 03:06

HTTPのリクエストメソッドがPOSTではないからだと思います。 POSTなのかそうでないのかはブラウザの開発者用の機能で調べてください。 HTTPのリクエストメソッドそのものについては、ググって調べてください。 ifで条件判定している$_SERVER['REQUEST_METHOD']が何なのかも分からないうちに、想像で質問しないでください。論外です。 問題を分解し、よく分からない部分だけを残していろいろ試していき、Webなども十分調べた上でどうしてもわからない場合だけ、試した結果と自分の意見も載せた上で質問しましょう。
guest

回答1

0

自己解決

考えがごっちゃになっていましたが、理解できました。

投稿2019/02/02 10:05

Chandler_Bing

総合スコア673

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問