2011-03-17 58 views
14

cách chụp tất cả các trường trong $_POST VARIABLE? thành một mảng?

$email = $_POST; 
$emails = array_keys($email); 
foreach($emails as $email) { 
     echo '$' . nl2br($email); 
} 
$emailadd = new email_save; 
$emailadd->insert_email_into_database("POST VARIABLES GO HERE) 

Tôi đang cố gắng để làm cho một danh sách email, tên và địa chỉ email, làm thế nào để nắm bắt tất cả các biến nơi đăng tải, có thể bình thường được truy cập như $_POST['email'] vào một mảng vì vậy tôi có thể thêm chúng vào các đối số trong các hàm của tôi?

Trường biểu mẫu của tôi có 5 trường. Phương thức là POST.

Thay vì viết,

$email = mysql_real_escape_string($_POST['email']); 
$firstname = mysql_real_escape_string($_POST['firstname']); 

Tôi đang cố gắng để truy cập vào tất cả các giá trị trong [] mảng $ _POST; Vì vậy, tôi có thể tiết kiệm thời gian nhận các biến được đăng và thêm các chức năng cho các biến đó như mysql_real_escape_string();

Các biện pháp bảo mật khác sẽ được tìm ra.

Tôi muốn có thể thêm một reffrence của mảng vào một hàm để tôi có thể thêm chúng vào cơ sở dữ liệu.

+6

Tại sao không chỉ chuyển trực tiếp $ _POST? nó đã là một mảng ... –

+0

Tôi vẫn không chắc ý định của bạn là gì ... Yould bạn cố gắng thuật lại câu hỏi? – Czechnology

+1

Mặc dù tôi phải nói rằng điều này là ** rất ** không an toàn, vì bạn thậm chí không kiểm tra bất kỳ giá trị nào trong '$ _POST' - hoặc bạn đang làm điều này trong hàm' insert_email_into_database'? – slhck

Trả lời

14

Nếu bạn muốn chụp một danh sách từ một hình thức đăng, sau đó sử dụng các thủ thuật cú pháp mảng thay vì tên liệt kê trường nhập:

<input type="email" name="emails[]"> 
<input type="email" name="emails[]"> 
<input type="email" name="emails[]"> 

Bằng cách này bạn không cần đoán trong PHP, vì emails[] trở thành một mảng implicitely thì:

print_r($_POST["emails"]); 
foreach ($_POST["emails"] as $email) { 

Đối với cơ sở dữ liệu thoát chỉ cần sử dụng:

$db_emails = array_map("mysql_real_escape_string", $_POST["emails"]); 
// that's an array too 
+0

Tôi cũng đang thêm tên của người? vì vậy với mỗi lần nó đăng tôi chỉ thêm 1 của mỗi .. – Aaron

+0

Làm cho tên một mảng quá. '' Nếu chúng được nhóm lại với nhau, thì mỗi trường sẽ hiển thị cùng một chỉ mục. 'foreach ($ _POST [" email "] dưới dạng $ i => $ email) {echo $ email, $ _POST [" firstname "] [$ i]; } ' – mario

2

Hmm ... có thể giống như trợ giúp này?

<?php 
// blank array to hold emails 
$emails = array(); 

foreach ($_POST as $key => $value) 
{ 
    if (preg_match('/email/', $key)) 
    { 
     $this_email = $value; 
     // quick check to see if it is valid 
     $this_email = filter_var($this_email, FILTER_VALIDATE_EMAIL); 
     // also escape it to prevent SQL injections 
     $this_email = $mysqli->real_escape_string($this_email); 
     $emails[] = $this_email; 
    } 
} 

// $emails is now a nice, clean array of email addresses 
$emailadd->insert_email_into_database($emails); 

echo '<pre>'; 
print_r($emails); 
echo '</pre>'; 
?> 

<form method="post" action="index.php"> 
    <input type="text" name="email1" /><br /> 
    <input type="text" name="email2" /><br /> 
    <input type="text" name="email3" /><br /> 
    <input type="submit" /> 
</form> 
7

$ _POST đã là một mảng. Tại sao không chỉ vượt qua điều đó?

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