2016-05-24 3 views
0

Я пытаюсь изучить JavaScript для кода для Кордовы. Я читал много учебников, но ни один из них не помог мне с этой проблемой.Связь между JavaScript, PHP и MySQL

Мое приложение cordova для тестирования очень простое. Просто текстовое поле и две кнопки. Обе кнопки вызывают PHP-скрипт на моем сервере. Одна кнопка отправляет данные в скрипт PHP для вставки значения текстового поля в базу данных MySQL, вторая кнопка вызывает тот же скрипт и должна записывать значения базы данных в мое приложение cordova.

Вот мой

<?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 функции в приложении Cordova:

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. Funtion sendNameToServer работает в том, что что данные будут вставлены в мою базу данных. Но я никогда не получаю предупреждение (успех: никогда не назывался).

  2. Как передать "action = read" скрипту PHP в функции getNameFromServer()?

Третий вопрос немного не по теме, но это искусство кода «сохранить» или это просто манипулировать данными между приложением Cordova и сервером? Каков лучший способ или как я могу зашифровать передачу?

+4

[Маленький Бобби] ​​(http://bobby-tables.com/) говорит [ваш сценарий риска для SQL Injection атак.] (Http://stackoverflow.com/questions/60174/ how-can-i-prevent-sql-injection-in-php) Узнайте о запросах [подготовленных] (http://en.wikipedia.org/wiki/Prepared_statement) для [MySQLi] (http://php.net/ ручной/EN/mysqli.quickstart.prepared-statements.php). Даже [избегая строки] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) небезопасно! –

ответ

0

Вот часть ответа на ваш вопрос.

$.getJSON имеет второй необязательный параметр 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>"; 
     }); 
    });    
} 

Edit: Поскольку вы используете $.getJSON(), метод запроса является GET, что означает, что вы должны использовать $_GET в своем третьем if заявлении в вашем PHP скрипт.

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

+0

большое спасибо. но теперь я получаю ошибку парсера: неожиданный конец ввода json. – Hraaig

+0

Это обычно означает, что вы не отправляете действительную строку JSON. Откройте вкладку вашей сети в инструменте разработчика вашего браузера, посмотрите в XHR и проверьте ответ. Если вы вернете строку JSON, поместите ее через [validator] (http://jsonlint.com/), чтобы узнать, где проблема. Возможно, вы не отправляете обратно строку JSON, поскольку вы не входите в третий оператор 'if', как описано в моем редактировании. – Mikey

Смежные вопросы