2016-04-01 21 views
0

PHP ile bir veritabanında bir değer kaydetmek istiyorum. AJAX ile bir PHP işlevi çağırıyorum. Bilgiyi PHP'de PHP ile saklayın - Ajax çağrısı JavaScript'ten

$(document).ready(function(){ 
    var data = 5; //gup('temperature', location.href); 
    if(data != undefined){ 
     var sendData = 'func=storeValue&value=' + data + '&datetime=' + getDateTime(); 
     $.ajax({ 
      data: sendData, 
      type: "POST", 
      url: "FunctionManager.php", 
      success: function(data){ 
       alert("Data Saved " + data); 
      }, 
      error: function(xhr){ 
       alert(xhr.responseText); 
      } 
     }) 
    } 
} 

Ben geçirilen parametrelerle belirlemek göre işlevi çağırmak için bir php dosyası "FunctionManager" kullanın: Web sitesi temperature adlı bir parametre ile belirtilmiş

Ben document.ready() kontrol et. Bu yüzden data ve datetime'u geçiyorum. Benim FunctionManager şöyle görünür:

<?php 
     include "$_SERVER[DOCUMENT_ROOT]/SQLCommunication.php"; 

     header('Content-Type: application/json'); 
     if(!isset($_GET['func']) && empty($_GET['func'])){ 
      exit(); 
     } 

     if($_POST['func'] === "readValue"){ 
      echo readValue(); 
     }elseif($_POST['func'] === "storeValue"){ 
      echo storeValue($_POST["value"], $_POST["datetime"]); 
     } 
    ?> 

Yani ben ilk denir fonksiyonu kontrol edin ve sonra parametreleriyle işlevini kendisi çağrı görebilirsiniz. Bunun işe yaradığını biliyorum çünkü veritabanımı bir parametreyle çağırdıktan sonra veritabanımda yeni bir satır var. Ancak datetime ve value alanları her zaman sıfırdır. Benim storeValue - fonksiyon SQLCommunication.php bulunan ve görünümü de şu:

function storeValue($val, $datetime){   
    $conn = establishConnection(); 
    if($conn->connect_error){ 
     die("Connection failed: ". $conn->connect_error); 
    } 

    //$datetime = date_default_timezone_get(); 
    //$datetime = '2016-01-04 00:18:00'; 

    $sql = "INSERT INTO tempvalues (datetime, value) VALUES ('$datetime', '$val')"; 
    $conn->query($sql); 
    $conn->close(); 
} 

budur i temperature parametresini okumak için kullandığınız fonksiyonu:

function gup(name, url) { 
    if (!url) url = location.href; 
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); 
    var regexS = "[\\?&]"+name+"=([^&#]*)"; 
    var regex = new RegExp(regexS); 
    var results = regex.exec(url).toString(); 
    return results == null ? null : results[1]; 
} 

i yapılan hata herhangi bir fikir var mı? Teşekkürler

+0

Veritabanınız datetime için veri tipiniz nedir? –

+0

Bu 'datetime' dir. Ve 'değer' datppay 'INT – binaryBigInt

+1

olduğunu inanıyorum ki bir jquery yazı yaptığınızda, herhangi bir get değişkenleri gönderemezsiniz .. – Garytje

cevap

1

JQuery kodu böyle olmalıdır. Tarayıcı konsolunuza bakarsanız, bazı hatalar görebilirsiniz. jQuery böyle olmalı:

var date = new Date(); 
var year = date.getFullYear(); 
var month = date.getMonth() + 1; 
var day = date.getDate(); 
var hours = date.getHours(); 
var minutes = date.getMinutes(); 
var seconds = date.getSeconds(); 

newdate = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds; 

$(document).ready(function(){ 
    var storeValue = 'storeValue'; 
    var data = gup('temperature', location.href);   
    if(data != undefined){ 
    yourData = 'func='+storeValue+'&value='+data+'&newdate='+newdate; 
     $.ajax({ 
      data: yourData, 
      type: "POST", 
      url: "FunctionManager.php, 
      success: function(data){ 
       alert("Data Saved " + data); 
      }, 
      error: function(xhr){ 
       alert(xhr.responseText); 
      } 
     }); 
    } 
}); 

print_r($_POST); 

    include "$_SERVER[DOCUMENT_ROOT]/SQLCommunication.php"; 

    header('Content-Type: application/json'); 
    if(!isset($_POST['func']) || empty($_POST['func'])){ 
     exit(); 
    }else{ 

$func = isset($_POST['func'])? $_POST['func']: 'storeValue'; 
$val = isset($_POST['value'])? $_POST['value']:''; 
$datetime = isset($_POST['newdate'])? $_POST['newdate']:''; 

if($func == 'readValue'){ 
     echo readValue(); 
}elseif($func == 'storeValue'){ 
     echo storeValue($val, $datetime); 
} 
} 

Functionmanager.php

yılında tarih alanında Tablonuzdaki, datetime olarak ayarlanmış veri türü. Umarım bu yardımcı olabilir.

+0

Çalışmıyor. Veritabanımda artık hiçbir şey yok. Kodumu güncelledim. – binaryBigInt

+0

Konsolunuzu kontrol ettiniz. –

+0

Hiçbir şey söylemiyor. Ben sadece 'func 'tanımlanmamış bir php hatası alıyorum ama bu yaygın bir php uyarısıdır. Garip olan şey şu ki, $ _POST '$ _GET'nın' $ _POST'da bu uyarıları alamıyorum ve ayrıca veritabanından en son değeri veren 'getData' fonksiyonunu tekrar çalıştırıyorum. Bu yüzden, '$ _POST' – binaryBigInt

İlgili konular