###前提・実現したいこと
現在、wordpressでプラグイン"BuddyPress"を使って、SNS制ToDoリストのwebアプリを作っています。ToDoリストでユーザーごとにToDoの表示・追加・削除をできるようにしたいです。今は、wordpressが作ったwp_usermetaテーブルの「user_idカラム」に「ToDoを作成したユーザーのID」を、「meta_keyカラム」に「"ToDoList"」を、「meta_valueカラム」に「ユーザーが入力したToDoリストの内容」を保存するようにしようと考えています。
###発生している問題・エラーメッセージ
以下のようなエラーが出ました。
WordPress データベースエラー: [] SELECT id, user_id, field_id, value, last_updated FROM wp_bp_xprofile_data WHERE field_id = 1 AND user_id IN (1)
###該当のソースコード
php
1<?php 2ini_set( 'display_errors', 1 ); 3global $wpdb; 4$wpdb->show_errors(); 5$wpdb->print_error(); 6$MyUserID = bp_get_member_user_id(); 7$memo = filter_input(INPUT_POST,'memo'); 8?> 9<!doctype html> 10<html> 11 <head> 12 <meta charset="UTF-8"> 13 <title></title> 14 <style type="text/css"> 15 #container{ 16 margin: 0 auto; 17 width: 60%; 18 } 19 #memo{ 20 width: 100%; 21 22 } 23 .content{ 24 float: left; 25 width: 90%; 26 word-wrap: break-word; 27 28 } 29 30 h6{ 31 color: red; 32 } 33 li{ 34 list-style: decimal; 35 } 36 .MainWelcome{ 37 38 39 } 40 .ExplainToDo{ 41 text-align: center; 42 } 43 44 45 </style> 46 </head> 47 <body> 48 49 50 <div id="container"> 51 <h2 class="ExplainToDo">続くToDoリスト</h4> 52 <h6 class="ExplainToDo">*クリックするとそのタスクは消えます。</h6> 53 <textarea id="memo" name="memo"></textarea> 54 <p> 55 <input type="button" id="save" value="保存"> 56 <input type="button" id="clear" value="全消去"> 57 </p> 58 <ul class="ToDo_Ul"> 59 60 </ul> 61 </div> 62 <script type="text/javascript" src=jquery1.10.1.min.js></script> 63 <script type="text/javascript" > 64 $(function () { 65 function MakeLi(){ 66 <?php 67 $MyToDo = $wpdb->get_results(" 68 SELECT meta_value 69 FROM $wpdb->usermeta 70 WHERE user_id = $MyUserID 71 AND meta_key = ‘ToDoList’ 72 ", ARRAY_A ); 73 $MyToDoList = join(",",$MyToDo->meta_value); 74 75 76 ?> 77 var MyToDoList = "<?= $MyToDoList?>"; 78 var MyToDo = MyToDoList.split(","); 79 $.each(MyToDo, function() { 80 $(".ToDo_Ul").prepend("<li class='todo'>" + this + "</li>"); 81 }); 82 } 83 MakeLi(); 84 85 $('#save').click(function(){ 86 var memo = $('#memo').val(); 87 if(!memo) return; 88 <?php 89 90 $wpdb->insert($wpdb->usermeta, 91 array( 92 'user_id' => $MyUserID, 93 'meta_key' => 'ToDoList', 94 'meta_value' => $memo, 95 ), 96 array( 97 '%d', '%s', '%s' 98 ) 99 ); 100 ?> 101 MakeLi(); 102 $('memo').val(''); 103 104 } 105 106 $('.ToDo_Ul').on('click', '.todo', function(){ 107 <?php 108 $wpdb->delete( $wpdb->usermeta, 109 array( 'user_id' => $MyUserID, 110 'meta_key' => 'ToDoList', 111 'meta_value' => this 112 ), 113 array( '%d', '%s', '%s') ); 114 ?> 115 MakeLi(); 116 }); 117 118 } 119 </script> 120</body> 121</html> 122
###試したこと
エラーにあったように、
php
1$wpdb->get_results( 2 "SELECT id, user_id, field_id, value, last_updated FROM $wpdb->bp_xprofile_data WHERE field_id = 1 AND user_id IN (1)" 3 );
というのを追加してみましたが、エラーが出ました。
WordPress データベースエラー: [] SELECT id, user_id, field_id, value, last_updated FROM wp_bp_xprofile_data WHERE field_id = 1 AND user_id IN (1) Notice: Undefined property: wpdb::$bp_xprofile_data in フォルダ名/wordpress/wp-includes/wp-db.php on line 684 WordPress データベースエラー: [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE field_id = 1 AND user_id IN (1)' at line 1] SELECT id, user_id, field_id, value, last_updated FROM WHERE field_id = 1 AND user_id IN (1)
###補足情報
現在、ローカル開発環境でサイトを作っているので、サイトをそのまま見せることはできません。曖昧な部分が多いと思いますが、宜しくお願いします。
###修正2016/12/31 16:56
Ajaxを使ってコードを書き直してみました。また、ファイルをjsとphpに分けました。今まで出ていたデータベースエラーはなくなりましたが、まだ
データベースからデータを取得・削除したり、データベースに入力されたデータを追加したりできません。以下がそのコードです。
javascript
1<!DOCTYPE HTML> 2<html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <style type="text/css"> 7 #container{ 8 margin: 0 auto; 9 width: 60%; 10 } 11 #memo{ 12 width: 100%; 13 14 } 15 .content{ 16 float: left; 17 width: 90%; 18 word-wrap: break-word; 19 20 } 21 22 h6{ 23 color: red; 24 } 25 li{ 26 list-style: decimal; 27 } 28 .MainWelcome{ 29 30 31 } 32 .ExplainToDo{ 33 text-align: center; 34 } 35 36 37 </style> 38 <script type="text/javascript" src=jquery1.10.1.min.js></script> 39 <script type="text/javascript" > 40 41 (function () { 42 function MakeLi(){ 43 44 45 46 $.ajax({ 47 type: 'POST', 48 url: ajaxurl, 49 data: { 50 'action' : 'GetMyToDo', 51 52 }, 53 success: function( response ){ 54 var MyToDoList = response; 55 var MyToDo = MyToDoList.split(","); 56 $.each(MyToDo, function() { 57 $(".ToDo_Ul").prepend("<li class='todo'>" + this + "</li>"); 58 }); 59 }, 60 61 62 }); 63 64 65 }; 66 MakeLi(); 67 68 $('#save').click(function(){ 69 var memo = $('#memo').val(); 70 if(!memo) return; 71 $.ajax({ 72 type: 'POST', 73 url: ajaxurl, 74 data: { 75 'action' : 'SaveMyToDo', 76 77 }, 78 success: function( response ){ 79 } 80 81 82 }); 83 MakeLi(); 84 $('memo').val(''); 85 86 }); 87 88 $('.ToDo_Ul').on('click', '.todo', function(){ 89 $.ajax({ 90 type: 'POST', 91 url: ajaxurl, 92 data: { 93 'action' : 'DeleteMyToDo', 94 95 }, 96 success: function( response ){ 97 } 98 99 100 }); 101 MakeLi(); 102 }); 103 104 }()); 105 </script> 106 </head> 107 <body> 108 <div id="container"> 109 <h2 class="ExplainToDo">続くToDoリスト</h2> 110 <h6 class="ExplainToDo">*クリックするとそのタスクは消えます。</h6> 111 <form action="bp-custom.php" method="post"> 112 <textarea id="memo" name="memo"></textarea> 113 <p> 114 <input type="button" id="save" value="保存"> 115 <input type="button" id="clear" value="全消去"> 116 </p> 117 </form> 118 <ul class="ToDo_Ul"> 119 120 </ul> 121 </div> 122 </body> 123</html>
php
1function add_my_ajaxurl() { 2?> 3 <script> 4 var ajaxurl = '<?php echo admin_url( 'admin-ajax.php'); ?>'; 5 </script> 6<?php 7} 8add_action( 'wp_head', 'add_my_ajaxurl', 1 ); 9 10function GetMyToDo(){ 11 if ( bp_has_members( bp_ajax_querystring( 'members' ) ) ) : 12 while ( bp_members() ) : bp_the_member(); 13 14 global $wpdb,$bp; 15 $MyUserID = $bp->loggedin_user->id; 16 $MyToDo = $wpdb->get_results(" 17 SELECT meta_value 18 FROM $wpdb->usermeta 19 WHERE user_id = '".$MyUserID."' 20 AND meta_key = 'ToDoList' 21 ", ARRAY_A ); 22 $MyToDoList = join(",",$MyToDo->meta_value); 23 echo $MyToDoList; 24 die(); 25 endwhile ; 26 endif; 27} 28add_action( 'wp_ajax_GetMyToDo', 'GetMyToDo' ); 29 30 31function SaveMyToDo(){ 32 if ( bp_has_members( bp_ajax_querystring( 'members' ) ) ) : 33 while ( bp_members() ) : bp_the_member(); 34 35 global $wpdb,$bp; 36 $MyUserID = $bp->loggedin_user->id; 37 $memo = filter_input(INPUT_POST, 'memo'); 38 $wpdb->insert($wpdb->usermeta, 39 array( 40 'user_id' => '".$MyUserID."', 41 'meta_key' => 'ToDoList', 42 'meta_value' => '".$memo."' 43 ), 44 array( 45 '%d', 46 '%s', 47 '%s' 48 ) 49 ); 50 die(); 51 endwhile ; 52 endif; 53} 54add_action( 'wp_ajax_SaveMyToDo', 'SaveMyToDo' ); 55 56 57function DeleteMyToDo(){ 58 if ( bp_has_members( bp_ajax_querystring( 'members' ) ) ) : 59 while ( bp_members() ) : bp_the_member(); 60 global $wpdb,$bp; 61 $MyUserID = $bp->loggedin_user->id; 62 $wpdb->delete( $wpdb->usermeta, 63 array( 'user_id' => '".$MyUserID."', 64 'meta_key' => 'ToDoList', 65 'meta_value' => '".this."' 66 ), 67 array( '%d', '%s', '%s') ); 68 die(); 69 endwhile ; 70 endif; 71} 72add_action( 'wp_ajax_DeleteMyToDo', 'DeleteMyToDo' ); 73
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/31 08:26
2016/12/31 08:42