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

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

新規登録して質問してみよう
ただいま回答率
87.20%
さくらのレンタルサーバ

さくらのレンタルサーバとは、格安サーバーで知られるさくらインターネット社の提供する共有レンタルサーバー。Webサイトの構築から簡単なプログラミングまで幅広く利用することができ、プランが多いことも特徴です。

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Ajax

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

解決済

ajaxでレコードを新規追加できなくなった

Nishin
Nishin

総合スコア30

さくらのレンタルサーバ

さくらのレンタルサーバとは、格安サーバーで知られるさくらインターネット社の提供する共有レンタルサーバー。Webサイトの構築から簡単なプログラミングまで幅広く利用することができ、プランが多いことも特徴です。

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Ajax

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

1回答

0評価

0クリップ

434閲覧

投稿2021/12/30 10:49

youtube動画のタイトルやurl等を同画面のモーダルで登録し、テーブルに一覧表示したものから選択すると、テーブル下にビデオフレームが表示されて閲覧できるアプリを作成しています。

現在起こっている問題

 ajaxを使った処理のうち、新規登録処理だけができなくなり、処理実行後に表示されるアラートに「登録に失敗しました」と表示される状態が続いています。

以前は他のCRUD機能と同様に新規登録処理も正しく行われており、登録処理後はテーブルがリロードされて、レコードが追加された状態で表示されるようになっていました。
この新規登録処理に関わるファイルは、次の通りです。

PHP

./db.php <?php $dsn = (私のDBアドレス); $dbname = (私のDB名); $username = (ユーザー名); $password = (パスワード); $connection = new PDO( 'mysql:host='.$dsn.';dbname='.$dbname, $username, $password );

PHP

./youtubeAdmin/index.php <html> <?php include('../db.php'); include('function.php'); ?> <head> <title>My Admin Page</title> <!-- ajaxやbootstrapに必要な部分。省略 --> </head> <body> <input type="hidden" id="theme" value=<?php echo $theme ?>> <div align="center"> <div id="adminLinks"></div> </div> <div class="container box"> <h1 id="title" align="center"></h1> <br> <div class="table-responsive"> <br> <div align="right"> <button type="button" id="add_button" data-toggle="modal" data-target="#userModal" class="btn btn-info btn-lg">新規追加</button> </div> <br> <br> <table id="user_data" class="table table-bordered table-striped"> <!-- テーブルの表示に関わる記述。一覧表示は出来ている為。記述量の関係上、省略 --> </table> </div> </div> <div id="tubeFrame" align="center"></div> <div id="userModal" class="modal fade"> <div class="modal-dialog"> <form method="post" id="user_form" enctype="multipart/form-data"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h4 class="modal-title">新規追加</h4> </div> <div class="modal-body"> <label for=<?php echo $column[1] ?>><?php echo $td[1] ?></label> <input type="text" name=<?php echo $column[1] ?> id=<?php echo $column[1] ?> class="form-control" placeholder=<?php echo $td[1]."を入力" ?>> <br> <table id="tube_genre" class="table table-bordered table-striped"> <thead> <tr><th class="nowrap"><?php echo $td[1]."候補" ?></th></tr> </thead> <tbody> <?php $genre_result = get_statement("SELECT DISTINCT genre FROM $table WHERE LENGTH(genre) > 0"); foreach ($genre_result as $genre_row) { echo "<tr><td><span class='info info_genre'>".$genre_row["genre"]."</span></td></tr>"; } ?> </tbody> </table> <label for=<?php echo $column[2] ?>><?php echo "動画".$td[2] ?></label> <input type="text" name=<?php echo $column[2] ?> id=<?php echo $column[2] ?> class="form-control" placeholder=<?php echo "動画".$td[2]."を入力" ?>> <br> <label for=<?php echo $column[3] ?>><?php echo "動画URL" ?></label> <input type="text" name=<?php echo $column[3] ?> id=<?php echo $column[3] ?> class="form-control" placeholder=<?php echo "動画URLを入力" ?>> <br> <label for=<?php echo $column[4] ?>><?php echo $td[3] ?></label> <input type="text" name=<?php echo $column[4] ?> id=<?php echo $column[4] ?> class="form-control" placeholder=<?php echo $td[3]."を入力" ?>> <br> <table id="tube_channel" class="table table-bordered table-striped"> <thead> <tr><th class="nowrap"><?php echo $td[3]."候補" ?></th></tr> </thead> <tbody> <?php $channel_result = get_statement("SELECT DISTINCT channel FROM $table WHERE LENGTH(channel) > 0"); foreach ($channel_result as $channel_row) { echo "<tr><td><span class='info info_channel'>".$channel_row["channel"]."</span></td></tr>"; } ?> </tbody> </table> <br> <label for=<?php echo $column[5] ?>><?php echo $td[4]."フラグ" ?></label><span> </span> <select name=<?php echo $column[5] ?> id=<?php echo $column[5] ?> class="form-select form-select-sm" aria-label=".form-select-sm"> <option value="1">公開 </option> <option value="0">非公開 </option> </select> <br> </div> <div class="modal-footer"> <input type="hidden" name="user_id" id="user_id"> <input type="hidden" name="operation" id="operation"> <input type="submit" name="action" id="action" class="btn btn-success" value="新規追加"> <button type="button" class="btn btn-default" data-dismiss="modal">閉じる</button> </div> </div> </form> </div> </div> <script type="text/javascript" language="javascript"> function _(query){ return document.querySelector(query) } const theme = _("#theme").value; document.title = theme; _("#title").innerText = theme; $('#add_button').click(function(){ $('#user_form')[0].reset(); $('.modal-title').text("新規追加"); $('#action').val("新規追加"); $('#operation').val("Add"); }); var user_data = $('#user_data').DataTable({ "language": { "url": "http://cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/Japanese.json" }, "processing": true, "serverSide": true, "order": [], "ajax": { url:"fetch.php", type:"POST" }, "columnDefs": [ { "targets": [0], "width": "10%" }, { "targets": [2,3], "width": "30%" }, ] }); create_soloTable("#tube_genre"); create_soloTable("#tube_channel"); function create_soloTable(target){ $(target).DataTable({ "language": { "url": "http://cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/Japanese.json" }, "info": false, "paging:": true, 'pagingType': 'full_numbers', "lengthMenu": [ 5, 10 ], }); } $(document).on('submit', '#user_form', function(event){ event.preventDefault(); var input_1 = document.querySelector('#<?php echo $column[1] ?>').value.trim(); var input_2 = document.querySelector('#<?php echo $column[2] ?>').value.trim(); var input_3 = document.querySelector('#<?php echo $column[3] ?>').value.trim(); var input_4 = document.querySelector('#<?php echo $column[4] ?>').value.trim(); var input_5 = document.querySelector('#<?php echo $column[5] ?>').value.trim(); var match_3 = /^https://www.youtube/.test(input_3); var alert_message = ""; if(input_2.length < 1 || input_3.length < 1){ alert_message += "入力されていない箇所があります。"; } if(alert_message == ""){ if(confirm("レコードを登録しても、よろしいですか?")){ $.ajax({ url:"insert.php", method:'POST', data:new FormData(this), contentType:false, processData:false, success:function(data){ if(data > 0){ alert("登録が完了しました。"); }else{ alert("登録に失敗しました。"); } $('#user_form')[0].reset(); $('#userModal').modal('hide'); user_data.ajax.reload(); } }); } }else{ alert(alert_message); } }); </script> </body> </html>

PHP

./youtubeAdmin/insert.php <?php include('../db.php'); include('function.php'); //session_start(); $column_1 = htmlspecialchars($_POST[$column[1]], ENT_QUOTES, 'UTF-8'); $column_2 = htmlspecialchars($_POST[$column[2]], ENT_QUOTES, 'UTF-8'); $column_3 = htmlspecialchars($_POST[$column[3]], ENT_QUOTES, 'UTF-8'); $column_4 = htmlspecialchars($_POST[$column[4]], ENT_QUOTES, 'UTF-8'); $column_5 = htmlspecialchars($_POST[$column[5]], ENT_QUOTES, 'UTF-8'); if(isset($_POST["operation"])){ if($_POST["operation"] == "Add"){ $statement = $connection->prepare(" INSERT INTO ".$table." (" .$column[1].", ".$column[2].", ".$column[3].", " .$column[4].", ".$column[5].") VALUES (:" .$column[1].", :".$column[2].", :".$column[3].", :" .$column[4].", ".$column[5].")"); $result = $statement->execute( array( ':'.$column[1] => $column_1, ':'.$column[2] => $column_2, ':'.$column[3] => $column_3, ':'.$column[4] => $column_4, ':'.$column[5] => $column_5 ) ); $strlen_err = 0; if(mb_strlen($column_1)>64 || mb_strlen($column_2)>99 || mb_strlen($column_4) > 64){ $strlen_err++; } if(!empty($result) && $strlen_err == 0){ echo 1; }else{ //$_SESSION["result"]["insert"] = $result; echo 0; } }

PHP

./youtubeAdmin/function.php $theme = "『GoogTube』管理ページ"; $td = array("視聴", "グループ", "タイトル", "チャンネル名", "公開"); $table = "youtube"; $column = array("id", "genre", "sight", "url", "channel", "public_flg"); function get_statement($query){ include('../db.php'); $statement = $connection->query($query); return $statement; } function get_total_all_records($target){ include('../db.php'); $countQuery = "SELECT COUNT(id) FROM ".$target." "; $countStatement = $connection->prepare($countQuery); $countStatement->execute(); $countResult = $countStatement->fetch(); return $countResult[0]; }

insert.phpでは、新規登録に成功していた時と同様に、各カラムに対応する入力値には変数$column1~6を使用しております。
最後に画面内での新規登録が成功した事を確認した時から、insert.phpの記述は編集していない筈です。

やってきたこと

$_SESIONを使って、insert.phpでの登録時の情報をindex.phpに引き継いで確認してみました。
(両ファイルでコメントアウトしている$_SESSIONとvar_dumpの記述がその名残)
その結果、セッション内の、新規登録処理の情報は「false」になっているのが確認されたのですが、何故このような結果になってしまったのかが掴めない状態が続いてしまっています。

思い当たること

一度、さくらレンタルサーバーのDBで、このyoutubeテーブルのTRUNCATE処理を行って、すべてのレコード消去後、消去前にテーブルに表示されていたレコードのうち必要なものを、SQLのクエリ入力欄で直接記述しました。
この事が原因で当問題が発生しているのかは、それともコード記述はじめ他に原因があるのか、早急な特定と修正を必要としています。

皆様お忙しいところ恐縮ですが、ご回答ご教示の程、よろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

さくらのレンタルサーバ

さくらのレンタルサーバとは、格安サーバーで知られるさくらインターネット社の提供する共有レンタルサーバー。Webサイトの構築から簡単なプログラミングまで幅広く利用することができ、プランが多いことも特徴です。

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Ajax

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