Удалите строки локальной базы данных, поскольку каждая передана в размещенную базу данных - PullRequest
0 голосов
/ 19 мая 2011

EDIT - передача произошла

.. теперь мне нужно выяснить, как получить успешные переводы для удаления каждой строки после ее сохранения на хосте.Функция, которая извлекает данные из базы данных SQL браузера:

function grabLocal(){
  db.transaction(function(tx) {
    tx.executeSql('SELECT * FROM entries', [], function(tx, results){ 
        var len = results.rows.length, i;
        for (i = 0; i < len; i++) {

        var qID = (results.rows.item(i).ID);
        var qEmail = (results.rows.item(i).email);
        var qPhone = (results.rows.item(i).phone);
        var qMonth = (results.rows.item(i).birth_month);
        var qDay = (results.rows.item(i).birth_day);
        var qYear = (results.rows.item(i).birth_year);
        var qMonth = (results.rows.item(i).birth_month);
        var qGender = (results.rows.item(i).gender);
        var qContest = (results.rows.item(i).contest);
        var qStore = (results.rows.item(i).storeNo);
        var qDate = (results.rows.item(i).added_on);
        var  localData = new Array((qEmail),(qPhone),(qMonth),(qDay),(qYear),(qGender),(qContest),(qStore),(qDate));

        $.ajax({
            type: "POST",
            url: "sendIt.php",
            data: "email=" + qEmail + "&phone=" + qPhone + "&month=" + qMonth + "&day=" + qDay + "&year=" + qYear + "&gender=" + qGender + "&contest=" + qContest + "&store=" + qStore + "&date=" + qDate,
            success: function(){
                // delete each row as passed to host
                db.transaction(function(tx)
                {
                    tx.executeSql('DELETE FROM entries WHERE ID = ?', [qID]);
                });

            //  alert ("Success");
            }
        });

  }
    });
  });
}

, php прост:

<?php
$link = mysql_connect('host', 'user', 'password');
if (!$link) {
    die('Could not connect: ' .mysql_error());
}
echo 'Connected successfully';
$email  = htmlspecialchars(trim($_POST['email']));  
$phone  = htmlspecialchars(trim($_POST['phone']));  
$month  = htmlspecialchars(trim($_POST['month']));  
$day  = htmlspecialchars(trim($_POST['day']));  
$year  = htmlspecialchars(trim($_POST['year']));  
$gender  = htmlspecialchars(trim($_POST['gender']));  
$contest  = htmlspecialchars(trim($_POST['contest']));  
$store  = htmlspecialchars(trim($_POST['store']));  
$datestamp  = htmlspecialchars(trim($_POST['date']));  
mysql_select_db("sandbox_info") or die (mysql_error());
mysql_query("INSERT INTO `infoData` (email, phone, birth_month, birth_day, birth_year, gender, storeNo, contest, added_on) VALUES ('$email','$phone','$month','$day','$year','$gender','$store','$contest','$datestamp')");
echo 'Data uploaded';
mysql_close($link);
?>

Может кто-нибудь помочь объяснить, что не так с транзакцией удаления?Он удаляет одну строку каждый раз, когда я запускаю процесс, но я бы хотел удалить их все.Я думаю, я мог бы отбросить всю таблицу, но я бы предпочел, чтобы она выполняла проверку после каждой передачи на удаленный хост, а затем удаляла локальные данные.Буду также признателен за любые советы по улучшению этого кода в целом.Заранее благодарен за любой совет!

ОТКРОВЕНИЕ

ОК, я повторил qID в случае успеха и обнаружил, что, удаляя каждую строку, он затем дает новый идентификатор для следующего доступногогрести и продолжает повторять один и тот же идентификатор снова и снова.Итак ... Я знаю проблему, но мне все еще нужна помощь, чтобы найти исправление.

Ответы [ 2 ]

1 голос
/ 19 мая 2011

Вы, кажется, описали это достаточно хорошо: если у вас уже есть поддержка HTTP POST в вашем приложении (с использованием java.net.URL или HttpClient) и сценарий PHP, который работает на сервере, вам необходимо:

  1. Определите, когда кто-то в сети (посмотрите на его IP-адрес или попробуйте подключиться к вашему серверу).
  2. Создайте список всех несохраненных транзакций: у вас есть базовый код для этого выше, возможно, вам нужен какой-то флаг.
  3. Для каждой строки сгенерируйте POST на сервере: если POST завершается успешно (возвращает код успеха 200), то удаляет строку из локальной базы данных (или помечает ее как синхронизированную каким-либо другим способом).

Это должно сделать это?

0 голосов
/ 19 мая 2011

Я не на 100% уверен в том, что вы пытаетесь сделать, но ...

Вы могли бы с одной стороны сгенерировать список операторов INSERT из данных, которые будут выполняться на другой стороне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...