2014-09-19 32 views
-1

我試圖用新的條目更新一盤菜,並交叉引用它到現有的成分表。對於添加的每道菜,用戶都需要分配現有配料和多條生產線所需的體積。提交時,應將盤子輸入「盤子」表格中,並將所分配的成分輸入到「DishIng」鏈接表格中。MySQL的PHP​​數組插入,多個表,不工作

我的表是這樣設置:

表: 「菜」 欄目:DishID,DishName,供應,等等 表: 「祭出」 列:DishID,IngID,卷 表:「成分「列:IngID,IngName,Packsize等等

HTML:

  • DishID:
  • 名稱:
  • 產品類別:
  • 刊登:
  • SRP:
  • 方法:
  • 來源:

  • IngID:
  • 體積:
  • <li>IngID: <input type="text" name="IngID"></li> 
    <li>Volume: <input type="text" name="Volume"></li> 
    
    <li>IngID: <input type="text" name="IngID"></li> 
    <li>Volume: <input type="text" name="Volume"></li> 
    
    </ul> 
    <input type="submit"> 
    </form> 
    

    在HTML dymanically添加成分的一排任何建議會非常受歡迎。

    PHP:

    <?php 
    
    require_once('db_connect.php'); 
    
    $DishID = mysqli_real_escape_string($con, $_POST['DishID']); 
    $DishName = mysqli_real_escape_string($con, $_POST['DishName']); 
    $DishCatID = mysqli_real_escape_string($con, $_POST['DishCatID']); 
    $Serving = mysqli_real_escape_string($con, $_POST['Serving']); 
    $SRP = mysqli_real_escape_string($con, $_POST['SRP']); 
    $Method = mysqli_real_escape_string($con, $_POST['Method']); 
    $SourceID = mysqli_real_escape_string($con, $_POST['SourceID']); 
    $IngID = mysqli_real_escape_string($con, $_POST['IngID']); 
    $Volume = mysqli_real_escape_string($con, $_POST['Volume']); 
    
    $array = array('$DishID', '$IngID', '$Volume'); 
    
    
    $sql="INSERT INTO Dishes (DishID, DishName, DishCatID, Serving, SRP, Method, SourceID) 
    VALUES ('$DishID', '$DishName', '$DishCatID', '$Serving', '$SRP', '$Method', '$SourceID')"; 
    
    $sql2 = "INSERT INTO DishIng (DishID, IngID, Volume) VALUES ('$DishID', '$IngID', '$Volume')"; 
    
    $it = new ArrayIterator ($array); 
    
    $cit = new CachingIterator ($it); 
    
    foreach ($cit as $value) 
    { 
        $sql2 .= "('".$cit->key()."','" .$cit->current()."')"; 
    
        if($cit->hasNext()) 
        { 
         $sql2 .= ","; 
        } 
    } 
    
    if (!mysqli_query($con,$sql)) { 
        die('Error: ' . mysqli_error($con)); 
    } 
    echo "1 record added"; 
    
    
    if (!mysqli_query($con,$sql2)) { 
        die('Error: ' . mysqli_error($con)); 
    } 
    echo "records added"; 
    
    
    require_once('db_disconnect.php'); 
    php?> 
    

    目前上提交,它僅更新「菜」表,並給了我這個消息:「1個紀錄addedError:您在您的SQL語法錯誤; ('0','$ DishID'),('1','$ IngID'),('2','$ Volume')附近使用正確的語法檢查與您的MySQL服務器版本相對應的手冊。 「第1行」

    +0

    原始問題已被編輯。 – nbren007 2014-09-23 07:26:05

    回答

    1

    你如何做到這一點的高級別(雖然有很多方法,這僅僅是一個直DB/PHP/HTML):

    1. 你的PHP將創建一個窗體從用戶輸入盤菜字段。然後
    2. 你的PHP將會把所有的成分在成分表中那道菜
    3. 你的PHP將通過從該查詢返回的結果,併爲每個結果迭代都會:
    4. 的成分創建一個複選框類型的輸入和
    5. 爲配料和創建文本字段類型輸入。
    6. 與IngID

    創建一個隱藏字段一旦用戶提交表單:

    1. 你的PHP將插入到根據提交的表單上的菜田菜表。
    2. 你的php將遍歷表單提交中的成分字段,並且每個將會:
    3. 確定是否檢查了成分複選框。如果是它會:
    4. 插入使用隱藏IngID場碟形表和音量場

    從本質上講,有兩個FOR循環。一個循環遍歷原始的成分列表以創建表單,另一個循環遍歷提交的表單。帶有複選標記的每種成分都需要將其自己的SQL INSERT語句添加到DishIng表中。

    如何通過PHP SQL結果迭代:Iterate through Mysql Rows in PHP

    如何通過PHP表單域迭代:PHP loop through array of HTML textboxes

    因爲你正在服用的用戶輸入,並將其貼到MySQL插入查詢,你」我也希望確保在提交查詢之前對輸入進行清理,這樣可以避免一些惡意行爲者拉扯SQL注入並殺死您的數據庫。

    最後:這是一個非常模糊的問題,所以我預計它會被低估,我的迴應也很模糊。我只寫了它,因爲它觸及了一個非常普遍的整體想法,如果您剛開始使用Web開發,很難以簡潔的方式提問。寫這個的時候你可能會陷入很多次。嘗試縮小你的問題到一個單一的問題,並把這個問題/問題stackoverflow。您也可以點擊Google,因爲您需要在這裏完成的所有事情都是由其他人在論壇,博客,維基和Q &網站上撰寫的。