2014-05-06 43 views
2

所以我在表格(技能和技能等級)內有6個場對。這在代碼僅僅是以下重複6次分別爲:如何從多個場地對抓取數據

[skill] => Array 
    (
     [0] => CSS3 
     [1] => HTML5 
     [2] => jQuery 
     [3] => 
     [4] => 
     [5] => 
    ) 

[skill-rating] => Array 
    (
     [0] => 4 
     [1] => 2 
     [2] => 4 
     [3] => 0 
     [4] => 0 
    ) 

我想知道的是如何將這些數據轉化爲:

<input type="text" name="skill[]" value="" class="field-1-2 float-left" placeholder="Skill"> 
<div class="select-container field-1-2 float-right"> 
<select name="skill-rating[]"> 
    <option value="">Skill rating</option> 
    <option value="1">1 (Beginner)</option> 
    <option value="2">2 (Amateur)</option> 
    <option value="3">3 (Intermediate)</option> 
    <option value="4">4 (Pro)</option> 
    <option value="5">5 (Expert)</option> 
</select> 

從$ _ POST返回此數據庫,同時確保配對維持其關係(即技能[0]匹配[skill-rating [0])

數據庫模式:

+--------------+-------------+------+-----+---------+-------+ 
| Field  | Type  | Null | Key | Default | Extra | 
+--------------+-------------+------+-----+---------+-------+ 
| skill_id  | int(11)  | NO | PRI | NULL |  | 
| skill  | varchar(50) | NO | PRI | NULL |  | 
| skill_rating | int(11)  | YES |  | NULL |  | 
+--------------+-------------+------+-----+---------+-------+ 

PDO功能:

public function updateSkills($skill, $skillRating = NULL, $sessionUserID) { 

     $insertQuery = $this->db->prepare(" 
      INSERT INTO " . DB_NAME . ".freelancer_skills 
       (skill_id, skill, skill_rating) 
      VALUES 
       (:userID, :skill, :skillRating) 
     "); 

     $insertQuery->bindValue(":skill", $skill); 
     $insertQuery->bindValue(":skillRating", $skillRating); 
     $insertQuery->bindValue(":userID", $sessionUserID); 

     try{ 
      $insertQuery->execute(); 
     }catch(PDOException $e) { 
      $users = new Users($db); 
      $debug = new Errors(); 
      $debug->errorView($users, $e); 
     } 
    } 
+0

的值應該是在$ _REQUEST或$ _POST數組。你沒看到他們嗎? –

+0

你正在尋找一種方法將它添加到數據庫(mysqli,pdo),或者你不熟悉連接一個形式與PHP'$ _POST'或'$ _GET'超全球? – webeno

+0

我已更新我的原始問題以使其更清晰 – jshjohnson

回答

1

你建立你的表單的方式,$_POST['skill-rating'][$key]選擇的值將始終具有同等的$_POST['skill'][$key],從而使用功能,我相信下面的應該只是罰款:

foreach($_POST['skill'] as $key => $value) { 
    updateSkills($_POST['skill'][$key], $_POST['skill-rating'][$key], $sessionUserID); 
} 
+0

這幾乎完美無缺。由於某種原因,在插入實際數據到每一行之前,它會插入技能等級爲0的空白技能? http://i.imgur.com/Qdp10gS.png – jshjohnson

+0

hm ......不知道爲什麼會發生......試着在'foreach'循環之前做一個'print_r($ _ POST)',看看第一個成員真的是空的(出於某種奇怪的原因)...另外,您可能希望從輸入中刪除「value =」「'(不需要),並將值設置爲0(或-1)下拉式,只是爲了確保... – webeno

+0

啊,如果我填寫所有6個輸入字段,它的工作原理應該如此。它插入空白字段。它停止,因爲主鍵不允許重複(本例爲空白)。 – jshjohnson

1

讓他們的陣列,然後$_POST['skill'][1]將匹配$_POST['skill-rating'][1]

<input type="text" name="skill[]"> 
<select name="skill-rating[]"> 

你也可以用foreach()循環通過它們。

0

假設用戶填寫了3個技能,即6個輸入。你會得到以下array爲用戶提交:

Array(
[skill-1] => Python 
[skill-rating-1] => 2 
[skill-2] => PHP 
[skill-rating-2] => 3 
[skill-3] => Ruby 
[skill-rating-3] => 5 
) 

現在使用和循環,並創建一個陣列,使其在查詢中使用。

if(isset($_POST)) 
{ 
    $skills = $_POST; 
    $skill_count = sizeof($skills)/2; 

    $data = array(); 
    $j = 0; 
    foreach($i=1; $i<=$skill_count; $i++) 
    { 
     $data[$j]['skill'] = $skills['skill'.$i]; 
     $data[$j]['skill_rating'] = $skills['skill-rating'.$i]; 
     $j++; 
    } 

    echo '<pre>'; print_r($data); 
} 

結果數組:

Array(
    [0] => Array(
       [skill] => Python 
       [skill-rating] => 2 
      ) 
    [1] => Array(
       [skill] => PHP 
       [skill-rating] => 3 
      ) 
    [2] => Array(
       [skill] => Ruby 
       [skill-rating] => 5 
      ) 
) 
0

這可能不是最有效的,就是在同一時間將每行一個,但使用您的當前設置(與你的PDO功能),它應該工作得很好。

for ($i=0; $i<6; $i++) { 

    if (isset($_POST['skill'][$i])) { 

     $skill_name = sanitize_user_input($_POST['skill'][$i]); 
     $skill_rating = (isset($_POST['skill-rating'][$i]) ? sanitize_user_input($_POST['skill-rating'][$i]) : NULL) 

     if (!$YourClass->updateSkills($skill_name, $skill_rating, $sessionUserID)) 
      echo "Insert failed"; 
    } 
} 

注意sanitize_user_input()只是我的代表做某種類型的輸入環境衛生虛構的功能。