解決済み追記
みなさま回答ありがとうございました!!
.ajax内のurl指定が間違えていました。
フォルダ構成も同じでやっていたので合っているものと思い込んでいました。
たくさんのアドバイスありがとうございました!!
m(_ _)m
現状
フォーム画面に3つ入力欄があり、そこに入力したテキストがデータベースへ登録され、削除、編集ができるプログラムのテストをしています。
index.phpファイル
php
1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="UTF-8"> 5 <title>サンプルテンプレート</title> 6 <meta name="description" content="サンプルテンプレート"> 7 <meta name="keywords" content="レストラン,フレンチ,原宿"> 8 <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"> 9 <link href="css/reset.css" rel="stylesheet" type="text/css"> 10 <script type="text/javascript" src="js/jquery.js"></script> 11</head> 12<body> 13 14 15<?php 16 require_once "functions/db.php"; 17 18 //URLパラメータを取得します。 19 //URLの後ろに?edit=123のような感じでつくのがURLパラメータです。 20 $editId = $_GET["edit"]; 21 //このパラメータをphpで取得することができます。 22 //urlを通じて編集するデータのidを受け取ります。 23 24 //受け取ったidに一致するデータをデータベースから呼び出して、、、 25 $userdataEdit = "select * from userdata where id = '".$editId."' order by id DESC"; 26 $userdataEdit = mysqli_query($mysqli,$userdataEdit); 27 28 //もしデータが存在していたら、変数に格納します。 29 while ($userdataEditArray = mysqli_fetch_assoc($userdataEdit)) { 30 $name = $userdataEditArray["name"]; 31 $age = $userdataEditArray["age"]; 32 $skill = $userdataEditArray["skill"]; 33 }; 34 35 //データの数を数えます。 36 //もしデータが存在していれば1になります。 37 //この変数は後で使います。 38 $userCount = $userdataEdit->num_rows; 39 40 //もし、フォームから投稿された(POSTされた)場合、、 41 if ($_SERVER['REQUEST_METHOD'] === 'POST') { 42 43 //投稿されたデータを受け取ります。 44 $name = htmlspecialchars($_POST['name'], ENT_QUOTES); 45 $age = htmlspecialchars($_POST['age'], ENT_QUOTES); 46 $skill = htmlspecialchars($_POST['skill'], ENT_QUOTES); 47 48 //ここで、データの数をカウントした$userCountを使います。 49 //もしデータがデータベースの中に存在したら(数が0じゃなければ)、、、 50 if($userCount !== 0){ 51 //$editIdに一致したデータに上書きします。 52 $result = mysqli_query($mysqli,"update userdata set name = '".$name."',age = '".$age."',skill = '".$skill."' where id = '".$editId."'"); 53 }elseif (!empty($name)||!empty($age)||!empty($skill)){ 54 //もしデータが0だったら新規で追加します。 55 $result = mysqli_query($mysqli,"insert into userdata(name,age,skill) VALUES('$name','$age','$skill')"); 56 }; 57 58 }; 59 60?> 61 62<!--パラメータをつけたURLだと編集画面になるため、パラメータ無しのURLがそのまま新規追加--> 63<div style="padding-bottom:15px;"> 64 <a href="http://サーバー名/index.php/">新規追加</a> 65</div> 66 67<h1>登録フォーム</h1> 68<form method="post" action=""> 69 <!--$editIdがURLパラメータから取得された場合、該当のデータを予めvalueに入れておきます。--> 70 <input type="text" name="name" placeholder="お名前" value="<?php echo $name; ?>" /><br/> 71 <input type="text" name="age" placeholder="年齢" value="<?php echo $age; ?>" /><br/> 72 <input type="text" name="skill" placeholder="スキル" value="<?php echo $skill; ?>" /><br/> 73 <?php if($userCount == 0): ?> 74 <!--もしidに該当するデータが1つもなければ登録ボタン--> 75 <input type="submit" name="submitBtn" value="登録" /> 76 <?php else: ?> 77 <!--もしidに該当するデータが存在していれば更新ボタン--> 78 <input type="submit" name="submitBtn" value="更新" /> 79 <?php endif; ?> 80</form> 81 82 83<?php 84 85 $userdata = "select * from userdata order by id DESC"; 86 $userdata = mysqli_query($mysqli,$userdata); 87 88 while ($userdataArray = mysqli_fetch_assoc($userdata)) { 89 echo $id = $userdataArray["id"]; 90 echo ","; 91 echo $name = $userdataArray["name"]; 92 echo ","; 93 echo $age = $userdataArray["age"]; 94 echo ","; 95 echo $skill = $userdataArray["skill"]; 96 echo "|"; 97 echo "<button class='deleteBtn' data-id='".$id."'>削除する</button>"; 98 echo "|"; 99 echo "<button class='editBtn' data-id='".$id."'>編集する</button>"; 100 echo "<br>"; 101 }; 102 103?> 104 105 106<script> 107 108 $(".deleteBtn").click(function(){ 109 var btnid = $(this).data("id"); 110 deleteData(btnid); 111 }); 112 113 $(".editBtn").click(function(){ 114 var btnid = $(this).data("id"); 115 window.location.href = "./?edit="+btnid; 116 117 }); 118 119 function deleteData(btnid){ 120 $.ajax({ 121 type: 'POST', 122 dataType:'json', 123 url:'functions/delete_func.php', 124 data:{ 125 btnid:btnid, 126 }, 127 success:function(data) { 128 window.location.href = "./"; 129 }, 130 error:function(XMLHttpRequest, textStatus, errorThrown) { 131 alert(errorThrown); 132 } 133 }); 134 }; 135 136</script> 137 138</body> 139</html>
db.phpファイル
php
1<?php 2 $mysqli = new mysqli("サーバー名", "ユーザー名", "パスワード", "データベース名"); 3 if ($mysqli->connect_errno) { 4 printf("接続失敗: %s\n", $mysqli->connect_error); 5 exit(); 6 } 7?>
delete_func.phpファイル
php
1<?php 2 3 require_once "db.php"; 4 5 $jsondata = $_POST['btnid']; 6 $resultcontents = mysqli_query($mysqli,"delete from userdata where id = '".$jsondata."'"); 7 header('Content-type: application/json'); 8 echo json_encode( $jsondata ); 9?>
問題点
削除ボタンを押すと
SyntaxError: Unexpected token < in JSON at position 0
のエラーが出て削除ボタンが機能しません。
やったこと
問題集にある文法をそのままコピペ
変更した箇所
サーバー名やデータベース名、パスワード、トップページ(新規追加用のリンク)のurlなど
このエラー文についてググったところ構文エラーと出ており、エラー文内の”<”はindex.phpファイルの先頭にある<!DOCKTYPE>の<であるようです。コンソール画面に出ていました。
ためしにこの<!DOCKTYPE>の<を消すと今度は!が該当する記号としてエラー文とともに出てきます。
教材の回答ページではエラーも出ずに機能してるのですが、自分の環境で再現するとエラーを吐いているため教材自体が間違ってはいないと思うのですが、どこをどういじったらいいかわからず困っています。
ご教授のほど、よろしくおねがいします。
追記:console.log(btnid)を追加
javascript
1 2 $(".deleteBtn").click(function(){ 3 var btnid = $(this).data("id"); 4 console.log(btnid); //<-----追加した文言 5 deleteData(btnid); 6 }); 7 8 //編集ボタンをeditBtnをクリックすると、、 9 $(".editBtn").click(function(){ 10 //ボタンにセットされたdata-idを取得。 11 var btnid = $(this).data("id"); 12 console.log(btnid); //<-----追加した文言 13 //URLにパラメータ./?edit={id}をつけて再読み込み。 14 window.location.href = "./?edit="+btnid; 15 //次の画面でURLパラメータをphpが受け取り、処理。 16 //冒頭から読み返してみてください。 17 }); 18 19 function deleteData(btnid){ 20 $.ajax({ 21 type: 'POST', 22 dataType:'json', 23 url:'functions/delete_func.php', 24 data:{ 25 btnid:btnid, 26 }, 27 success:function(data) { 28 window.location.href = "./"; 29 }, 30 error:function(XMLHttpRequest, textStatus, errorThrown) { 31 alert(errorThrown); 32 } 33 }); 34 };
コンソール画面に押したボタンのidが表示されました。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/12 02:39
2019/04/12 02:49 編集
2019/04/12 03:03