2016-05-24 3 views
0

私はCordovaのコードにJavaScriptを習得しようとしています。 私は多くのチュートリアルを読んでいましたが、それらのどれも折畳問題を助けませんでした。JavaScript、PHPとMySQLの間の通信

私のコードバスアプリは非常に簡単なテスト用です。ただのテキストボックスと2つのボタン。どちらのボタンも私のサーバー上でPHPスクリプトを呼び出します。 1つのボタンはPHPスクリプトにデータを送り、MySQLデータベースにテキストフィールドの値を挿入し、2番目のボタンは同じスクリプトを呼び出し、データベースの値をコードバアプリに書き込む必要があります。

function getNameFromServer() { 
    var url = "appcon.php"; 
    var action = 'read'; 
    $.getJSON(url, function (returnedData) { 
     $.each(returnedData, function (key, value) { 
      var id = value.pid; 
      var name = value.name; 
      $("#listview").append("<li>" + id + " - " + name) + "</li>"; 
     }); 
    });    
} 

function sendNameToServer() { 
    console.log("sendNameToServer aufgerufen"); 
    var url2send = "appcon.php"; 
    var name = $("#Name").val() 
    var dataString = name; 
    console.log(dataString); 
    if ($.trim(name).length>0) { 
     $.ajax({ 
      type: "POST", 
      url: url2send, 
      data: { action: 'insert', name: dataString }, 
      crossDomain: true, 
      cache: false, 
      beforeSend: function() { 
       console.log("sendNameToServer beforeSend wurde aufgerufen"); 
      }, 
      success: function (data) { 
       if (data == "ok") { 
        alert("Daten eingefuegt"); 
       } 
       if (data == "error") { 
        alert("Da ging was schief"); 
       } 
      } 
     }); 
    }   
} 

私の質問/問題:

  1. sendNameToServer目的球が、その中で動作します。ここ

    は私の

    <?PHP 
    $response = array(); 
    
    require_once __DIR__ . '/db_config.php'; 
    
    $db_link = mysqli_connect (
           DB_SERVER, 
           DB_USER, 
           DB_PASSWORD, 
           DB_DATABASE 
           ); 
    mysqli_set_charset($db_link, 'utf8'); 
    if (!$db_link) 
    { 
        die ('keine Verbindung '.mysqli_error()); 
    } 
    
    if(isset($_POST['action']) && $_POST['action'] == 'insert'){ 
        $name = $_POST['name']; 
        $sql = "INSERT INTO test.testTable (name) VALUES ('$name')"; 
        $db_erg = mysqli_query($db_link, $sql); 
        if (!$db_erg){ 
         echo "error"; 
        }else{ 
         echo "ok"; 
        } 
    } 
    
    if(isset($_POST['action']) && $_POST['action']=='read'){ 
        $sql = "SELECT * FROM testTable"; 
    
        $db_erg = mysqli_query($db_link, $sql); 
        if (!$db_erg) 
        { 
         $response["success"] = 0; 
         $response["message"] = "Oops!"; 
         echo json_encode($response); 
         die('Ungültige Abfrage: ' . mysqli_error()); 
        } 
    
        while ($zeile = mysqli_fetch_array($db_erg, MYSQL_ASSOC)) 
        { 
         //$response["success"] = $zeile['pid']; 
         //$response["message"] = $zeile['name']; 
         $response[]=$zeile; 
        } 
        echo json_encode($response); 
        mysqli_free_result($db_erg); 
    } 
    ?> 
    

    、ここでは、コルドバのアプリで私の2つの機能でありますケースでは、データがデータベースに挿入されます。しかし、私はアラートを得ることはありません(成功:決して呼び出されません)。

  2. は、どのように私はgetNameFromServer()機能でPHPスクリプトに"action = read"を渡すことができますか?

3番目の質問は少しオフトピックですが、コードのこの技術では、「保存」であるか、それはコルドバのアプリとサーバーの間でデータを操作するのは簡単ですか!より良い方法は何ですか?または、どのようにして伝送を暗号化できますか?

+4

[リトルボビー](http://bobby-tables.com/は)[スクリプトがSQLインジェクション攻撃のリスクがある。]と言う(http://stackoverflow.com/questions/60174/どのように私はPHPのインジェクションを防ぐことができます)[MySQLi](http://php.net/)の[prepared](http://en.wikipedia.org/wiki/Prepared_statement) manual/en/mysqli.quickstart.prepared-statements.php)。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! –

答えて

0

ここにあなたの質問への答えがあります。

$.getJSONには、スクリプトに渡す情報オブジェクトの第2のオプションパラメータdataがあります。

function getNameFromServer() { 
    $.getJSON("appcon.php", { action: 'read' }, function (returnedData) { 
     $.each(returnedData, function (key, value) { 
      var id = value.pid; 
      var name = value.name; 
      $("#listview").append("<li>" + id + " - " + name) + "</li>"; 
     }); 
    });    
} 

編集:あなたが$.getJSON()を使用しているので、リクエストの方法は、あなたのPHPスクリプトであなたの第三if文で$_GETを使用する必要がありますを意味し、GETです。

if(isset($_GET['action']) && $_GET['action'] == 'read'){

+0

ありがとうございました。しかし、今私はパーサーエラー:json入力の予期しない終了を取得します。 – Hraaig

+0

これは通常、有効なJSON文字列を返送していないことを意味します。ブラウザの開発者ツールでネットワークタブを開き、XHRを確認し、応答を確認します。 JSON文字列を取得した場合は、[validator](http://jsonlint.com/)を使用して問題がどこにあるかを確認してください。私の編集で説明したように、3番目の 'if'ステートメントを入力しないので、JSON文字列をまったく返信しないかもしれません。 – Mikey

関連する問題