2012-12-27 30 views
7

tôi có các hình thức sau đây:Làm thế nào để đăng một mảng kết hợp trong 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> 

EDIT

Có thể vượt qua hai giá trị thành một mảng kết hợp TRƯỚC trình? Tôi muốn vượt qua nó theo hình thức này:

array('deptid'=>'deptname') 

tôi cần điều này vì tôi tránh để sửa đổi kịch bản của file đích php (options.php)

Cảm ơn.

+1

cURL là bạn của bạn –

+1

@HankyPanky - cURL phải làm gì với điều này? –

+0

Vì anh ta nói "chỉ sử dụng tập lệnh php". Vì vậy, nếu anh ta phải đăng dữ liệu trên trang này bằng cách sử dụng kịch bản php chỉ để cho một người mới bắt đầu tôi nghĩ cURL sẽ là tốt. –

Trả lời

5

$_POST đã là một mảng kết hợptôi khuyên bạn không nên làm phức tạp mọi thứ vượt ra ngoài đó$_POST đã nắm giữ các dữ liệu đến từ hình thức của bạn.

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

và mảng kết hợp mà bạn sẽ nhận được tổ chức và được đặt tên giống nhau trong các thuộc tính tên của các yếu tố đầu vào trong mẫu của bạn (bao gồm cả textarea)

Insights khác

Như tôi đã thấy mã của bạn mà bạn muốn đặt dữ liệu deptname vào deptid khi mã này đạt đến mã phía máy chủ PHP. điều bạn có thể làm là chỉ cần gán nó cho khóa deptid

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

Tôi đã có một cái gì đó hoàn toàn khác nhau Tôi nghĩ rằng OP là sau; POST là liên kết, nhưng tôi nghĩ rằng OP muốn các * khóa và giá trị * được liên kết * trong * mảng POST. –

+0

vì vậy một cái gì đó như ông muốn 'hợp nhất' nó với mảng POST? –

-1

Tại sao bạn muốn làm điều đó? Tuy nhiên, bạn có thể gửi "mảng" thông qua các hình thức như thế này:

<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

Đây là một phương pháp sử dụng HTML thuần túy mà có được của bạn gần chính xác nơi bạn muốn trở thành, và chỉ sử dụng 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> 

trong đó sẽ cung cấp cho bạn trong PHP:

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

nào bạn có thể sau đó (bao gồm vệ sinh) truy cập như thế này:

$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 
} 

EDIT

Hoặc ... Bạn muốn tham khảo các deptid trong thuộc tính input name và sử dụng nó để thay đổi hàng cho một tên bộ phận?Mà dường như để chỉ một cái gì đó như thế này:

<?php 

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

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

mà kết quả đầu ra:

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

http://codepad.org/DtgoZGe7

Vấn đề với điều này là giá trị $deptid trở thành một giá trị đó là không thực sự trực tiếp tên hoặc tham chiếu. Tôi nghĩ rằng điều này là có khả năng có vấn đề để thực hiện do trừu tượng này của giá trị từ máy chủ cho khách hàng và ngược lại, vì vậy tôi muốn giới thiệu những gì tôi có ở đầu thay vào đó. Nó không phải là một sự khác biệt trong thực tế, nhưng nó ít nhiều tự tài liệu.

Lưu ý, nếu bạn muốn tuần tự hóa danh sách các phòng ban, điều này sẽ phức tạp hơn một chút. Ví dụ: bạn có thể dùng thử:

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

Điều này sẽ thêm giá trị được lập chỉ mục cho mỗi input. Tuy nhiên ... Họ sẽ không được liên kết trực tiếp. Vì vậy, bạn sẽ nhận được, thay vào đó, hai mảng không được lập chỉ mục cho mỗi khóa.

Những gì tôi sẽ đề nghị trong trường hợp này là sử dụng Javascript để thêm input yếu tố từng bộ phận mới, vì vậy bạn có thể cung cấp cho mỗi một số mặt hàng như:

<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" /> 

Hoặc làm phương pháp postback cũ-trường và sử dụng PHP để đếm $POST['options'] và "thủ công", hãy thêm "hàng" đầu vào mới có cùng chỉ mục. Đó là một cái bẫy phổ biến, vì vậy bạn chỉ cần suy nghĩ về nó nếu đây là những gì bạn đang sau một thời điểm nào đó.

+0

trong trường hợp này, nó vẫn như cũ ...một mảng trong mảng khác –

+0

@Mahan - Chính xác. Nó rất hữu ích; xem bản chỉnh sửa của tôi cho một ví dụ cung cấp, khi bạn có nhiều mục mới và bạn muốn quản lý danh sách các phòng ban trực tiếp thông qua mảng POST 'tùy chọn'. –

+0

Tôi chỉ đang theo mã của OP, chúng ta hãy xem nếu anh ta thay đổi nó sau này trên –

-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 đã là một mảng kết hợp.

Bạn có thể xây dựng lại một loạt các hình thức bạn cần từ này bằng cách chỉ cần gán $_POST cho một biến

$myarray = $_POST; 

Bây giờ $ myarray là những gì bạn yêu cầu. Làm var_dump($myvar);.

+0

Cảm ơn nhưng tôi không muốn sửa đổi tập lệnh php trong máy chủ (options.php) – user1134475

0

Tạo đối tượng JS có cấu trúc thích hợp, chuyển đổi nó thành JSON với JSON.stringify(), POST nó, và sau đó làm json_decode($_POST['data'],true).

Bạn sẽ có bản sao chính xác từ đối tượng JS, tới mảng liên kết PHP. Thả tham số thứ hai của true để nhận đối tượng PHP.

Các vấn đề liên quan