2012-12-27 52 views
7

關聯數組我有以下形式:如何發佈在PHP

<form action="options.php" method="post"> 
    <input type="text" name="deptid" id="deptid" /> 
    <input type="text" name="deptname" id="deptname" /> 
    <input type="submit" name="submit" id="submit" value="save" /> 
</form> 

編輯

是否有可能兩個值傳遞到一個關聯數組之前提交? 我想它通過這種形式:

array('deptid'=>'deptname') 

我需要這個,因爲我避免修改目標PHP文件(options.php)

感謝的腳本。

+1

cURL是你的朋友 –

+1

@HankyPanky - cURL與此有什麼關係? –

+0

因爲他說「只使用php腳本」。所以如果他必須使用php腳本在這個頁面上發佈數據,所以對於初學者我認爲cURL會很好。 –

回答

5

$_POST已經是一個關聯數組我建議你不要的東西超出了因爲$_POST已經擁有表單數據來複雜化。

$myassoc = $_POST; 
print_r($myassoc); 

和關聯數組,您將收到的組織和您的形式(包括文本域)命名輸入元素的name屬性相同

其他見解

依我之見您要將代碼放入deptname數據到deptid,因爲它到達PHP服務器端代碼。也可以用就是我們該做的僅僅是把它分配給關鍵deptid

$_POST['deptid'] = $_POST['deptname']; 
$myassoc = $_POST; 
print_r($myassoc); 
+1

我有一些完全不同的東西,我認爲OP是在之後; POST是關聯的,但我認爲OP希望將*鍵和值*關聯到POST數組中。 –

+0

所以像他想要'合併'它與POST數組? –

-1

你爲什麼要這麼做? 但是,你可以通過表單發送「陣列」是這樣的:

<form method="post"> 
    <input type="text" name="textboxes[]" /> 
    <input type="text" name="textboxes[]" /> 
    <input type="submit" /> 
</form> 

<?php 
    if(isset($_POST['textboxes'])) 
     var_dump($_POST['textboxes']); 
?> 
20

這裏有一個方法,使用純HTML是得到的,你正是您想要的,並且僅使用HTML:

<form action="options.php" method="post"> 
    <input type="text" name="options[deptid]" id="deptid" /> 
    <input type="text" name="options[deptname]" id="deptname" /> 
    <input type="submit" name="submit" id="submit" value="save" /> 
</form> 

這將使你在PHP中:

$post_options = array(
    'options' => array(
     'deptid '=> '[that input element value]', 
     'deptname' => '[that input element value]' 
    ) 
); 

然後你就可以(包括消毒)訪問像這樣的:

$post_options = array('options'); 

if (is_numeric($post_options['deptid'] && $post_options['deptid'] > 0) { 
    // Do whatever 
} 

if (is_string($post_options['deptname'] && strlen($post_options['deptname'] > 2)) { 
    // Do whatever 
} 

編輯

或者......你要引用的deptidinput name屬性,並用它來修改行一個部門的名字嗎?這似乎表明這樣的事情:

<?php 

$deptid = 1; 
$deptname = 'Department of Silly Walks'; 

?><input type="hidden" name="options[<?=$deptid?>]" value="<?=$deptname?>"> 

,輸出:

<input type="hidden" name="options[1]" value="Department of Silly Walks"> 

http://codepad.org/DtgoZGe7

的問題,這是該$deptid值成爲實際上並不是直接命名或參考價值。我認爲這是由於從服務器到客戶端的價值抽象而實現的可能存在的問題,所以我會推薦我在頂端有什麼。這在實踐中沒有太大的區別,但它或多或少是自我記錄的。

請注意,如果您想序列化部門列表,這有點棘手。您可能,例如,試試這個:

<input type="text" name="options[][deptid]" id="deptid" /> 
<input type="text" name="options[][deptname]" id="deptname" /> 

這會爲每一個input添加一個索引值。但是......他們不會直接關聯。所以你會得到兩個零索引的數組,每個鍵。

我想在這種情況下所說的其實是使用JavaScript來添加每個新部門的input元素,所以你可以給每一個數字,如:

<input type="text" name="options[0][deptid]" id="deptid" /> 
<input type="text" name="options[0][deptname]" id="deptname" /> 
<br/> 
<input type="text" name="options[1][deptid]" id="deptid" /> 
<input type="text" name="options[1][deptname]" id="deptname" /> 
<br/> 
<input type="text" name="options[2][deptid]" id="deptid" /> 
<input type="text" name="options[2][deptname]" id="deptname" /> 
<br/> 
<input type="text" name="options[3][deptid]" id="deptid" /> 
<input type="text" name="options[3][deptname]" id="deptname" /> 

還是做老派回傳方法和使用PHP以計數$POST['options']並「手動」添加具有相同索引的新輸入「行」。這是一個常見的陷阱,所以你只需要考慮一下,如果這是你在某個時間點之後的事情。

+0

在這種情況下,它仍然是一樣的...在另一個數組中的數組 –

+0

@Mahan - 的確如此。這非常有用;當你有多個新條目並且你想通過POST'options'數組直接管理部門列表時,請參閱我的編輯聯合示例。 –

+0

好吧,我只是遵循OP的代碼,讓我們看看他是否稍後改變它 –

-1
$deptid = $_POST['deptid']; 
$array = array($$deptid => $_POST['deptname']); 
print_r($array); 
3
<form method="post"> 
    <input type="text" name="formdata['deptid']" /> 
    <input type="text" name="formdata['deptname']" /> 
    <input type="submit" /> 
</form> 

<?php 
    if(isset($_POST['formdata'])) 
    { 
     $deptid = $_POST['formdata']['deptid']; 
     $deptname = $_POST['formdata']['deptname']; 
    } 
?> 
0

$_POST已經關聯數組。

您可以重建你向它分配$_POST給一個變量

$myarray = $_POST; 

從這個需要一種形式的數組現在$ myArray的是你所需要的。做var_dump($myvar);

+0

謝謝,但我不想修改服務器中的php腳本(options.php) – user1134475

0

用適當的結構構建一個JS對象,使用JSON.stringify()將其轉換爲JSON,POST,然後執行json_decode($_POST['data'],true)

您將擁有從JS對象到PHP關聯數組的精確副本。刪除第二個參數true以獲取PHP對象。