お手上げなので質問させていただきました。boketeという画像で大喜利をするサイトをphpの勉強がてらマネして作っています。
それで、下のようなコード3個を書きました。theme.phpで画像ファイルをアップロードさせて、画像をクリックするとclicktheme.phpにとんで、大喜利を入力して送信すると画像と入力した文字がセットでwarawara.phpに表示(新着一覧)されるようにしたいです。
上二つのコードは正常に動きましたが、三個目のコードの配列の処理がうまくいきません。for文で繰り返しているはずが、繰り返されません。おそらく配列に追加されてないのではないかと思いますが、理由もわかりません。
どなたか解決方法をご教授いただけましたら幸いです。
php
1//theme.php 2//-----------------------ここから下の点線までファイルアップロードの処理です-------------------------------- 3 <?php 4 $msg=null; 5 6 if(isset($_FILES["image"])&& is_uploaded_file 7 ($_FILES["image"]["tmp_name"])){ 8 $old_name=$_FILES["image"]["tmp_name"]; 9 $new_name=date("YmdHis"); 10 $new_name .=mt_rand(); 11 switch (exif_imagetype($_FILES["image"]["tmp_name"])) { 12 case IMAGETYPE_JPEG: 13 $new_name .='.jpg'; 14 break; 15 case IMAGETYPE_GIF: 16 $new_name .='.gif'; 17 break; 18 case IMAGETYPE_PNG: 19 $new_name .='.png'; 20 break; 21 default: 22 header('Location: theme.php'); 23 exit(); 24 } 25 if(move_uploaded_file($old_name,'album/' . "$new_name")){ 26 $msg="アップロードしました"; 27 } 28 else{ 29 $msg="アップロードできませんでした"; 30 } 31 } 32 ?> 33 <?php 34 static $images = array(); 35 36 if($handle=opendir('./album')){ 37 while ($entry=readdir($handle)){ 38 if($entry != "." && $entry != ".."){ 39 $images[]=$entry; 40 } 41 } 42 closedir($handle); 43 } 44 ?> 45//------------------------------------------------------------------------------ 46 <form action="theme.php" method="post" enctype="multipart/form-data"> 47 <input type="file" name="image" accept="image/*"> 48 <input type="submit" value="アップロード"> 49 </form> 50 51 <?php 52 if($msg){ 53 echo "<p>" . $msg . "</p>"; 54 } 55 //アップされたファイルをrsortで新しい順にします。 56 rsort($images); 57 if(count($images)>0){ 58 foreach($images as $id=>$img ){ 59 echo '<a href="/clicktheme.php?id=' . $id . '"><img class="themeimg" src="./album/' . $img .'"></a>'; 60 } 61 }else{ 62 echo "<p>画像はまだありません</p>"; 63 } 64 ?>
php
1//clicktheme.php 2 <?php 3//theme.phpの関数を使えるようにします。 4 ob_start(); 5include "theme.php"; 6ob_end_clean(); 7//クリックした画像のキーを取得して配列の番号として[]に入れて、画像のurlを取得して、画像を表示させます。 8 $array_number = $_GET['id']; 9$img_url = $images[$array_number]; 10echo '<img width="650px" src="./album/' . $img_url .'"><br>'; 11 ?> 12 13 <form action="/warawara.php" method="get" enctype="multipart/form-data"> 14<!--$img_urlをwarawara.phpへ送ります--> 15 <input type="hidden" name="id" value="<?= $array_number ?>"> 16<textarea name="boke" maxlength="80" placeholder="ボケを入力してください。" rows="10" cols="80" style="border-top:1px solid red"></textarea><br> 17<input type="submit" value="ボケる" class="submit"> 18 </form>
php
1//warawara.php 2<?php 3//clicktheme.phpとtheme.phpの関数を使えるようにします 4ob_start(); 5 include "clicktheme.php"; 6 include "theme.php"; 7ob_end_clean(); 8//配列を用意し、画像のurlをその配列に追加していきます 9 $img_url=$images[$array_number]; 10 $img_urlandboke=array(); 11 $img_urlandboke[]=$img_url; 12//配列を用意し、ユーザーが打ち込んだ文字をゲットで取得し、その配列に追加していきます。 13 $bokearray=array(); 14 $boke=$_GET["boke"]; 15 $bokearray[]=$boke; 16 17echo '<div class="themeandboke">'; 18//問題の部分です。 19//配列を新しい順で表示したいので、配列の中の値の個数→0になるようにfor文で画像と文字を繰り返し表示させます。 20for($i=count($img_urlandboke)-1;$i>=0;$i--){ 21 $afterboke=$img_urlandboke[$i]; 22 echo '<img width="250px" src="./album/' . $afterboke .'"><br>'; 23 echo $bokearray[$i]; 24 echo '<a href="#.php?id='.$i.'"></a>'; 25}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/12 12:13
2017/10/12 12:15
2017/10/12 12:25
2017/10/12 13:45