2011-03-17 14 views
14

cómo capturar todos los campos en $_POST VARIABLE? en una matriz?

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

que estoy tratando de hacer una dirección de lista de correo electrónico, nombre y correo electrónico, ¿Cómo capturo todas las variables que, cuando publicado que se puede acceder normal como $_POST['email'] en una matriz para que pueda añadirlos a los argumentos en mis funciones?

Mi campo de formulario tiene 5 campos. El método es POST.

En lugar de escribir,

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

Estoy intentando acceder a todos los valores de la matriz $ _POST []; Así que puedo ahorrar tiempo publicando variables y agregar funciones a las variables como mysql_real_escape_string();

Se determinarán otras medidas de seguridad.

Quiero ser capaz de agregar una referencia de la matriz a una función para poder agregarlos a la base de datos.

+6

¿Por qué no acaba de pasar $ _POST directamente? ya es una matriz ... –

+0

Todavía no estoy seguro de cuáles son tus intenciones ... ¿Podrías volver a formular la pregunta? – Czechnology

+1

Aunque tendría que decir que esto es ** muy ** inseguro, ya que ni siquiera comprueba ninguno de esos valores en '$ _POST', ¿o lo está haciendo en la función' insert_email_into_database'? – slhck

Respuesta

14

Si desea capturar una lista de un formulario enviado, a continuación, utilizar el truco sintaxis de matriz en lugar de nombres de campos de entrada enumerados:

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

De esta manera no se necesita ninguna adivinanzas en PHP, porque emails[] se convierte en una matriz implícitamente a continuación:

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

Para la base de datos-escapar sólo tiene que utilizar:

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

¿también estoy agregando los nombres de las personas? así que con cada vez que publico, solo agrego 1 de cada uno. – Aaron

+0

También haga que los nombres sean una matriz. '' Si están agrupados, cada campo aparece con el mismo índice. 'foreach ($ _POST [" emails "] como $ i => $ email) {echo $ email, $ _POST [" firstname "] [$ i]; } ' – mario

2

Hmm ... algo como esto ayuda?

<?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 ya es una matriz. ¿Por qué no pasar eso?

Cuestiones relacionadas