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

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

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

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

0回答

1728閲覧

自動生成された画像ごとにいいねボタンを実装したい

slimat

総合スコア57

PHP

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

1クリップ

投稿2018/07/20 09:10

編集2019/04/01 01:33

この質問は削除願いを出しました

前提・実現したいこと

投稿機能と検索機能を持ったサイトを作っています。自動生成された画像ごとにいいねボタンの実装を実現したいです。
下記サイトを参考にしています。
リンク内容
↑Ajax を使ってリアルタイムに反映する簡易投票システムを設置する

エラーが出てますが、なぜなのか分かりません。
特に、「オノマトペがserch.phpに届きませんでした」というエラーがここずっと出続けています。
serch.phpにおいて、index2.htmlから送られてきたテキスト処理部分がうまくいっていないと思っています。
下はserch.phpをphpコマンドで実行したものです。エラーは下の方に出ています。

発生しているエラーメッセージ

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <link rel="stylesheet" href="css/style.css"> <meta name="viewport" content="width=device-width, initial-scale=1"> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script> $(function() { allowAjax = true; $('.btn_vote').click(function() { //class名は絶対これ if (allowAjax) { allowAjax = false; $(this).toggleClass('on'); var id = $(this).attr('id'); $(this).hasClass('on') ? Vote(id, 'plus') : Vote(id, 'minus'); //vote関数に送ってる } }); }); function Vote(id, plus) { cls = $('.' + id); cls_num = Number(cls.html()); count = plus == 'minus' ? cls_num - 1 : cls_num + 1; $.post('vote.php', {'file': id, 'count': count}, function(data) { //postでvote.phpにたぶん送っている if (data == 'success') cls.html(count); setTimeout(function() { allowAjax = true; }, 1000); }); } </script> </head> <body> <article> PHP Notice: Undefined variable: enterOnomatope in /home/sys/s216045/public_html/md_syn/serch.php on line 62 PHP Stack trace: PHP 1. {main}() /home/sys/s216045/public_html/md_syn/serch.php:0 を受け取りました <p>オノマトペがserch.phpに届きませんでした</p> </article> <a href="index2.html">return to index2.html</a> </body> </html>

該当のソースコード

index2.htmlのformタグの部分

html

1 2 3<form action="serch.php" method="post" type="text"> 4 <input type="text" name="onomatopeSerch" placeholder="オノマトペを入力"> 5 <input type="submit" name="serch" value="検索"> 6</form>

serch.phpの中身

php

1 2 3<?php 4// 元々はindex.phpにあったコードをこちらに埋め込んでいることに注意! 5// カウント数取得関数 6if (isset($_POST["onomatopeSerch"])) { 7 $enterOnomatope = $_POST["onomatopeSerch"]; //変数にそのオノマトペを代入 8} 9function get_count($file) { //sectionタグからファイル名(拡張子なし)を引数にして送られてくる 10 // $res = $_POST["onomatopeSerch"]; 11 global $enterOnomatope; 12 mkdir("data/$enterOnomatope"); //オノマトペごとのdatファイル格納フォルダ作成 13 $filename = "data/$enterOnomatope/".$file.'.dat'; //カウント数が記入されているファイルのパスを代入 14 $fp = @fopen($filename, 'r'); //そのファイルを開く作業を変数に代入? 15 if ($fp) { 16 $vote = fgets($fp, 9182); //変数に前回までに押された回数を代入 17 } else { 18 touch("$filename"); 19 $vote = 0; //php部分で送られたファイル名のファイルがなかったら投票数は0 20 } 21 return $vote; 22} 23?> 24<!DOCTYPE html> 25<html lang="ja"> 26<head> 27 <meta charset="utf-8"> 28 <link rel="stylesheet" href="css/style.css"> 29 <meta name="viewport" content="width=device-width, initial-scale=1"> 30 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 31 <script> 32 $(function() { 33 allowAjax = true; 34 $('.btn_vote').click(function() { //class名は絶対これ 35 if (allowAjax) { 36 allowAjax = false; 37 $(this).toggleClass('on'); 38 var id = $(this).attr('id'); 39 $(this).hasClass('on') ? Vote(id, 'plus') : Vote(id, 'minus'); //vote関数に送ってる 40 } 41 }); 42 }); 43 function Vote(id, plus) { 44 cls = $('.' + id); 45 cls_num = Number(cls.html()); 46 count = plus == 'minus' ? cls_num - 1 : cls_num + 1; 47 $.post('vote.php', {'file': id, 'count': count}, function(data) { //postでvote.phpにたぶん送っている 48 if (data == 'success') cls.html(count); 49 setTimeout(function() { 50 allowAjax = true; 51 }, 1000); 52 }); 53 } 54</script> 55</head> 56<body> 57 <article> 58 <?php 59 // if (isset($_POST["onomatopeSerch"])) { 60 // $enterOnomatope = $_POST["onomatopeSerch"]; //変数にそのオノマトペを代入 61 // } 62 // global $enterOnomatope; 63 $aa = "を受け取りました"; 64 echo $enterOnomatope."$aa\n"; 65 if (isset($enterOnomatope)) { //オノマトペが届いてたら 66 $dir_s = "onomatopes/$enterOnomatope/"; //そのオノマトペのタイトルのフォルダの中身を示すパスを代入 67 $filelist = scandir($dir_s); //上記のフォルダの中身を代入、scandirでファイル名(ファイルのパスかも)を取得できる 68 $count = count($filelist); //そのフォルダに含まれるファイルの数を代入 69 $a = 0; 70 for ($j = 0; $j < $count; $j++) { //jpgファイルの数を知りたい 71 $file = pathinfo($filelist[$j]); //指定したフォルダに含まれるj番目のファイルの情報を代入 72 $file_ext = $file["extension"]; //そのファイルの拡張子を代入 73 if ($file_ext == "jpg") { 74 $a = $a + 1; //拡張子が"jpg"だったら1を足す 75 } else { 76 $a = $a; //そのまま 77 } 78 } 79 echo "<p>拡張子がjpgのファイル数 == $a</p>"; 80 81 if (file_exists("onomatopes/$enterOnomatope")) { //入力されたオノマトペをフォルダ名にしてるフォルダがあれば && !(is_dir($file_path)) 82 83 for($i = 0; $i<$count; $i++) { //対象フォルダにあるファイルの数だけループ 84 $file = pathinfo($filelist[$i]); //指定したフォルダに含まれるi番目のファイルの情報を代入、こっちの方にも$filelistもってきたほうがいいのか 85 // $file_name=$file["basename"]; 86 $file_extension = $file["extension"]; //そのファイルの拡張子を代入 87 $file_path = "onomatopes/$enterOnomatope/$filelist[$i]"; //i番目のファイルのパスを代入 88 if ($file_extension == "jpg") { //拡張子がjpgだったら 89 echo "<section>"; 90 echo "<p><img src=\"$file_path\" width=\"300px\"></p>"; //i番目のファイルがjpgファイルだったら表示 91 echo "<div class=\"btn_area\">"; 92 echo "<h2>$enterOnomatope</h2>"; 93 echo "<p class=\"ico_heart count_".$i."\">"; //get_countに「いいね」の数が記入されているファイル名(拡張子抜き)を送信 94 95 get_count("count_$i"); //semi coronn 96 echo "</p>"; 97 echo "<p class=\"btn_vote\" id=\"count_$i\"></p>"; //JavaScript部分にidを送ってる? idはファイル名にも使用される 98 echo "</div>"; 99 echo "</section>"; 100 } else { //拡張子がjpgじゃなかったら 101 102 } 103 } //for分の終わり 104 105 } else { //該当する画像はありません 106 echo "<p>sorry,couldn't find you asked(there is no such directory. 107 so let's upload image with onomatope you entered!!)</p>\n"; 108 } 109 110 } else { 111 echo "<p>オノマトペがserch.phpに届きませんでした</p>\n"; 112 } 113 ?> 114 </article> 115 <a href="index2.html">return to index2.html</a> 116</body> 117</html>

vote.phpの中身

php

1 2 3<?php 4// カウントアップ処理 5include 'serch.php'; 6$namefile = $_POST['file']; //serch.phpのjavascriptの部分から送られてきた、入るのはsectionタグのid 7$muchcount = $_POST['count']; //たぶんユーザの処理後の「いいね」の数が入っている 8$check = $_SERVER['HTTP_X_REQUESTED_WITH']; 9 10if ($namefile && $muchcount && $check && strtolower($check) == 'xmlhttprequest') { 11 $filenamae = "data/$enterOnomatope/".$namefile.'.dat'; 12 $fp = @fopen($filenamae, 'w'); 13 flock($fp, LOCK_EX); 14 fputs($fp, $count); 15 flock($fp, LOCK_UN); 16 fclose($fp); 17 echo 'success'; 18} 19

一応画像アップロードの方のコードも...

upload.phpののコードです

php

1 2 3<meta charset="utf-8"> 4<h1>アルバム作成:画像アップロード</h1> 5<form action="upload_confirm.php" method="post" enctype="multipart/form-data"> 6<input type="file" name="upfile"> 7<input type="text" name="ono" placeholder="オノマトペを入力"> 8<input type="submit" value="読み込み" name="yomikomi"> 9</form> 10<p>オノマトペは半角英数字で入力してください</p> 11<a href="index2.html">戻る</a>

upload_confirm.phpのコードです

php

1 2 3<?php 4$msg = null; 5if(isset($_FILES['upfile']) && is_uploaded_file($_FILES['upfile']['tmp_name'])){ 6 7 // $new_name = date("YmdHis"); 8 // auto make file 9 $text = $_POST['ono']; //入力されたオノマトペを$textに代入 10 if (file_exists("onomatopes/$text")) { 11 echo "file existed"; 12 } else { 13 mkdir("onomatopes/$text"); 14 } 15 if (file_exists("onomatopes/$text")) { 16 echo "mkdir.$text.success"; 17 } 18 $a = "onomatopes/".$text."/".basename($_FILES['upfile']['name']); //$aに入力された画像の移動先のパスを代入 uncertain 19 20 if(move_uploaded_file($_FILES['upfile']['tmp_name'], $a)){ 21 $msg = $a. 'のアップロードに成功しました'; 22 }else { 23 $msg = 'アップロードに失敗しました'; 24 } 25 echo "<p>".$text."</p>"; 26 27} else { 28 echo "ohh fatal!\n"; 29} 30?> 31<?php 32if(isset($_FILES['upfile'])){ 33 $p = basename($_FILES['upfile']['name']); 34 $file_name = "onomatopes/$text/".$p; 35 echo '<img src="'; 36 echo $file_name; 37 echo '" width="300px">'; 38} 39?> 40<?php 41if(isset($msg) && $msg == true){ 42 echo '<p>'. $msg . '</p>'; 43} 44?> 45<meta charset="utf-8"> 46<a href="upload.php">upload.php</a>

補足情報

phpのバージョンは5.5.30です。

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

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

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

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

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

m.ts10806

2018/07/20 21:24

「 発生しているエラーメッセージ」の前半がコードそのものですががどのような意図でこちらを提示されたのでしょうか。
slimat

2018/07/21 06:57

teratermでphpコマンドでserch.phpを実行した時のものを全て載せました。
m.ts10806

2018/07/21 06:59

ではそのように注記しておいてください。「エラーメッセージはこちらです」と紹介されたのがいきなりhtmlから始まっていては回答者が必要な情報に辿り着けません。
slimat

2018/07/21 08:58

了解しました。
m.ts10806

2018/07/21 09:12

そしてこのままでは見づらいのでエラーメッセージも同じくコードブロックにしてください。
slimat

2018/07/21 09:15

了解しました。ご指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問