AJAXでGET出来ない(直接記載ならGET可)

このQ&Aのポイント
  • 外部サーバーからデータベースの情報を取得するPHPを作成しています。
  • $sqlのパスワードの部分を直接記載すればGETできますが、変数を使用するとGETできません。
  • 同じ条件で指示しているはずなのですが、何が問題なのでしょうか?
回答を見る
  • ベストアンサー

AJAXでGET出来ない(直接記載ならGET可)

外部サーバー(192.168.1.5)から、データベース(192.168.1.6)の情報を取り出すことが可能なPHPを作っています。 問題点 $sqlのパスワードの部分を $sql = "SELECT * FROM usr WHERE `userId`=$userId_e AND `pw`='p3kchds243j5'"; というように、直接記載すれば問題なく外部サーバー(192.168.1.5)でデータベース(192.168.1.6)の情報をGETできますが、 $sql = "SELECT * FROM usr WHERE `userId`=$userId_e AND `pw`=$pwd_e";や $sql = "SELECT * FROM usr WHERE `userId`=$userId_e AND `pw`=$pwd2_e"; だと、なぜかGETすることができません。 同じ条件で指示しているはずなのですが、何が問題なのでしょうか? 尚、外部サーバーからのGET指示はnumber,userId,pwdでありここでの間違いはありません。 よろしくお願いいたします。 【データベース(192.168.1.6)のPHP】 <?php header('Access-Control-Allow-Origin: *'); require_once('/home/sql/login.php'); //外部サーバー(192.168.1.5)からGET送信されたデータを受け取る $number = $_GET['number']; $userId = $_GET['userId']; $pwd = $_GET['pwd']; $pwd2 = 'p3kchds243j5'; //GET送信されたデータをエスケープ $number_e = mysql_real_escape_string($number); $userId_e = mysql_real_escape_string($userId); $pwd_e = mysql_real_escape_string($pwd); $pwd2_e = mysql_real_escape_string($pwd2); mysql_set_charset('utf8'); $sql = "SELECT * FROM usr WHERE `userId`=$userId_e AND `pw`=$pwd_e"; $result = mysql_query($sql); if (mysql_num_rows($result) > 0){ while($row = mysql_fetch_object($result)){ $string11 .= $row->a1; $string12 .= $row->userId; $string13 .= $row->pw; $string14 .= $row->nickname; } }else{ $string = "No matches!"; } //GET送信されてきたデータの確認 if($number == 9999){ //渡すデータを配列で格納 $array_data = array(string11=>$string11, string12=>$string12, string13=>$string13, string14=>$string14); } //ヘッダーの設定 header('Content-type:application/json; charset=utf8'); //渡すデータ(配列)をJSON形式にデコードして出力 echo json_encode($array_data); ?>

質問者が選んだベストアンサー

  • ベストアンサー
  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.3

Ajaxがどうのこうのという話ではなく、そもそも単純にSQLがきちんと書けていないだけではないかと思いますけど。 「SELECT * FROM usr WHERE `userId`=$userId_e AND `pw`=$pwd_e」 というコードだったら「$pwd_e」の値が「p3kchds243j5」の場合 「SELECT * FROM usr WHERE `userId`=$userId_e AND `pw`=p3kchds243j5」 になりますよ。 「SELECT * FROM usr WHERE `userId`=$userId_e AND `pw`='p3kchds243j5'」 にはなりませんよ。 以下のようなコードにするのがいいのではないかとPHPの公式マニュアルには書いてあります PHP: mysql_real_escape_string - Manual http://php.net/manual/ja/function.mysql-real-escape-string.php $query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", mysql_real_escape_string($user), mysql_real_escape_string($password));

tajix14
質問者

お礼

$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", mysql_real_escape_string($user), mysql_real_escape_string($password)) で出来ました。ありがとうございました。

その他の回答 (2)

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.2

$sql = "SELECT * FROM usr WHERE `userId`=$userId_e AND `pw`=$pwd_e";   ↓ $sql = "SELECT * FROM usr WHERE `userId`='$userId_e' AND `pw`='$pwd_e'"; では?

tajix14
質問者

お礼

$sql = "SELECT * FROM usr WHERE `userId`='$userId_e' AND `pw`='$pwd_e'"; で出来ました! ありがとうございます!!

回答No.1

ブラウザのアドレス欄に入力して期待通り受信できるのなら、JavaScriptのコードに問題があるのでは? ・送信データの生成方法 ・送信方法 ・(サーバーの一連の処理) ・受信方法 ・受信データの表示方法 1つでもミスがあれば期待通りの動作はしません。

tajix14
質問者

お礼

SQLの記載ミスでした。 ご回答いただきありがとうございました

関連するQ&A

  • MySQLのエラー出力

    MySQLで、テーブルのnumberフィールドのレコードでidフィールドのレコードとpwフィールドのレコードを取り出すことをしています。 $sql = mysql_connect('mysql.example.com', 'user', 'pass'); mysql_select_db('exampledb'); $result = mysql_query("SELECT * FROM `memberlist` WHERE `number` = '{$number}'"); while ($row = mysql_fetch_object($result)){ echo "ID:{$row->id}"; echo "PW:{$row->pw}"; } +------+------+------+ |number|id----|pw----| +------+------+------+ |000001|userid|userpw| +------+------+------+ この場合、$numberに000001を代入することで object(stdClass)#1 (3) { ["number"]=> string(6) "000001" ["id"]=> string(6) "userid" ["pw"]=> string(6) "userpw" } となりますが、 これが、もし$numberにnumberフィールドのレコードに無い値が代入された場合、どうやってエラーを出せばいいのですか?

    • ベストアンサー
    • PHP
  • php5+Mysql5による条件検索とその表示方法が上手く動作しないのでどなたかご指摘をお願いします。

    phpにて条件検索を行っているのですが、『where』以下を$変数にすると動かなくなってしまいます。記述部分で何が間違っているのでしょうか? 以下記述↓ <? $link = db_con(); //←DB接続 $sql = "select * from tbl where id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ?> ここまで↑ を下記のように『where』以下を$変数にして代入 $変数した場合↓ <? $where .= "id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; $link = db_con(); //←DB接続 $sql = "select * from tbl where $where "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ?> ここまで↑ どなたかご指摘をお願いします。

  • SQL Injection対策はこれで十分?

    データベースにMySQLを使用しています。SQL Injection対策を行いたいのですが、以下の方法で十分防ぐことができるのでしょうか? <?php $hoge = $_GET['ok']; $sql = "select * from ok where user = '".mysql_real_escape_string($hoge)."';"; $res = mysql_query($sql ....... ?> よろしくお願いします。

    • ベストアンサー
    • PHP
  • mySQLで結果が無いときの処理

    $sql = "select * from test "; $sql .= "where id='".$_POST["id"]."' and pwd='".$_POST["pwd"]."'"; $result = mysql_query($sql); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { if($row){ $msg = "OK"; } } としていますが、NGのときってどういう風にしたらいいのでしょうか? 基本的なことですみませんが、教えてください。

    • ベストアンサー
    • PHP
  • 複数検索時の条件分岐について

    環境:php5、mysql5 条件検索はできるのですが検索状況の違いによる条件分岐について どなたがアドバイスをお願いします。 $sql内でWHERE以降を「 if ~ else ~ 」などを使って変更するか WHILE以降を変更する気がするのですがやり方がよくわかりません。 よろしくお願いします。 以下設定 テーブル  :tbl_item [int] フィールド1:item_id [int] フィールド2:cate_id [int] ←他テーブル(名前に変換) フィールド3:item_name [varchar] フィールド4:price [decimal] フィールド5:stock_id [int]   ←他テーブル 条件1:cate_id(プルダウン)を検索条件に加えている時 $sql = "SELECT tbl_item.*, tbl_stock.item_stock FROM tbl_item LEFT JOIN tbl_stock ON tbl_item.item_id = tbl_stock.item_id WHERE tbl_item.cate_id = '" . mysql_real_escape_string( $_GET['cate_id'] ) . "' AND tbl_item.item_name LIKE '%" . mysql_real_escape_string( $_GET['item_name'] ) . "%' AND price BETWEEN '" . mysql_real_escape_string( $_GET['price_s'] ) . "' AND '" . mysql_real_escape_string( $_GET['price_e'] ) . "' ORDER BY tbl_item.item_id desk LIMIT ${_GET['page']}, ${_GET['rows']} "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); 条件2:cate_id(プルダウン)を検索条件に加えていない時 $sql = "SELECT tbl_item.*, tbl_stock.item_stock FROM tbl_item LEFT JOIN tbl_stock ON tbl_item.item_id = tbl_stock.item_id WHERE tbl_item.item_name LIKE '%" . mysql_real_escape_string( $_GET['item_name'] ) . "%' AND price BETWEEN '" . mysql_real_escape_string( $_GET['price_s'] ) . "' AND '" . mysql_real_escape_string( $_GET['price_e'] ) . "' ORDER BY tbl_item.item_id desk LIMIT ${_GET['page']}, ${_GET['rows']} "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ・ ・ アイテム数 <?= $num_rows ?> 種類 ・ ・ <? WHILE ( $item = mysql_fetch_array( $result ) ) { ?> ・ ・ ・ <? $n ++; } ?>

    • ベストアンサー
    • PHP
  • エラーの意味と対策

    PHP-MySQL間でデータを更新するプログラムを作成、PHPファイルを 読み出し更新を行おうとしたところ、以下のメッセージが表示されました。 データの更新はできているのですが、このメッセージがよくわかりません。 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in E:\(ディレクトリ)\delete.php on line 106 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in E:\(ディレクトリ)\delete.php on line 106 ここに書かれているコードはSQLで $sql_update = "UPDATE ITEM SET DELETE_FLAG=1,LASTUPDATE_USER='".htmlspecialchars(mysql_real_escape_string($_COOKIE["loginuser"]),ENT_QUOTES)."',LASTUPDATE_DTTM=NOW() WHERE ITEM_ID=".$key; となっています。 今のところ「mysql_real_escape_string」をはずすとエラーが出ないのですが、 エラーの意味、原因、対策についてコメントいただければと思います。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • mysql_real_escape_string

    php mysqlです。 $row = $stt->fetch(PDO::FETCH_ASSOC); したあと、 $rowに入っているデータに対して、 mysql_real_escape_string 関数をかましたあとのデータに変更するにはどうすればいいのでしょうか? よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • mysql_real_escape_string

    独学数ヶ月の初心者の質問で恐縮です。 もろもろの事情で仕方なくmysql_real_escape_stringを 以下(1)のように使用しなくてはならないと仮定し、 セキュリテイの面で(2)のようにシングルクオテーションつける 事で危険を回避できますか? またシングルクオテーションは(2)のようにつけてはいけない とかありますか?(記述の基本が曖昧なため、ただの確認の質問) (1) $sql = sprintf("SELECT id , password FROM `adminDatabase` where id = '%s' and password = '%s' order by id", mysql_real_escape_string($id), mysql_real_escape_string($password)); (2) $sql = sprintf("SELECT id , password FROM `adminDatabase` where id = '%s' and password = '%s' order by id", ’mysql_real_escape_string($id)’, ’mysql_real_escape_string($password)’); よろしくお願いします。

    • ベストアンサー
    • MySQL
  • mysql危険回避(1 OR effective)

    mysqlの危険回避の質問です。 (私がした1つ前に質問したものでは、解決しなかったので再度表現を変えて行います。) mysqlでwhere句の値に 1 OR effective=0 が入ると危険であり、シングルクオテーションで回避できる、とあるサイトでみました。 それを踏まえ、それまで以下の(1)で動いていたものを(2)にしたら、動かなくなりました。 そこで質問です。 (初めてphpに触れた人に教えるレベルで、かなり噛み砕いて教えていただけたら幸いです。) ■(1)はそのままでは危険という認識でよろしいですか? ■(2)はなぜ動かないのでしょうか? ■(1)を危険のない(もしくは可能な限り危険のない)書き方をするとしたらどうしたら いいでしょうか?(PDOで書く事!やmysqliがいい、というのは知っています。 どうしてもmysql_real_escape_stringを使わなくてはいけないという条件があったと 想定して強引にやるとしたらどうか、という事でお答えをいただければと思います。) (1) $sql = sprintf("SELECT id , password FROM `adminDatabase` where id = '%s' and password = '%s' order by id", mysql_real_escape_string($id), mysql_real_escape_string($password)); (2) $id = "'" . mysql_real_escape_string($id) . "'"; $password = "'". mysql_real_escape_string($password) . "'"; $sql = sprintf("SELECT id , password FROM `adminDatabase` where id = '%s' and password = '%s' order by id",$id , $password ); よろしくお願いします。

    • ベストアンサー
    • MySQL
  • mysqlのinsert文について、ご指導をお願いいたします。

    はじめまして。 プログラミング初心者です。 現在、PHP&MySQLで会員制掲示板を制作しようと奮闘しております。 会員登録フォームを作成し、下記SQL文にて会員登録を行おうとしているのですが、「エラーは出ていないのに、DBにデータが登録されない。」状況で、なにがおかしいのかわからず非常に困っております。尚、DBには正常に接続されています。 環境はVISTAにXAMPPを入れております。 私、PHP初心者のため、本のサンプルソースを加工して使用しようとしています。 下記にソースを記載いたしますので、 どうかご指導のほどお願いいたします。 (※情報が不足しておりましたら申し訳ありません。必要な情報をお教えいただけましたら幸いです。) // 接続 $link = mysql_connect( $db_host, $db_user, $db_password ); mysql_select_db( $db_name ); $result = mysql_query( 'set character set utf8' ); $sql = "select email1 from users where email = '" . mysql_real_escape_string( $_POST['email'] ) . "'"; $result = mysql_query( $sql ); // if ( $error != '' ) exit; // 会員データの挿入 $sql = "insert into member ( login_id, passwd, register_date, nickname, sex, birthday, email, pref, division, state ) values ( '" . mysql_real_escape_string( $_POST['email'] ) . "', '" . md5( $_POST['passwd'] ) . "', '" . date( 'Y-m-d H:i:s' ) . "', '" . mysql_real_escape_string( $_POST['nickname'] ) . "', '" . mysql_real_escape_string( $_POST['sex'] ) . "', '" . mysql_real_escape_string( $_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'] . ' 00:00:00' ) . "', '" . mysql_real_escape_string( $_POST['email'] ) . "', '" . mysql_real_escape_string( $_POST['pref'] ) . "', '" . mysql_real_escape_string( $_POST['division'] ) . "', '1' )"; $result = mysql_query( $sql ); //echo $sql; // $title = '会員登録[3/4]'; ?>

    • ベストアンサー
    • PHP

専門家に質問してみよう