• 締切済み

PHPで画像を表示するプログラムについて

実行するとランダムで取得した値を利用して、3パターンくらいの画像を切り替えて表示するPHPファイル を作成したいです! 以下のように書いてみたのですが、如何せん初心者なものでできない原因すらわかりません! 間違っているところを是非指摘していただきたいです。 宜しくお願い致します <?php $rand = rand(1,10); switch($rand){ case 1: echo("1"); break; case 2: echo("2"); break; case 3: echo("3"); break; case 4: echo("4"); break; case 5: echo("5"); break; case 6: echo("6"); break; case 7: echo("7"); break; case 8: echo("8"); break; case 9: echo("9"); break; case 10: echo("10"); break; if ($rand <= 3){ echo"<img src='a.jpg'>"; } elseif ($rand 4< || $rand >6 ) { echo"<img src='b.jpg'>"; elseif ($rand 7< || $rand >10 ) { echo"<img src='c.jpg'>"; } } ?>

  • PHP
  • 回答数4
  • ありがとう数3

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

見た感じ、1~10の数値をifで場合分けするロジックの演習ですよね 演算子の書き方もおかしいし、論理式の考え方も変 さらに文法エラーもあるので、もうすこし教科書をよくよんで 気をつけて書いた方がいいでしょう $randが3以下、4以上6以下、7以上10以下の場合分けであれば if ($rand <= 3){ echo"<img src='a.jpg'>"; }elseif ($rand <=6 ) { echo"<img src='b.jpg'>"; }else { echo"<img src='c.jpg'>"; } ifは前から評価されますから最初に3以下をチェックしているので つぎにelseifを使うのであれば$randはすでに4以上は確定しています 同様に次のifで6以下をチェックしているのであれば 最後のelseは7以上が確定しています 無駄だと理解したうえでどうしてもかきたいなら if ($rand >= 1 and $rand <= 3){ echo"<img src='a.jpg'>"; }elseif ($rand >=4 and $rand <=6 ) { echo"<img src='b.jpg'>"; }elseif ($rand >=7 and $rand <=10 ) { echo"<img src='c.jpg'>"; }

ko2imple
質問者

お礼

有難うございます!!

noname#244856
noname#244856
回答No.3

小学校でよくあった「習った漢字しか使っちゃダメ」みたいな縛りプレイは大嫌いなのですが、まぁ一応回答はしておきますね…既存のコードを修正する方針でいきます。 1. randの代わりにより動作が高速なmt_randを使いましょう。また、範囲は0~2(または1~3)を指定しましょう。3つしか要素が無いなら0,1,2(1,2,3)の中から選ばせれば等しい確率になりますよね?最初に書いたコードでは全体が「100%」のイメージで分母を10にしたんだと思いますが、分母は10である必要はありません。選択肢が3通りなので3にするのが正解です。 PHP Manual - mt_rand http://www.php.net/manual/ja/function.mt-rand.php 2. 確認用だとは思いますが、switchブロックは無意味なので全部消してください。 3. あとはif文で if ($rand == 0) { } elseif ($rand == 1) { } else { } のように分岐させるだけですよね。 また、今後のためのアドバイスとして…PHPではせっかく2つの対応関係を並べられる「配列」が非常に便利なので積極的に利用しましょう。if文やswich文で分岐させるよりはあらかじめ定義しておいた配列のパターンを選択する方がコードは美しく書けます。

ko2imple
質問者

お礼

有難うございます!!(^^)

noname#244856
noname#244856
回答No.2

1行で書くなら <?php printf('<img src="%s.jpg">', array_rand(array_flip(range('a', 'c'))));

ko2imple
質問者

補足

if文で書けという指示なんですT_T! 教えてください!

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

まず、 $rand 4< $rand 7< などという比較の書き方は PHP にはありません。 次に、 a || b は「a か b のどちらかが成り立つか」という意味で、「a と b の両方とも成り立つか」という意味ではありません。 最後に、elseif は「括弧内が成り立たないならば」という意味ではなく「それ以前の if/else の条件が成り立たず、かつ、括弧内が成り立つならば」という意味です。 おまけで、上記をすべてなおしたとしてもたぶん 1/10 の確率で画像が出ないか、あるいは、他の画像よりも表示されやすい画像が出てくるでしょう。rand の引数を再検討しましょう。

ko2imple
質問者

お礼

どうもありがとうございます!!!!

関連するQ&A

  • 画像出力で困ってます!

    CSVデータから、 01,02,03という部分を抜き出して、 010203.jpgという変数にしたいのですが、 $csvData[0][0] = $a; $csvData[0][1] = $b; $csvData[0][2] = $c; として、 $img = "$a" . "$b" . "$c" . ".jpg";//CSVから取った値 //$img = "010203.jpg"; //***2 if (img != "") { header("Content-type: image/jpeg"); readfile("img/$img"); break; } echo <<<EOM <img src="{$myself}?act=put"> EOM; としても、 画像が出力されません。 ちなみに、//***2の先頭の//を取ってやると、 画像が出力されます。 //CSVから取った値 の部分をechoすると、 直接変数にした//***2の値と全く同じ形で表示されます。 なぜ、CSVから拾った値では画像表示されないのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 連続でランダムに画像を表示させたい

    フェードで画像が切り替わるjQueryを使って画像を表示させています。 出てくる順番をランダムにしたいと思い、phpを記述しましたが、1枚目だけしか表示してくれません。 デモサイトがこちらです。 http://ijs.uh-oh.jp/demo/ ちなみにphpは、以下のように記述しました。 <figure id="fadein">  <?php $image=array( "image/photo01.jpg", "image/photo02.jpg", "image/photo03.jpg", "image/photo04.jpg", "image/photo05.jpg", ); $image = $image[rand(0, count($image)-1)]; echo '<img src=" '.$image.' " alt="">'; ?> </figure> 1枚だけでなく、ランダムで連続して表示させる方法をご教授ください。 phpは超初心者で自分なりに調べてみましたが、ギブアップしました(>_<)

    • ベストアンサー
    • PHP
  • PHPについて質問です。(switch文)

    PHPについて質問です。(switch文) 前のフォームのテキストフィールドから受け取った"fn"の値を使ってswhitch文で判定したいです。 <?php $a = $_POST['fn']; switch( $a ){ //←ここが予期せぬエラーとでました。 case 1: echo '$aは1です。'; break; case 2: echo '$aは2です。'; break; case 3: echo '$aは3です。'; break; default: echo '$aは1・2・3のいずれでもありません。'; } ?> どこらへんがいけないのですか?

    • ベストアンサー
    • PHP
  • クリックされた画像URLの照合

    PHPもSQLも超初心者です。 クリックされた画像URLとSQL内に格納されているURLを照合することは可能ですか? <?php require(); $image = array( "img/img1.jpg", "img/img2.jpg", "img/img3.jpg", "img/img4.jpg", "img/img5.jpg", "img/img6.jpg", ); $image = $image[rand(0, count($image)-1)]; echo '<a href=""><img src="'.$image.'" alt=""></a>'; ?> 今このような形で画像をランダムで表示させるところまではできたんですが この画像URLとSQLに格納されている画像URLを照合させることはできますか? もしできるのならば、サンプルを教えていただいてもよろしいですか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • php修正について

    phpで下記のように書いていますが $value = $row_DetailRS1['shop']; switch ($value) { case "01": echo "愛宕店"; break; case "02": echo "伊形店"; break; case "03": echo "出北店"; break; case "04": echo "惣領店"; break; case "05": echo "東郷店"; break; case "06": echo "東出北店"; break; case "07": echo "無鹿店"; break; case "08": echo "柳沢店"; break; default: echo "未設定"; break; } "09"で"細島店"を追加したいのですがどこを追加修正すれば良いでしょうか? 教えてください。

    • ベストアンサー
    • PHP
  • phpで数字の値を画像で表示したいのですが

    お世話になります。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-transitional.dtd"> <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>

    • ベストアンサー
    • PHP
  • PHPでの値の受け渡し方法を教えてください!

    PHP新参者です。 現在、PHPでRPG風の簡易戦闘システムを作成しているのですが、永久ループに陥ってしまい、悩んでいます。 条件として、自分も敵も1体ずつ、HPはお互いに1000、相手の行動パターンは現在2パターン(攻撃or必殺)、自分の行動パターンは攻撃、特技、道具、逃げる(今はまだ攻撃と逃げるの2パターンしか作成していません。)となっています。 一応、仕様としては 名前の入力ページで主人公と敵の名前を設定、その後、コマンドを選択して自分→相手→自分のターン形式で行動していく、というシステムになっており、主人公が逃げる、もしくはどちらかのHPが0になった時点で終了し、タイトルに戻る、という予定です。(タイトルに戻る処理などはまだ未記入です) 名前の変数については、更新時も受け渡すことはできたのですが、記述ミスのせいで、HPの変数の受け渡しやターン毎の行動がリセットされてしまう(ボタンを押す度に前のターンの行動履歴が消滅してしまう)問題といった問題点が残っている状態です。 正直、どこを直せば正確に動作するのか、1週間ほど悩んでいます。 御教授をお願いします。質問下手ですみません。 <?php $command = 0; $myna = trim($_GET[ 'myna' ]); $enena = trim($_GET[ 'enena' ]); echo"<form method = \"GET\" action = \"dice.php\" name =\"form1\">"; if(isset($_POST["sub1"])){ $kbn = htmlspecialchars($_POST["sub1"],ENT_QUOTES,"UTF-8"); switch($kbn){ case "攻撃": $command=1; $enena=trim($_GET['enena']); $myna=trim($_GET['myna']); $myHP=trim($_GET['myHP']); $eneHP=trim($_GET['eneHP']); $turn=trim($_GET['turn']); break; case "特技": $command=2;$enena=trim($_GET['enena']); $myna=trim($_GET['myna']); $myHP=trim($_GET['myHP']); $eneHP=trim($_GET['eneHP']); $turn=trim($_GET['turn']); break; case "道具": $command=3;$enena=trim($_GET['enena']); $myna=trim($_GET['myna']); $myHP=trim($_GET['myHP']); $eneHP=trim($_GET['eneHP']); $turn=trim($_GET['turn']); break; case "逃げる": $command = 4; $enena=trim($_GET['enena']); $myna=trim($_GET['myna']); $myHP=trim($_GET['myHP']); $eneHP=trim($_GET['eneHP']); $turn=trim($_GET['turn']); break; default: echo"エラー"; exit; } } echo"</form>"; echo"<form method=\"POST\" action=\"\">"; echo "<input type=\"submit\" value=\"攻撃\" name=\"sub1\"/>"; echo "<input type=\"submit\" value=\"特技\" name=\"sub1\"/>"; echo "<input type=\"submit\" value=\"道具\" name=\"sub1\"/>"; echo "<input type=\"submit\" value=\"逃げる\" name=\"sub1\"/>"; echo "</form>"; echo "<br />"; echo "<br />"; $myHP = 1000; $turn = 1; echo "第"; echo"$turn"; echo"ターン"; echo "<br />"; echo "<br />"; for($eneHP=1000;$command!=0;$turn++){ if($command == 1){ $puttern = rand(1, 4); $dice1 = rand(1, 100); $dice2 = rand(1, 100); $dice3 = rand(1, 100); $kaishin = rand(1, 4); $damage = ($dice1 + $dice2 + $dice3)/3; if($kaishin == 4) $damage = $damage + 100; $eneHP = $eneHP-floor($damage); echo "$myna の攻撃!"; if($kaishin == 4) echo"会心の一撃!"; echo "<br />"; echo floor($damage); echo"のダメージを与えた!"; } if($command == 4){ echo "$myna は逃げた!"; break; break; break; break; } echo"<br />"; if($eneHP <= 0){ echo"$enena を倒した!"; break; break; }else echo"$enena HP $eneHP/1000"; echo"<br />"; echo"<br />"; if($puttern == 1 | $puttern == 2 | $puttern == 3){ $dice1 = rand(1, 100); $dice2 = rand(1, 100); $dice3 = rand(1, 100); $kaishin = rand(1, 4); $gotdamage = ($dice1 + $dice2 + $dice3)/3; if($kaishin == 4) $gotdamage = $gotdamage + 100; $myHP = $myHP-floor($gotdamage); echo "$enena の攻撃!"; if($kaishin == 4) echo"痛恨の一撃!"; echo"<br />"; echo floor($gotdamage); echo"のダメージを受けた!"; }else if($puttern == 4){ $gotdamage = $myHP/2; $myHP = $myHP-floor($gotdamage); echo "$enena の必殺技!"; echo "<br />"; echo "$myna の体力は半分まで削られた!"; } echo"<br />"; if($myHP <= 0){ echo"$myna は死んでしまった…!"; break; break; }else{ echo"$myna HP $myHP/1000"; } $command = 0; } echo"<br />"; echo"<br />"; ?>

    • 締切済み
    • PHP
  • ロールオーバーで画像を先読みする方法

    スワップイメージをJavascriptで製作しました。 どうしても 先読みした画像を 指定する方法がわかりません。 このやり方ではできないのでしょうか? お教えください よろしくお願いします。 以下作成したコードになります。 function preload() { var images1 = new Image(); var images2 = new Image(); var images3 = new Image(); images1.src = "ike1.jpg"; images2.src = "ike2.jpg"; images3.src = "ike3.jpg"; } function over(num){ var a=document.getElementById("img1"); var b=document.getElementById("title1"); var c=document.getElementById("teima1"); switch(num){ case 1: a.innerHTML = "<img src='ike1.jpg'>"; b.innerHTML = "ああああ"; c.innerHTML = "ああああ"; break; switch(num){ case 2: a.innerHTML = "<img src='ike2.jpg'>"; b.innerHTML = "ああああ"; c.innerHTML = "ああああ"; break; switch(num){ case 3: a.innerHTML = "<img src='ike3.jpg'>"; b.innerHTML = "ああああ"; c.innerHTML = "ああああ"; break; } }

  • phpのプログラム内容について

    <?php if($newmark) { ?><img src="/images/new.png"><?php } ?> 私が読んでいるプログラミングの本でphpに関するプログラムの部分でこういったものがありました。 $newmarkという変数に値があればnew.pngという画像を表示するというものらしいのですが { ?><img src="/images/new.png"><?php }の部分の記述は間違っていないのでしょうか? <?php ?>という文字が入れ子になっていてよくわかりません。 もし、わたしに説明できる方がいらしたら説明していただけないでしょうか?宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • アップロードした画像を表示するには

    アップロードした画像を表示したいと考えてます。アップロードは非同期 なので、アップロードを実行するchild.phpで画像表示の処理もして、アッ プロードの命令を出すparent.phpに画像の表示を行います。 ---- child.php(一部) ---- move_uploaded_file($_FILES["upload_file"]["tmp_name"], $image_name); echo '<img src="' . $image_name . '" width="100" height="100">'; これで成功します。ただ画像を常に同じ場所に表示したくechoの部分を以下 のように書き換えると失敗します。 echo '<script>'; echo 'document.getElementById("pict").src="' . $image_name . '.jpg";'; echo '</script>'; ---- parent.php(一部) ---- <img src="" id="pict"> クロームのDevToolsで調べるとElementsでは以下のようにsrcに何もなく失敗してます。 <img src id="pict"> ところがSourcesでは「Cannot set property 'src' of null」とエラーが出ているのに 以下のようにsrcには画像名は入ってます。 <script>document.getElementById("pict").src="./image1/bfbiD.jpg";</script> なお同名の画像はきちんとアップロードしてます。対策があれば教えてもら えないでしょうか。

    • ベストアンサー
    • CSS

専門家に質問してみよう