Sono bloccato, voglio inserire i dati del module da campi di arrays come di seguito in MySQL:
<input type='text' name='name[]' />` and `<input type='text' name='url[]' />
So come generare i dati per un field come questo esempio
foreach($_POST['name'] as $name) { echo $name; }
Ma nella mia forma ho sia <input type='text' name='name[]' />
e <input type='text' name='url[]' />
come posso far funzionare correttamente?
Cercherò di evitare di interrogare il DB più e più volte e di mettere tutto in un'unica grande istruzione di inserimento:
$query = "INSERT INTO table1 (name, url) VALUES "; foreach($_POST['name'] as $i => $name) { // Get values from post. $name = mysql_real_escape_string($name); $url = mysql_real_escape_string($_POST['url'][$i]); // Add to database $query = $query." ('$name','$url') ,"; } $query = substr($query,0,-1); //remove last char $result = mysql_query($query);
In questo modo devi solo colpire il database una volta, rendendo l'inserimento molto più veloce.
Un altro vantaggio è che se il motore support le transactions (InnoDB et al) tutti gli inserimenti avvengono in un'unica transazione.
Puoi usare l'indicizzatore del tuo loop in questo modo:
foreach($_POST['name'] as $i => $name) { // Get values from post. $name = mysql_real_escape_string($name); $url = mysql_real_escape_string($_POST['url'][$i]); // Add to database $sql = "INSERT INTO `table` (`name`, `url`) VALUES ('".$name."', '".$url."')"; $result = mysql_query($sql); }
Ovviamente, è una buona pratica usare mysql_real_escape_string sui valori prima di aggiungerli nella tua query.
È necessario implodere gli arrays se si desidera archiviare tutti i valori in un singolo field DB.
$all_names= implode(",", $name[]);
Questo metterà tutti i valori dell'arrays in una singola variabile, separati da virgola.