2012-10-02 60 views
0

我得到了这个2个数组的表单来处理。但是,我只能从只有一个数组中获得输出。示例如下:在php中处理数组

<inputs id="location" type="text" name="data[]" value=""/>
<input id="shipval" type="text" name="data[][id]" value=""/>

而在PHP的一部分是低于:

foreach ($_POST ["data"] as $id => $subs) {  

      foreach ($subs as $key=>$sub) { 

       $subcategory = $sub; 

       if($subs['id']=="$subcategory"){ 
        echo $sql = " insert into x(kodLebuhraya,kodSeksyen) values ('".$subs['id']."','".$sub."')";echo "<br>";  
       }else{ 
        //echo "hi2"; 
        echo $sql = " insert into x(kodLebuhraya,kodSeksyen) values ('".$subs['id']."','".$sub."')";echo "<br>"; 
       } 

      } 

     } 

它意味着一个shipval一个位置。我有多个输入字段的位置和shipval。你们可以让我知道哪一个是错的。先谢谢了。

+0

这真的bizzare你想要做的是.... data []是一个简单的字符串在输入位置的情况下,data []是数组在船舶的情况下...显示如何可以一个元素是数组和字符串在同一时间..更改您的输入名称方法 – Surace

+0

您有想法我可以做到这一点吗?我不知道如何解决这个问题。 –

回答

5

所以基本上你需要成对传递位置和运输。

试试这个结构在HTML:

<label>Set One</label> 
<input class="location" type="text" name="data[location][]" value=""/> 
<input class="shipval" type="text" name="data[shipval][]" value=""/> 
<label>Set Two</label> 
<input class="location" type="text" name="data[location][]" value=""/> 
<input class="shipval" type="text" name="data[shipval][]" value=""/> 
<label>Set Three</label> 
<input class="location" type="text" name="data[location][]" value=""/> 
<input class="shipval" type="text" name="data[shipval][]" value=""/> 

而这种代码PHP:

foreach ($_POST['data']['location'] as $key => $location) {  
     $shipVal = $_POST['data']['shipval'][$key]; 

     //now you have a pair of $location and $shipVal 
     echo $location.' : '.$shipVal.'<hr>'; 

    } 

避免使用名为指标后没有命名的恩。 <input name="array[][named]" />如果其中一个字段为空,则可以丢失字段的顺序。

+0

我试过你的代码。并更改的表单输入。但我没有得到任何输出。已经尝试回显位置和运送。任何想法? –

+1

更正了'$ _POST'数组中的语法。 @ muhamad-azam如果你打算使用这样的多个输入,你不应该使用id =“location”或id =“shipval”,因为这些必须是唯一的,所以你可能想要使用类属性。 –

+0

好的,谢谢!我现在得到了这个工作。非常感谢那些帮助我的人。 –

0

你的<inputs id="location"代替<input id="location"

也... foreach ($subs as $key => $sub) {将抛出一个错误<inputs id="location" type="text" name="data[]" value=""/>,因为它不是多维的。因此,尝试改变,为<inputs id="location" type="text" name="data[][]" value=""/>

+0

如果这是复制/粘贴的代码:很好捕获,这无疑是问题。 +1 – rockerest

+0

即使他修复了这个问题上面的代码不会工作.... – Surace

+0

可能值得注意的是它实际上会引发警告 - 如果警告没有显示,哪个*可能*是为什么它没有被注意到。 – LeonardChallis

0

对于多重选择,该名称在方括号内结束,所以你需要改变你的shipval投入名称

0

首先你writtten inputs而不是input

其次,这一行:

foreach ($subs as $key=>$sub) {

将把每个变量作为一个数组,但位置不是数组。

+0

我没有得到它..你是什么意思,“将把每个变量看作一个数组,但该位置不是一个数组”。任何解决方案? –

0

我没有看到一个循环的需要,因为你只想访问$_POST['data'][0]$_POST['data'][1]['id']

我还注意到,您的SQL是重复的,所以你可以尝试你可以试试

$sql = "INSERT INTO x(`kodLebuhraya`,`kodSeksyen`) VALUES ('%s','%s')" ; 
printf($sql,mysqli_real_escape_string($_POST['data'][0]),mysqli_real_escape_string($_POST['data'][1]['id'])); 

输出

INSERT INTO x(`kodLebuhraya`,`kodSeksyen`) VALUES ('A','B') 

形式使用

<form method="POST"> 
    A : <input id="location" type="text" name="data[]" value="" /> 
    B : <input id="shipval" type="text" name="data[][id]" value="" /> 
    <input id="shipval" type="submit" name="submit" value="Submit" /> 
</form> 
+0

首先,主要问题是输入字段名称,他不会得到任何id的原因:::假定情况他的位置就像数据[0] ='伦敦'从地点然后让说ID应该是5然后数据[0] [ID ] = 5 ...看看这个怎么可以数据[0]可以是字符串值和assoc数组在同一时间 – Surace

+0

@Surace这只是基本问题,但已更新我的答案与我使用的形式 – Baba

+0

嗨,基本上我有位置和运输的多个输入。它会成对的。指一艘船的一个位置。如果我有4个位置和运输的输入位置?代码将会是什么? –