[求救] ajax傳值去php 再使用 foreach insert進SQL 問題

想請教我在ajax傳值進php

在使用foreach insert進sql 卻進不了sql

我有測試過不使用foreach 直接在php下 sql 是可行的 代表ajax有成功傳值過去php裡

但我在使用foreach時 就會失敗

所以我在想是不是我在ajax與foreach上哪邊少做了什麼動作了?

請求幫忙 以下是code


script部份
    var summaryData = $("#addcontent").jqxGrid('getcolumnaggregateddata', 'total', ['sum']);
    var totalamount = "&total_deductions=" + summaryData.sum;
    var rows = $('#addcontent').jqxGrid('getrows');
    var result = "";
    for(var i = 0; i < rows.length; i++)
    {
        var row = rows[i];
       result += "&name=" + row.id  + "&quantity=" + row.quantity + "&purchase_price=" + row.price + "&total=" + row.total + "\n";        
    }
    $.ajax({
        url:"edit.php",  
        data: 'id='+select.id + '&total_balance='+select.total_amount + totalamount + result,    
        type: "POST",   

              success: function(msg){
                    alert("成功");
                },
                 error:function(xhr, ajaxOptions, thrownError){ 
                    alert("錯誤"); 
                 }
        });


php部份
<?php
  require_once("dbtools.inc.php");
  
 
  //入商品
  $product_id = $_POST['name'];
  $quantity = $_POST['quantity'];
  $purchase_price = $_POST['purchase_price'];
  $total= $_POST['total'];

 
  //建立資料連接
  $link = create_connection();

    //釋放 $result 佔用的記憶體	
    mysql_free_result($result);
		
    //執行 SQL 命令,新增此帳號
 

    foreach($product_id as $v){
    $sql = "INSERT INTO pre_item ( product_id  ) VALUES ( '$v' )";
    $result = execute_sql("pos", $sql, $link);
    }
	
  
	
  //關閉資料連接	
 mysql_close($link);
   
?>

評論

  • success: function->
    console.log(msg);

    error:function->
    console.log(xhr.status);
    console.log(thrownError);
    可以看錯誤
  • i7807大
    不好意思 這麼晚我才回你
    我使用了你的方法
    他出現的錯誤是 Invalid argument supplied for foreach()
    似乎是我foreach 裡面接到參數不對?
  • 早安
    $product_id = $_POST;
    $product_id 你要不要 echo 出來看看 值有沒有帶到
    而且 就算有 $product_id 這個也不是個 array 不能用 foreach阿~
  • clouding大
    我有 print_r($product_id);出來
    值只會帶到最後一個而已 所以永遠只帶一個
    想請問我該怎麼讓他變成array
  • 請問我這是看到的post出去的參數 是有其它部份
    但print_r($product_id);出來只有最後一個 就是18
    似乎沒辦法變array過去

    參數application/x-www-form-urlencoded不排序
    id 68
    name 25
    name 24
    name 18
    purchase_price 15
    purchase_price 199
    purchase_price 10
    quantity 1
    quantity 1
    quantity 1
    total 15
    total 199
    total 10
    total_balance null
    total_deductions 224
    原始碼
    id=68&total_balance=null&total_deductions=224&name=25&quantity=1&purchase_price=15&total=15&name=24&quantity=1&purchase_price=199&total=199&name=18&quantity=1&purchase_price=10&total=10
  • edited 一月 2015
    早安
    因為post出去的參數 不能是一樣
    所以它只會取最後那邊的值
    要馬就&name1="xxx" &name2="xxx"
    或者先post字串出去
    再把字串轉為array
    類似
    var summaryData = $("#addcontent").jqxGrid('getcolumnaggregateddata', 'total', ['sum']);
      var totalamount = "&total_deductions=" + summaryData.sum;
      var rows = $('#addcontent').jqxGrid('getrows');
      var name = "";
      
      for(var i = 0; i < rows.length; i++){
      	var row = rows[i];
      	name += row.id + ",";
      }
      $.ajax({
        url:"edit.php",  
        data: 'id='+select.id + '&total_balance='+select.total_amount + totalamount + '&name=' + name,    
        type: "POST",   
        success: function(msg){
              alert("成功");
          },
         error:function(xhr, ajaxOptions, thrownError){ 
            alert("錯誤"); 
         }
      });
    
    <?php
      require_once("dbtools.inc.php");
      //入商品
      $name = $_POST['name'];		//x1,x2,x3,
      $name = substr($name,0,-1);	       // x1,x2,x3
      $product_id = explode(',',$name); //turn array $product_id [0]=x1 $product_id [1]=x2
    	
      //建立資料連接
      $link = create_connection();
      //釋放 $result 佔用的記憶體	
      mysql_free_result($result);
      //執行 SQL 命令,新增此帳號
      foreach($product_id as $v){
      	$sql = "INSERT INTO pre_item ( product_id  ) VALUES ( '$v' )";
     		$result = execute_sql("pos", $sql, $link);
      }
      //關閉資料連接	
     mysql_close($link);
    ?>
    

    其它3個以此類推


  • clouding大
    謝謝你!!
    但是想請問 我還有問題想請教
    其它三個以此類推之後
    foreach 我要怎麼 去複數增加他?
    我剛使用這方法不對
     $quantity = $_POST['quantity'];   
     $quantity = substr($quantity,0,-1);       
     $quantity = explode(',',$quantity); 
    
     foreach($product_id as $v){
        $sql = "INSERT INTO pre_item ( product_id , quantity ) VALUES ( '$v' , '$quantity' )";
        $result = execute_sql("pos", $sql, $link);
        }
    
  • to Inverse :問題不在 php 而是在 html。
    想辦法讓前端 html 或 javascript 製造陣列資料傳送到後端伺服器給 php 。

    純 html 的作法類似
    <input type="text" name="product[]" id="product_1" value="">
    <input type="text" name="product[]" id="product_2" value="">
    

    那個 name 不是打錯,就是要名稱一模一樣,重點在後面的 [] ,送出後 php 收到的
    $_POST 就是個 array ,只要不為空就能用 foreach 循環讀值。

    用 javascript 也差不多這樣,想辦法寫出 product[1]=xxx&product[2]=yyyy 送到 php 也能成為 array。

    或是 javascript 使用 json post 到 php ,json_decode 也能成為陣列(參數設 true)或使用物件也行。
  • niotw大 謝謝
    我大概能理解問題出在javascript

    然後我有參考clouding大 提供的方式去處理 成功可以執行
    但是又遇到個問題想請教說
      $name = $_POST['name'];		
      $name = substr($name,0,-1);	       
      $product_id = explode(',',$name);
    
     $quantity = $_POST['quantity'];   
     $quantity = substr($quantity,0,-1);       
     $quantity = explode(',',$quantity); 
      //建立資料連接
      $link = create_connection();
      //釋放 $result 佔用的記憶體	
      mysql_free_result($result);
      //執行 SQL 命令,新增此帳號
     foreach($product_id as $v){
        $sql = \"INSERT INTO pre_item ( product_id , quantity ) VALUES ( '$v' , '$quantity' )\";
        $result = execute_sql(\"pos\", $sql, $link);
        }
    

    當要使用多個陣列下去foreach時,但我只要全執行在一行$sql裡的話 我該怎麼處理會比較好
    像我上面的就似乎是個不行的答案
     foreach($product_id as $v){
        $sql = \"INSERT INTO pre_item ( product_id , quantity ) VALUES ( '$v' , '$quantity' )\";
        $result = execute_sql(\"pos\", $sql, $link);
        }
    

  • 早安
    感謝 niotw 大
    他的方法比較好
    我的處理方式 感覺會亂很多
    大概是這樣
    應該也可以變成二維陣列去處理
    code會乾淨很多
    var summaryData = $("#addcontent").jqxGrid('getcolumnaggregateddata', 'total', ['sum']);
        var totalamount = "&total_deductions=" + summaryData.sum;
        var rows = $('#addcontent').jqxGrid('getrows');
        var result = "";
        for(var i = 0; i < rows.length; i++)
        {
            var row = rows[i];
           result += "&data["+i+"][name]=" + row.id  + "&data["+i+"][quantity]=" + row.quantity + "&data["+i+"][purchase_price]=" + row.price + "&data["+i+"][total]=" + row.total + "\n";        
        }
        $.ajax({
            url:"edit.php",  
            data: 'id='+select.id + '&total_balance='+select.total_amount + totalamount + result,    
            type: "POST",   
    
                  success: function(msg){
                        alert("成功");
                    },
                     error:function(xhr, ajaxOptions, thrownError){ 
                        alert("錯誤"); 
                     }
            });
    
    <?php
      require_once("dbtools.inc.php");
      
     
      //入商品
      $data = $_POST["data"];
     
      //建立資料連接
      $link = create_connection();
    
        //釋放 $result 佔用的記憶體	
        mysql_free_result($result);
    		
        //執行 SQL 命令,新增此帳號
     
    
        foreach($data as $v){
        	$sql = "INSERT INTO pre_item ( product_id , quantity ) VALUES ( '$v[name]' , '$v[quantity]' )";
        	$result = execute_sql("pos", $sql, $link);
        }
    	
      
    	
      //關閉資料連接	
     mysql_close($link);
       
    ?>
    
  • clouding大 ! 謝謝你!
    我會試著去了解這些邏輯,真的對我幫助很大
    很感謝你們!!
Sign In or Register to comment.