初めてご質問させていただきます。
至らない箇所、わかりづらい文等あると思いますがご容赦ください。
AjaxでPOSTし、PHPを通してMysqlにアクセスしたいのですが、なかなかうまくいきません。
タイトルにもある通り、500 (Internal Server Error)が発生してしまいます。
500番エラーはサーバー処理側のエラーなのでPHPに問題があるのではと思うのですが、記述ミス等は見当たらず、頭を抱えております。
御意見いただければ幸いです。
PHP
1index.php 2<?php 3 4$id = $_SESSION["ID"]; //ここには整数が入ります。 5 6?> 7<!DOCTYPE html> 8<html lang="ja"> 9 <head> 10 <meta charset="utf-8"> 11 <title>KENJA</title> 12</script> 13 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 14 <script type="text/javascript" src="main.js"></script> 15 </head> 16 17 <body> 18 <input id="user_id" type="hidden" name="user_id" value="<?= $id;?>"> 19 <p>名前<input id="name" type="text" name="name" ></p> 20 <p>本文<input id="text" type="text" name="text" ></p> 21 <input id = "ajax-button" type="button" name="" value="インサート"> 22 </body> 23</html> 24
javascript
1main.js 2jQuery(function($){ 3 $('#ajax-button').click(function() { 4 var id = $("#user_id").val(); 5 var user_name = $("#name").val(); 6 var text = $("#text").val(); 7 $.ajax({ 8 url : "ajax.php", 9 type : "POST", 10 data : {id:id,user_name:user_name,text:text} 11 }).done(function(textStatus, xhr) { 12 console.log("ajax通信に成功しました") 13 }).fail(function(xhr, textStatus, errorThrown) { 14 console.log("ajax通信に失敗しました"); 15 }); 16 }); 17});
php
1ajax.php 2<?php 3require_once(__DIR__ . '/action.php'); 4$user = new Action(); 5$user->post(); 6header('Content-type:application/json; charset=utf8'); 7?>
php
1action.php 2<?php 3require_once(__DIR__ . '/config.php'); 4class Action{ 5 public $_db; 6 7 public function __construct(){ 8 $this->_db = new \PDO(DSN,DB_USERNAME,DB_PASSWORD); 9 } 10 11public function post(){ 12 $sql = "insert into posts (id,name,text) values (:id,:name,:text)"; 13 $stmt = $this->_db->prepare($sql); 14 $stmt->bindValue(':id',$_POST['id']); 15 $stmt->bindValue(':name',$_POST['user_name']); 16 $stmt->bindValue(':text',$_POST['text']); 17 $stmt->execute(); 18} 19} 20?>
php
1config.php 2<?php 3ini_set('display_errors', 1); 4 5define('DSN', '※'); 6define('DB_USERNAME', '※'); 7define('DB_PASSWORD', '※'); 8//接続は問題ありません。(PDOで確認済み) 9 10session_start();
追記致します
ajax.phpのNetwork Headers Form data
id:8
user_name:nameのtest
text:textのtest
[一応解決したので追記致します]
ajax.phpで直接DBにアクセスし、insertするとDBに保存できました。
詳しく解説いただければ幸いです。
php
1ajax.php 2<?php 3require_once('config.php'); 4 5$dbh = db_connect(); 6 7$_POST['id']; 8$_POST['name']; 9$_POST['text']; 10 11$sql = "insert into posts (id,name,text) values (:id,:name,:text)"; 12 13$stmt = $dbh->prepare($sql); 14$stmt->execute(array( 15 16 ":id"=>$_POST['id'], 17 18 ":name"=>$_POST['name'], 19 20 ":text"=>$_POST['text'] 21 22 ));
php
1config.php 2<?php 3ini_set('display_errors', 1); 4 5define('DSN', '※'); 6define('DB_USERNAME', '※'); 7define('DB_PASSWORD', '※'); 8function db_connect( ){ 9 try{ 10 return new PDO(DSN,DB_USERNAME,DB_PASSWORD); 11 }catch(PDOException $e){ 12 echo $e->getMessage( ); 13 exit; 14 } 15} 16?>