2016-07-29 1 views
0

Je veux insérer des données qui est est envoyé avec javascript (application cordova) Je vous envoie ce iciinsert de requête d'insertion SQL plusieurs fois et ne mettez pas à

var link = 'somelink'; 
     var stmt = "SELECT * FROM card WHERE Productsync = 0 "; 
     //console.log(stmt); 
     $cordovaSQLite.execute(db, stmt).then(function(res) { //console.log(res) 
      if(res.rows.length > 0) { 
       for (var i = 0; i < res.rows.length; i++){ 
        console.log(res.rows.item(i)); 
        console.log(res.rows.item(i).ProductName); 
        console.log(res.rows.item(i).ProductBarcode); 
        console.log(res.rows.item(i).ProductPakking); 
        console.log(res.rows.item(i).ProductPresent); 
        console.log(res.rows.item(i).ProductMinimuim); 
        console.log(res.rows.item(i).FotoUrl); 
        console.log(res.rows.item(i).DBid); 





        $http.post(link, {ProductName : res.rows.item(i).ProductName , ProductBarcode : res.rows.item(i).ProductBarcode , ProductPakking : res.rows.item(i).ProductPakking , ProductPresent : res.rows.item(i).ProductPresent , ProductMinimuim : res.rows.item(i).ProductMinimuim , FotoUrl : res.rows.item(i).FotoUrl , DBid : res.rows.item(i).DBid}).then(function (res){//sending data 
         console.log(res.data);//respone of server 
         var data = res.data; 
         for (var key in data) {//read out respone 
          if (data.hasOwnProperty(key)) { 
           var obj = data[key]; 
           console.log(obj); 
           //have to make this 
          } 
         } 

        }); 
       } 

      } 

     }); 

Maintenant, je veux ajouter dans mes bases de données en ligne (variables BIND-je faire plus tard) Voici comment mon script php ressemble

$postdata = file_get_contents("php://input"); 
if (isset($postdata)) { 
    $request = json_decode($postdata); 

    $ProductName = $request->ProductName; 
    $ProductBarcode = $request->ProductBarcode; 
    $ProductPakking = $request->ProductPakking; 
    $ProductPresent = $request->ProductPresent; 
    $ProductMinimuim = $request->ProductMinimuim; 
    $FotoUrl = $request->FotoUrl; 
    $DBid = $request->DBid; 



    $ProductName = mysqli_real_escape_string($connection,$ProductName); 
    $ProductBarcode = mysqli_real_escape_string($connection,$ProductBarcode); 
    $ProductPakking = mysqli_real_escape_string($connection,$ProductPakking); 
    $ProductPresent = mysqli_real_escape_string($connection,$ProductPresent); 
    $ProductMinimuim = mysqli_real_escape_string($connection,$ProductMinimuim); 
    $FotoUrl = mysqli_real_escape_string($connection,$FotoUrl); 
    $DBid = mysqli_real_escape_string($connection,$DBid); 
    $query ="REPLACE into `card` (ProductName,ProductBarcode,ProductPakking,ProductPresent,ProductMinimuim,FotoUrl,DBid) 
     VALUES('" . $ProductName . "' , 
       '" . $ProductBarcode . "' , 
       '" . $ProductPakking . "' , 
       '" . $ProductPresent . "' , 
       '" . $ProductMinimuim . "' , 
       '" . $FotoUrl . "' , 
       '" . $DBid ."')"; 

Quand je fais écho ProductName $ avant que la requête en php, je ne vois que les productsnames (ce que je veux)

Mon problème em est: il ne remplace pas la valeur s'il existe déjà, et il insère plusieurs fois, il doit insérer une seule fois et remplacer ou mettre à jour si la colonne existe déjà.

Quelqu'un peut-il aider mon?

MISE À JOUR QUERY EN PHP

  $query ="SELECT ProductName FROM `card` WHERE 
       `ProductName` = '" . $ProductName . "' AND 
       `ProductBarcode` = '" . $ProductBarcode . "' AND 
       `ProductPakking` = '" . $ProductPakking . "' AND 
       `ProductPresent` = '" . $ProductPresent . "' AND 
       `ProductMinimuim` = '" . $ProductMinimuim . "' AND 
       `FotoUrl` = '" . $FotoUrl . "' AND 
       `DBid` = '" . $DBid ."'"; 
     $result_set = mysqli_query($connection,$query); 
     if (mysqli_num_rows($result_set) == 0){ 
      $query ="INSERT INTO `card` (ProductName,ProductBarcode,ProductPakking,ProductPresent,ProductMinimuim,FotoUrl,DBid) 
      VALUES('" . $ProductName . "' , 
        '" . $ProductBarcode . "' , 
        '" . $ProductPakking . "' , 
        '" . $ProductPresent . "' , 
        '" . $ProductMinimuim . "' , 
        '" . $FotoUrl . "' , 
        '" . $DBid ."')"; 
      $result = mysqli_query($connection,$query); 

     }else{ 

      $query = "UPDATE `card` 
      SET `ProductName` = '" . $ProductName . "' , 
       `ProductBarcode` = '" . $ProductBarcode . "' , 
       `ProductPakking` = '" . $ProductPakking . "' , 
       `ProductPresent` = '" . $ProductPresent . "' , 
       `ProductMinimuim` = '" . $ProductMinimuim . "' , 
       `FotoUrl` = '" . $FotoUrl . "' , 
       `DBid` = '" . $DBid ."' 
      WHERE `ProductBarcode` = '" . $ProductBarcode . "' AND `DBid` = '" . $DBid ."'"; 

      $fines = mysqli_query($connection,$query); 


     } 
+1

Si je me trompe, 'userID' est la clé primaire de la table' card', et vous ne passez pas 'userID' à la requête' REPLACE'. – antorqs

+0

désolé, mon mauvais, j'ai encore travaillé sur le respone, il s'agit juste des bases de données en ligne ... –

Répondre

0

Notez que cette approche (ou REPLACE INTO approche ou même l'approche KEY Duplicate) être Successfull vous devez avoir un index unique sur les champs vous ne voulez pas dupliqué.

De docs États

remplaçons n'a de sens que si une table a une clé primaire ou un index unique. Sinon, il devient équivalent à INSERT, car il n'y a pas d'index à utiliser pour déterminer si une nouvelle ligne en duplique une autre.

+0

alors REMPLACER est dans ce cas pas une option, Qu'est-ce que vous êtes des conseils pour ce cas. Je dois insérer s'il n'existe pas et mettre à jour s'il existe –

+0

Avant de faire une insertion, sélectionnez la ligne avec toutes les valeurs à insérer. Et si vous sélectionnez la ligne de retour, vous la mettrez à jour sinon insérez-la. – Tamil

+0

J'ai fait une requête. Mais cela ne semble pas fonctionner. La requête est-elle correcte ou existe-t-il un autre problème, la mise à jour est dans la question –

0

semble que vous avez un problème avec les lignes ci-dessous

console.log(res.data);//respone of server 
var data = res.data; 
for (var key in data) { 

cette boucle a un problème parce que si elle JSON alors itérer sur tous une clé par un et insérer plusieurs des clés d'enregistrement des clés injson * nombre de réponse de temps

s'il vous plaît fournir res.data journaux et vérifiez également ce que vous obtenez dans la clé et combien de temps vous bouclez autour de cette boucle.

+0

ooo oui mais c'est le respone, je le ferai plus tard. mon problème est maintenant l'insertion. Quand je travaille sur les données de respone, je vais réfléchir à ce que vous avez dit et trouver aller trouver une solution –