2017-11-25 57 views
1

我試圖使用Ajax將數據傳遞給PHP文件,然後保存到MySQL數據庫。由於某些原因,它不起作用。我用HTML表單傳遞數據測試了PHP代碼,並且它正在工作。當使用Ajax時,點擊提交按鈕後會發生錯誤。我認爲問題出在Ajax數據參數中。使用Ajax將數據傳遞給PHP文件

下面是代碼:

HTML

<body> 
<div class="container"> 
    <form class="search" action="" method=""> 
    <div class="form-group"> 
     <div class="input-group input-group-lg"> 
     <span class="input-group-addon"><i class="fa fa-search" aria-hidden="true"></i></span> 
     <input type="text" class="form-control form-control-lg" id="trazi" name="trazi" placeholder="Pretražite artikle - upišite naziv, barkod ili šifru artikla"> 
     </div> 
    </div> 
    </form> 
    <form class="articles" id="novi_artikl" action="" method=""> 
     <div class="form-group row"> 
     <label for="sifra" class="col-sm-4 col-form-label col-form-label-lg">Šifra artikla</label> 
     <div class="col-sm-8"> 
      <input type="text" class="form-control form-control-lg" id="sifra" name="sifra" placeholder="Upišite šifru"> 
     </div> 
     </div> 
     <div class="form-group row"> 
     <label for="barkod" class="col-sm-4 col-form-label col-form-label-lg">Barkod artikla</label> 
     <div class="col-sm-8"> 
      <input type="text" class="form-control form-control-lg" id="barkod" name="barkod" placeholder="Upišite barkod"> 
     </div> 
     </div> 
     <div class="form-group row"> 
     <label for="naziv" class="col-sm-4 col-form-label col-form-label-lg">Naziv artikla</label> 
     <div class="col-sm-8"> 
      <input type="text" class="form-control form-control-lg" id="naziv" name="naziv" placeholder="Upišite naziv artikla" required> 
     </div> 
     </div> 
     <div class="form-group row"> 
     <label for="mjera" class="col-sm-4 col-form-label col-form-label-lg">Jedinična mjera</label> 
     <div class="col-sm-8"> 
      <input type="text" class="form-control form-control-lg" id="mjera" name="mjera" placeholder="Upišite mjeru" required> 
     </div> 
     </div> 
     <div class="form-group row"> 
     <label for="cijena" class="col-sm-4 col-form-label col-form-label-lg">Cijena artikla</label> 
     <div class="col-sm-8"> 
      <div class="input-group input-group-lg"> 
      <input type="text" class="form-control form-control-lg text-right" id="cijena" name="cijena" placeholder="Upišite cijenu" required> 
      <span class="input-group-addon">KM</span> 
      </div> 
     </div> 
     </div> 
     <div class="form-group row"> 
     <label for="kolicina" class="col-sm-4 col-form-label col-form-label-lg">Količina artikla</label> 
     <div class="col-sm-8"> 
      <input type="text" class="form-control form-control-lg text-right" id="kolicina" name="kolicina" placeholder="Upišite količinu" required> 
     </div> 
     </div> 
     <div class="form-group row"> 
     <label for="ukupno" class="col-sm-4 col-form-label col-form-label-lg">Ukupna vrijednost artikla</label> 
     <div class="col-sm-8"> 
      <div class="input-group input-group-lg"> 
      <input type="text" class="form-control form-control-lg text-right" id="ukupno" name="ukupno" placeholder="Ukupna vrijednost" required> 
      <span class="input-group-addon">KM</span> 
      </div> 
     </div> 
     </div> 

    <br> 
    <div class="float-right"> 
     <button type="submit" class="btn btn-primary btn-lg" id="spremi" name="spremi">Spremi</button>&nbsp; 
     <button type="submit" class="btn btn-primary btn-lg" id="ponisti" name="ponisti">Poništi</button> 
    </div> 
    </form><!-- Content here --> 
</div> 
<script src="https://code.jquery.com/jquery-3.2.1.js" integrity="sha256-DZAnKJ/6XZ9si04Hgrsxu/8s717jcIzLy3oi35EouyE=" crossorigin="anonymous"></script> 
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js" integrity="sha256-T0Vest3yCU7pafRw9r+settMBX6JkKN06dqBnpQ8d30=" crossorigin="anonymous"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script> 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script> 
<script src="https://use.fontawesome.com/38d56b17e3.js"></script> 
<script src="script.js" type="text/javascript"></script> 

的JavaScript

$('#spremi').click(function(){ 
var sifra = $('#sifra').val(); 
var barkod = $('#barkod').val(); 
var naziv = $('#naziv').val(); 
var mjera = $('#mjera').val(); 
var cijena = $('#cijena').val(); 
var kolicina = $('#kolicina').val(); 
var ukupno = $('#ukupno').val(); 

$.ajax({ 
    type: 'POST', 
    url: 'insert.php', 
    contentType: "application/json; charset=utf-8", 
    dataType:'json', 
    data: ({sifra: sifra}, {barkod: barkod}, {naziv: naziv}, {mjera: mjera}, {cijena: cijena}, {kolicina: kolicina}, {ukupno: ukupno}), 
    success: function(response){ 

    alert(response); 
    } 
}); 
}); 

PHP代碼

<?php 
include("connection.php"); 

if ($_POST["sifra"]) { 
$sifra = $_POST["sifra"]; 
$barkod = $_POST["barkod"]; 
$naziv = $_POST["naziv"]; 
$mjera = $_POST["mjera"]; 
$cijena = $_POST["cijena"]; 
$kolicina = $_POST["kolicina"]; 
$ukupno = $_POST["ukupno"]; 

$query = "INSERT INTO lista (sifra, barkod, naziv, mjera, cijena, kolicina, ukupno) VALUES ('$sifra', '$barkod', '$naziv', '$mjera', '$cijena', '$kolicina', '$ukupno')"; 

$results = mysqli_query($dbc, $query); 

if($results){ 
    echo "Artikl je uspješno spremljen."; 
} 
else { 
    echo "Artikl nije spremljen. Došlo je do pogreške."; 
} 
} 
mysqli_close($dbc); 
?> 
+1

使用'數據:{sifra:sifra,barkod:barkod,naziv:naziv,mjera:mjera,範圍:cijena,kolicina:kolicina,ukupno:ukupno}'代替。即通過一個單一的對象,而不是一堆對象... – davidkonrad

+0

什麼是你的文件結構?即HTML表單文件和處理器文件的位置和名稱?另外,瀏覽器控制檯的輸出是什麼?它是否釋放任何錯誤? – SaidbakR

回答

1

問題的原因是您正在使用type: 'POST'的事實。引述docs

傳遞給經由 HTTP POST方法當前腳本變量的數組使用應用程序/ x-WWW窗體-urlencoded或 的multipart/form-data的作爲當HTTP的Content輸入請求。

POST是一個比較「老土」的方法,通常你會張貼<form>其中內容自動爲系列化,即urlencoded的,但你嘗試在JSON格式的POST數據。你應該做的是要麼考慮你是否真的需要POST。如果將其更改爲GET(或者只是刪除type: 'POST')並通過$_GET訪問傳遞的數據,那麼它將工作(只要您更正了data)。

如果沒有,更改內容類型來表示傳入urlencoded的數據:

$.ajax({ 
    type: 'POST', 
    url: 'insert.php', 
    contentType: "application/x-www-form-urlencoded", 
    data: {sifra: sifra, barkod: barkod, naziv: naziv, mjera: mjera, cijena: cijena, kolicina: kolicina, ukupno: ukupno}, 
    success: function(response){ 
    alert(response); 
    } 
}); 

我敢肯定你的代碼將現在的工作,也就是$ _ POST作品和任何消息被正確接收爲純文本,你可以警報。

+0

謝謝。現在它正在工作。 :) – Josip

3

你應該提供的值的$.ajaxdata屬性作爲一個單一的對象不是他們的集合:

data: { 
    sifra: sifra, 
    barkod: barkod, 
    naziv: naziv, 
    mjera: mjera, 
    cijena: cijena, 
    kolicina: kolicina, 
    ukupno: ukupno 
}, 

而且,你注意你的PHP代碼是敞開的SQL注入攻擊是非常重要的攻擊。您應該更改邏輯以儘快使用準備好的語句。

+0

感謝您的回覆,但仍然無法正常工作。 – Josip

+0

@Josip,究竟是不是工作?第三個問題是dataType:'json',但是你傳回純文本,這將無故提出AJAX錯誤,但問題是,數據是否插入到數據庫中? – davidkonrad

+0

不,數據沒有插入數據庫,這是問題所在。 – Josip