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

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

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

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

Ajax

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

Q&A

解決済

1回答

313閲覧

PHP Ajax Error:Unexpected token Cを直したい

ruby.uyu

総合スコア5

PHP

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

Ajax

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

0グッド

0クリップ

投稿2019/09/15 14:26

編集2019/09/15 14:30

前提・実現したいこと

数日前からPHPの勉強中でAjaxを使用した削除機能を作っていて出ているエラーを理解し直したい。

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

delete_func.phpで何故、success:functionの方にいかないのかわからない。

エラーメッセージ:削除ボタンを押した時に出る SyntaxError: Unexpected token C in JSON at position 0

###現状
delete_func.phpに変数自体は渡されている。
delete_func.phpのデータベースへのdelete文は機能し削除はできている。
resistのscript文でerror:functionの方にいってしまう。

該当のソースコード

####resist.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 src="https://code.jquery.com/jquery-3.0.0.min.js"></script> 11</head> 12<body> 13 <div> 14 <a href="login.php">ログイン</a> 15 </div> 16 <div> 17 <a href="resist.php">新規追加</a> 18 </div> 19 <div> 20 <a href="index.php">ユーザー画面へ</a> 21 </div> 22 <div> 23 <a href="logout.php">ログアウト</a> 24 </div> 25<?php 26 27 //データベースを呼び出します。 28 require_once "db.php"; 29 30 if (!empty($_GET["edit"])) { 31 32 $editId = $_GET["edit"]; 33 34 $userdataEdit = "SELECT * FROM user WHERE id = '".$editId."'ORDER BY id DESC"; 35 $userdataEdit = mysqli_query($mysqli,$userdataEdit); 36 37 while($userdataEditArray = mysqli_fetch_assoc($userdataEdit)){ 38 $name = $userdataEditArray["name"]; 39 $age = $userdataEditArray["age"]; 40 $skill = $userdataEditArray["skill"]; 41 42 $mail = $userdataEditArray["mail"]; 43 $hashpass = $userdataEditArray["password"]; 44 } 45 $userCount = $userdataEdit->num_rows; 46 47 48 if($_SERVER['REQUEST_METHOD'] === 'POST'){ 49 50 $name = htmlspecialchars($_POST['name'],ENT_QUOTES); 51 $skill = htmlspecialchars($_POST['skill'],ENT_QUOTES); 52 $age = htmlspecialchars($_POST['age'],ENT_QUOTES); 53 54 //メールアドレスとパスワードをキャッチします。 55 $mail = htmlspecialchars($_POST['mail'], ENT_QUOTES); 56 $password = htmlspecialchars($_POST['password'], ENT_QUOTES); 57 58 function mailcheck($mail){ 59 //こちらの記号は正規表現と言います。 60 //今回は、メールアドレスの形を表しています。 61 //正規表現で$mail内に入っているデータがメールアドレスの形じゃなければfalseを返します。 62 if(preg_match('/^([a-z0-9+_\-]+)(.[a-z0-9+_\-]+)*@([a-z0-9\-]+.)+[a-z]{2,6}$/iD', $mail)){ 63 return 'true'; 64 }else{ 65 return 'false'; 66 } 67 }; 68 69 //$mailが空じゃなければバリデーションチェック呼び出します。 70 //空の場合は$mailresultにfalseを返します。 71 if(!empty($mail)){ 72 $mailresult = mailcheck($mail); 73 }else{ 74 $mailresult = "false"; 75 }; 76 77 //パスワードの暗号化と空欄チェック 78 if(!empty($password)){ 79 $hashpass = password_hash($password,PASSWORD_BCRYPT); 80 }; 81 82 if(empty($hashpass)){ 83 $passresult = "false"; 84 }else{ 85 $passresult = "true"; 86 }; 87 88 if($mailresult!=="false" && $passresult!=="false"){ 89 $result = mysqli_query($mysqli,"UPDATE user SET name = '".$name."',skill = '".$skill."',age = '".$age."',mail = '".$mail."',password = '".$hashpass."' WHERE id = '".$editId."'"); 90 echo "アップデート完了"; 91 }; 92 }; 93 94 }else{ 95 $userCount = 0; 96 97 if($_SERVER['REQUEST_METHOD'] === 'POST'){ 98 99 $name = htmlspecialchars($_POST['name'],ENT_QUOTES); 100 $skill = htmlspecialchars($_POST['skill'],ENT_QUOTES); 101 $age = htmlspecialchars($_POST['age'],ENT_QUOTES); 102 103 //メールアドレスとパスワードをキャッチします。 104 $mail = htmlspecialchars($_POST['mail'], ENT_QUOTES); 105 $password = htmlspecialchars($_POST['password'], ENT_QUOTES); 106 107 function mailcheck($mail){ 108 //こちらの記号は正規表現と言います。 109 //今回は、メールアドレスの形を表しています。 110 //正規表現で$mail内に入っているデータがメールアドレスの形じゃなければfalseを返します。 111 if(preg_match('/^([a-z0-9+_\-]+)(.[a-z0-9+_\-]+)*@([a-z0-9\-]+.)+[a-z]{2,6}$/iD', $mail)){ 112 return 'true'; 113 }else{ 114 return 'false'; 115 } 116 }; 117 118 //$mailが空じゃなければバリデーションチェック呼び出します。 119 //空の場合は$mailresultにfalseを返します。 120 if(!empty($mail)){ 121 $mailresult = mailcheck($mail); 122 }else{ 123 $mailresult = "false"; 124 }; 125 126 //パスワードの暗号化と空欄チェック 127 if(!empty($password)){ 128 $hashpass = password_hash($password,PASSWORD_BCRYPT); 129 }; 130 131 if(empty($hashpass)){ 132 $passresult = "false"; 133 }else{ 134 $passresult = "true"; 135 }; 136 137 138 if($mailresult!=="false" && $passresult!=="false"){ 139 $result = mysqli_query($mysqli,"INSERT INTO user(name,skill,age,mail,password) VALUES('$name','$skill','$age','$mail','$hashpass')"); 140 echo '新規登録完了'; 141 }; 142 }; 143 }; 144 145?> 146<form action="" method="post"> 147 <input type="text" name="mail" placeholder="メールアドレス" value="<?php if(!empty($mail)){echo $mail;};?>"><br> 148 <?php if(!empty($mailresult)){if($mailresult == "false"){echo "メールアドレスにエラーがあります。<br>";};};?> 149 <input type="password" name="password" placeholder="パスワード" value=""><br> 150 <?php if(!empty($passresult)){if($passresult == "false"){echo "パスワードにエラーがあります。<br>";};};?> 151 <input type="text" name="name" placeholder="お名前" value="<?php if (!empty($name)){echo $name;}; ?>"/><br/> 152 <input type="text" name="age" placeholder="年齢" value="<?php if (!empty($age)){echo $age;}; ?>"/><br/> 153 <input type="text" name="skill" placeholder="スキル" value="<?php if (!empty($skill)){echo $skill;}; ?>"/><br/> 154 <?php if($userCount == 0): ?> 155 <input type="submit" name="submitBtn" value="登録"> 156 <?php else: ?> 157 <input type="submit" name="submitBtn" value="更新"> 158 <?php endif; ?> 159</form> 160 161<?php 162 163 $userdata = "SELECT * FROM user ORDER BY id DESC"; 164 $userdata = mysqli_query($mysqli,$userdata); 165 166 while ($userdataArray = mysqli_fetch_assoc($userdata)) { 167 echo $id = $userdataArray["id"]; 168 echo ","; 169 echo $name = $userdataArray["name"]; 170 echo ","; 171 echo $age = $userdataArray["age"]; 172 echo ","; 173 echo $skill = $userdataArray["skill"]; 174 echo "|"; 175 echo "<button class='deleteBtn' data-id='".$id."'>削除する</button>"; 176 echo "|"; 177 //編集ボタンを追加。editBtnを押した時にjsでURLにパラメータを付与。 178 echo "<button class='editBtn' data-id='".$id."'>編集する</button>"; 179 echo "<br>"; 180 }; 181 182?> 183 184 185<script> 186 187 $(".deleteBtn").click(function(){ 188 var btnid = $(this).data("id"); 189 deleteData(btnid); 190 }); 191 192 //編集ボタンをeditBtnをクリックすると、、 193 $(".editBtn").click(function(){ 194 //ボタンにセットされたdata-idを取得。 195 var btnid = $(this).data("id"); 196 //URLにパラメータ./?edit={id}をつけて再読み込み。 197 window.location.href = "./resist.php?edit="+btnid; 198 //次の画面でURLパラメータをphpが受け取り、処理。 199 //冒頭から読み返してみてください。 200 }); 201 function deleteData(btnid){ 202 $.ajax({ 203 type:'POST', 204 dataType:'json', 205 url:'delete_func.php', 206 data:{ 207 btnid:btnid, 208 } 209 }).then( 210 function(data){ 211 window.location.href = "./"; 212 }, 213 function(XMLHttpRequest,textStatus,errorThrown){ 214 alert(errorThrown); 215 } 216 ) 217 }; 218 219</script> 220 221</body> 222</html> 223

####delete_func.php

PHP

1<?php 2 //データベースを呼び出します。 3 require_once "db.php"; 4 5 //jsから受け取ったデータのidを取得します。 6 $jsondata = $_POST['btnid']; 7 8 //MySqlで該当データを削除します。 9 //データベース内でidが一致したデータを削除します。 10 $resultcontents = mysqli_query($mysqli,"delete from user where id = '".$jsondata."'"); 11 12 //完了したら、結果をjsに返します。 13 //今回はid($jsondata)をそのまま返していますが、特に深い意味はないです。 14 header('Content-type: application/json'); 15 echo json_encode( $jsondata ); 16?> 17

####db.php

PHP

1<?php 2 $mysqli = new mysqli("localhost", "root", "admin", "userData"); 3 4 //もしエラーが起きたら、エラー内容が表示されます。 5 if ($mysqli->connect_errno) { 6 printf("接続失敗: %s\n", $mysqli->connect_error); 7 exit(); 8 } 9 10 if (!$mysqli->set_charset("utf8")) { 11 printf("Error loading character set utf8: %s\n", $mysqli->error); 12 exit(); 13 } else { 14 printf("Current character set: %s\n", $mysqli->character_set_name()); 15 } 16 ?> 17 18

試したこと

https://teratail.com/questions/184047
上記などで似たようなエラーを見つけて試してみましたがerrorが"token C"ではないfixの記事が多く解決できませんでした

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

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

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

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

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

guest

回答1

0

ベストアンサー

db.phpでprintfするのをやめましょう。

【PHP: header - Manual】
https://www.php.net/manual/ja/function.header.php

覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。 頻出するエラーとして、include または require 関数、他のファイルをアクセスする関数に 空白または空行があり、header() の前に出力が 行われてしまうというものがあります。同じ問題は、単一の PHP/HTML ファイルを使用している場合でも存在します。

投稿2019/09/15 14:30

kei344

総合スコア69398

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

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

ruby.uyu

2019/09/15 14:38

早速の回答ありがとうございます。 解決しました。 教材をコピペせずその都度、正しいか確認して勉強を進めたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問