アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。phpを触り出している初心者です。携帯に対応させたいのですが、phpだけでいっぱいなので助けてください.

数字が0だったら非表示
2だったら2の画像・・・というようなものを作りたいのですが
imgタグの埋め込み方・記述方法がよくわかりません。
↓数字を文字で表示する方法はこれで一応やってみました。
<?php

$number1 = 0;
$number2 = 2;
$number3 = 3;
$number4 = 4;


if ($number1 == true) {

echo"<p>0は非表示です。";
}
if ($number2 == true) {

echo"<p>1の画像です。";

}
if ($number3 == true) {

echo"<p>2の画像です。";

}
if ($number4 == true) {

echo"<p>3の画像です。";

}


?>

しかし画像がうまくいかずIE6では一種類の画像だけ表示されて
他の新しいブラウザでは文字化けしてる状態です。
それぞれ違う画像を当てはめる場合
どのように数値を増やして記述したらよいのでしょう?
色々試していますがこの記述も正しいのがわかりません。

<?php

$gazou = imagecreatefromgif("img/01.gif");
imagegif($gazou);



?>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<meta http-equiv="content-Type" content="application/xhtml+xml; charset=shift_jis" />
<meta http-equiv="content-style-type" content="text/css" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<title>数字で分岐して画像を表示</title>
</head>
<body>
<div style="text-align:center;">
<?php

$number1 = 0;
$number2 = 1;
$number3 = 2;
$number4 = 3;


if ($number1 == true) {

echo'<img src="gazou.php" />';

}
if ($number2 == true) {

echo'<img src="gazou.php" />';

}
if ($number3 == true) {

echo'<img src="gazou.php" />';

}
if ($number4 == true) {

echo'<img src="gazou.php" />';

}

?>
</div>
</body>
</html>

A 回答 (13件中1~10件)

複数の回答者が同時に別々の方法論を説明しているため、質問者さんは混乱されているように見受けます。



■hogehoge78のパターンに関して
説明が若干雑だったようです。
私の説明した方法は、「test19.php」というファイルと、「gazou.php」というファイルを別々に分ける方法です。
<img src="xxxx">というタグは知ってのとおり画像パスを指定するとその画像を出力します。
なので、src="gazou.php"として、PHPスクリプトを指定すると、
それは当然PHPスクリプトと認識されますので、画像が表示されません。
なので、header("Content-Type:image/gif");という記述をgazou.php内に記述してやり、
「これは画像だ」という風にブラウザに認識させて、
最後にimagegif()関数にて、画像を出力させています。
その為、「test19.php」の中に、上記の記述を含めると、正常に動作いたしません。

■koke29さん、Slyarさんのパターンに関して
hogehoge78のやり方は、画像をPHPスクリプトで表現する、ということで、
上記のように色々考えなければいけませんが、お二方のやり方は、
素直に<img src="xxxx">に記述したいimgフォルダに入っている01.gif/02.gifなどを
if文などの条件式を用いることで、動的にファイル名を変更して、ファイル名の記述を書き出す
というものです。

■imagecreatefromgif/imagegif関数の意味に関して
これらの関数は、GDライブラリという、画像を編集するときに使う関数です。
例えばある画像の上に動的に任意の文字を挿入して出力したい、とか
アクセスカウンタでimgタグで00.gif~09.gifをいちいち指定しないで、
アクセス数に応じて一個の画像として表示したいときなどに使います。
なので、今回の質問者さんのサンプルのスクリプトにはあまり適合する内容ではないかもしれません。


以上、長文失礼しました。
    • good
    • 0
この回答へのお礼

ご丁寧なフォローありがとうございましす。

php本の画像に関するページが少なく
imagecreatefromgifというのをたまたまサンプルで見つけ
使えるのかと試したんですがどうも目的が違うようですね。

>その為、「test19.php」の中に、上記の記述を含めると、正常に動作いたしません。

test19.phpで保存しないで
上の項目だけはgazou.phpで保存して別にするということですか?

基本がわかっていなくてすみません。勉強します!

お礼日時:2009/06/10 22:41

解決されたようでよかったです!


横から口を出してしまったために混乱してしまったんですね
hogehoge78様の適切なまとめが解決の早道になったようで助かりました

解決済みですが、私の提案でご希望の処理を作る方法も一応
$numberに何を代入するかで、希望の使い方も可能です

私の場合はフォームで送信されるものとして提案していたので
$_REQUEST[number] としていますが、文字列から取り出した値を代入で
後半部分はそのままでも流用可能です

$number = 文字列から取り出した値;
という書き方が出来ればOKです

配列を利用する方法ですので、最初はとっつきにくいかもしれませんが
覚えるととっても便利なので提案してみました
今回のような使い方なら長々とif文を書く必要もないので便利ですよー
(配列に無い値と0の時はimgタグ自体を非表示にする処理は必要です)

では。質問者様&回答者の皆様、お疲れ様でした。
    • good
    • 0
この回答へのお礼

すみません。大変遅くなりまして申し訳ありません。
皆様には本当に感謝しております。
今は第二段の疑問に悩んでいますが質問に至らない事でなかなか
前に進めません。^^;
とりあえず赤ん坊のような私にご親切に色々教えてくださって
ありがとうございます!
本当は皆様に同じポイントを差し上げたいのですがシステム上申しありません。
また、別便で質問を出すつもりですがまたご指導いただけたら嬉しいです。

お礼日時:2009/06/22 12:22

>test19.phpで保存しないで


>上の項目だけはgazou.phpで保存して別にするということですか?
⇒その通りです。

「gazou.php」というファイルを画像であると見立てて、img srcにパス指定します。
PHPスクリプトも画像も他のファイルExcelファイルやWordファイルも全て、バイナリデータとして表現されます。
それらの画像ファイルなどをメモ帳(notepad)にドラッグ&ドロップしてみるとなにやら文字化けしたようなものが表示されてくると思います。
メモ帳は文字データを編集するソフトなので、文字データではないものをドラッグ&ドロップすると、文字データではないのに、がんばって文字データとして読み込もうとします。その為、文字っぽいところは文字に変換して変換できないところは適当な文字に割り振ったりして表現し、文字化けしたような変な文字列が羅列されます。

つまり、gazou.php内では、echo文を使ってやって、そのバイナリデータをメモ帳で表示したように表示します。
ブラウザは、画像データも文字データも扱うことが出来るわけですが、そのechoされたデータ列が文字なのか、はたまた画像なのか、指定がされていないまま表示しろと命令しても、上手く解釈できず、画像と認識してくれません。
そこで、header('image/gif');
という指定をしてやって、「今から出力する(echoする)ものはGIF画像ですよ」と先に指定(HTTPヘッダとして出力)してやります。
そうするとブラウザは画像と判断して表示します。

と、いうのが、gazou.phpで処理することの概要になります。
    • good
    • 0
この回答へのお礼

ありがとうございます!できました。三つ画像が並んで見えるようになりました。
そういうことだったのですね・・
これをもとに1つづつ数字を読み込んで画像を表示させるのをやりたいです。
ご説明も納得いきました。本当に感謝しています!

お礼日時:2009/06/11 13:41

連投スミマセン


2や3の画像を出すなら
?number= の数字を変更すればOKです
赤・水色・黄色の★画像、ちゃんと見れましたよ
    • good
    • 0
この回答へのお礼

ご親切・丁寧でたすかりました。ここで回答いただいた方は本当に素晴らしいです。

お礼日時:2009/06/11 13:44

ちゃんと動いてますよ?


http://hot-soup.sakura.ne.jp/test/test19_01.php? …
↑これで見てみてください

実際にどういう風に使うのか不明なのですが
リンクさせるなら<a href=ここに↑のようなURL>にするとか
フォームならnumberを入力か選択させるものを作って送るとか

やり方は人それぞれだと思います
前にも書きましたが、こういう方法もありますよっていう一提案なので
これが普通ってことは無いと思います
    • good
    • 0
この回答へのお礼

あ~なるほど・・そうやるのですね?
ど初心者ですみません。

問題はこの数字を文字列のファイルを読み込んで
その文字列の何番目が0だったら非表示、1だったら赤い画像・・・という風にやりたいのです。
if文使うんでしょうけど・・・まとめ方を良く知らない為
長ったらしくなりそうです。まだたどりつきません。

でもここまではよくわかりました。ありがとうございます。

お礼日時:2009/06/10 21:46

#1.2.6です


提示頂いたコードで試してみたところエラーになったので
header('Content-type: image/gif');
imagegif($gazou);
↑この2行をコメントアウト
私が提案した方法では、この2行は入れちゃダメみたいですね

また
if ($number1 == true) {

if ($number == true) { // $numner のあとの 1をとる
としないと、if文が真にならないので、ここも修正箇所です

以上でたぶん表示は出来るようになると思いますー
(サンプルコードで試したら表示出来ました)
    • good
    • 0
この回答へのお礼

大変遅くなりすみません。
直してみたのですが
http://hot-soup.sakura.ne.jp/test/test19_01.php
やはり変わらないようです。

サンプルコードとはどんな環境なのですか?
通常はその方法でやるのがいいのですか?

どうもXHMLの問題なのでしょうか?その辺をさぐってみます。
ありがとうございました。

お礼日時:2009/06/09 11:17

若干記述に間違いがありました。


PHP部分を下記にしたらいかがでしょう。

-----test19.php
<?php

$number1 = true;
$number2 = true;
$number3 = true;
$number4 = false;


if ($number1 == true) {

echo'<img src="gazou.php?n=01" />';

}
if ($number2 == true) {

echo'<img src="gazou.php?n=02" />';

}
if ($number3 == true) {

echo'<img src="gazou.php?n=03" />';

}
if ($number4 == true) {

echo'<img src="gazou.php?n=04" />';

}
?>
    • good
    • 0
この回答へのお礼

大変遅くなりすみません。
おっしゃるとおりやってみましたが

http://hot-soup.sakura.ne.jp/test/test19.php
IEではファイルが三つならんでいますがファイルが壊れた状態。
firefoxは壊れていますとの事です。
XHTMLとの相性がわるいんでしょうか?
色々やってみます。
ありがとうございました。

お礼日時:2009/06/09 11:09

配列の方法での補足です



$number = 2;なら 2が表示
$number = 3;なら 3が表示

実用的に考えると$numberの値は$_REQUEST/$_POST/$_GETの
どれかで受け取ります

HTML側で$numberにあたる数値を入力または選択した上でsubmit

PHP側の処理
$number = $_REQUEST[number];
$gazo = array(
"1" => "01.gif",
"2" => "02.gif"
);

echo'<img src="img/'.$gazo[$number].'" />';

とすると、HTMLで入れた値によって表示される画像が変わります
こういう方法もありますよっていうことで、他の方の教えて下さっている
方法も試してみて扱いやすいもので作ってみて下さいねー
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございます。
考え方がそこまでいかないというのが現状ですが・・
http://hot-soup.sakura.ne.jp/test/test19_01.php
やはり画像が壊れて表示されます。
しかし私のやり方が悪いのかもしれないですが
こんな感じで入れてみました。

<?php
$number = $_REQUEST[number];

// 画像をブラウザに出力します
header('Content-type: image/gif');
imagegif($gazou);




?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<meta http-equiv="content-Type" content="application/xhtml+xml; charset=shift_jis" />
<meta http-equiv="content-style-type" content="text/css" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<title>数字で分岐して画像を表示-numberを変数にするREQUEST</title>
</head>
<body>
<div style="text-align:center;">
<?php
$gazou = array(
"1" => "01.gif",
"2" => "02.gif",
"3" => "03.gif"
);



if ($number1 == true) {

echo'<img src="img/'.$gazou[$number].'" />';

}

?>
</div>
</body>
</html>
何度もすみません。

お礼日時:2009/06/06 15:13

質問のニュアンスが分かりづらかったのですが、こういうことでしょうか。



-----gazou.php-------
<?php
$num = $_GET['n'];
$gazou = imagecreatefromgif("img/{$num}.gif");

// 画像をブラウザに出力します
header('Content-type: image/gif');
imagegif($gazou);

?>

-----mainのHTMLのほう-------
if ($number1 == true) {

echo'<img src="gazou.php?n=1" />';

}
if ($number2 == true) {

echo'<img src="gazou.php?n=2" />';

}
if ($number3 == true) {

echo'<img src="gazou.php?n=3" />';

}
if ($number4 == true) {

echo'<img src="gazou.php?n=4" />';

}

どうでしょう。
    • good
    • 0
この回答へのお礼

またありがとうございます。質問自体も結果があやふやな状態だったので、すみません。(本当はその数字をどうしたいのか・・ですよね?)

画像を変数にするのですね?
昨日その方法を試したところ(コピーしただけですが)
上に記述したところが

http://hot-soup.sakura.ne.jp/test/test19.php

このようになり画像が壊れた状態で表示されるようです。
ソースはこのようにただコピーしただけですが
どこかがちがうのでしょうか?

<?php
$num = $_GET['n'];
$gazou = imagecreatefromgif("img/{$num}.gif");

// 画像をブラウザに出力します
header('Content-type: image/gif');
imagegif($gazou);

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<meta http-equiv="content-Type" content="application/xhtml+xml; charset=shift_jis" />
<meta http-equiv="content-style-type" content="text/css" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<title>数字で分岐して画像を表示-numberを変数にするGET</title>
</head>
<body>
<div style="text-align:center;">
<?php
if ($number1 == true) {

echo'<img src="gazou.php?n=1" />';

}
if ($number2 == true) {

echo'<img src="gazou.php?n=2" />';

}
if ($number3 == true) {

echo'<img src="gazou.php?n=3" />';

}
if ($number4 == true) {

echo'<img src="gazou.php?n=4" />';

}
?>
</div>
</body>
</html>

お礼日時:2009/06/06 14:55

$numberを変数として、


<?
if($number=="0"){
echo '<p>0は非表示です。</p>';
}else{
echo '<img src="img/'.$number.'.gif">';
echo '<p>'.$number.'の画像です。</p>';
}
?>
としてみては?

>画像がうまくいかずIE6では一種類の画像だけ表示されて
>他の新しいブラウザでは文字化けしてる状態です。

ブラウザの問題じゃないかと。
文字化けについてはエンコードの指定を確認してみてください。
    • good
    • 0
この回答へのお礼

ありがとうございました。遅くなりすみません。
すっきりした記述ですね
早速htmlのbody部分に
<?
if($number=="0"){
echo '<p>0は非表示です。</p>';
}else{
echo '<img src="img/'.$number.'.gif">';
echo '<p>'.$number.'の画像です。</p>';
}
?>
を入れてみたら
画像は壊れていましたが、”の画像です。”と表示されました。

そこでhogehogeさんに教えられた様に↓を上の部分に追加したところ
1の画像のみが表示されるだけで’の画像です’はきえてしまっています。
<?php

$gazou = imagecreatefromgif("img/01.gif");

// 画像をブラウザに出力します
header('Content-type: image/gif');
imagegif($gazou);

?>

上の部分の記述が間違っているのでしょうか?

お礼日時:2009/06/04 07:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!