PDA

View Full Version : [PHP] array e query


Cloud25
07-11-2013, 18:40
ciao a tutti! :D

avrei bisogno di una mano su un codice php che sto preparando... premetto di essere uno alle prime armi e che sto preparando una specie di gestionale sul web.
Allora, io ho una serie di variabili POST del tipo: $_POST['1'], $_POST['2'], etc. che potrebbero potenzialmente arrivare all'infinito. Vorrei riuscire a salvare il loro contenuto in un database mysql e in particolare in delle colonne il cui nome è salvato in un array (nel mio caso $array_nomi) e quindi:
il contenuto di $_POST['1'] vorrei che fosse salvato nella colonna il cui nome è contenuto in $array_nomi[0];
il contenuto di $_POST['2'] vorrei che fosse salvato nella colonna il cui nome è contenuto in $array_nomi[1]; etc.

credo serva un foreach e una query del tipo INSERT INTO almeno, ma non saprei proprio come utilizzarli e i miei tentativi hanno portato a fallimenti clamorosi. grazie in anticipo a tutti!

Tuvok-LuR-
08-11-2013, 12:01
se hai una lista di input omogenea puoi usare questa notazione nel form html (nomecampo+[])

<input name="lista[]"></input>
<input name="lista[]"></input>
<input name="lista[]"></input>


a php verrà passato il solo parametro $_POST['lista'] che sarà un array.
poi puoi loopparlo così

<?php
$lista = $_POST['lista'];
foreach ($lista as $item) {
echo $item;
}
?>

Cloud25
08-11-2013, 12:04
se hai una lista di input omogenea puoi usare questa notazione nel form html (nomecampo+[])

<input name="lista[]"></input>
<input name="lista[]"></input>
<input name="lista[]"></input>


a php verrà passato il solo parametro $_POST['lista'] che sarà un array.
poi puoi loopparlo così

<?php
$lista = $_POST['lista'];
foreach ($lista as $item) {
echo $item;
}
?>

grazie mille non avevo idea di poter usare l'html in quel modo! appena torno a casa provo:D
e come posso fare per inserire i dati nel db?
<? $lista = $_POST['lista'];
foreach ($lista as $item) {
foreach ($array_nomi as $column) {
mysql_query("INSERT INTO '$column' VALUE ('$array_nomi') ");
}
}
?>

così va bene?

Tuvok-LuR-
08-11-2013, 12:13
non hai bisogno di un'altro loop all'interno del foreach. poi puoi trattare $lista come un oggetto in modo da avere l'indice ($key) e recuperare il campo dall'altro array:
<?php
$lista = $_POST['lista'];
$fields = Array('nome','cognome','eta');
foreach ($lista as $key=>$item) {
// $key sarà in successione 0,1,2
$campo = $fields[$key];
$valore = $item;
echo($campo.': '.$valore);
}
?>

inoltre ricordati che:
una INSERT non inserisce il valore in una specifica colonna ma serve a creare una nuova riga (se vuoi aggiornare colonne di una riga già esistente devi usare UPDATE)

i comandi mysql_ sono deprecati in PHP, ti consiglio di passare a PDO o, più semplicemente a mysqli_ (più simile a mysql_)

Cloud25
08-11-2013, 19:01
grazie va una bomba :)

Cloud25
11-11-2013, 13:45
senza aprire nuovo topic.... ho un nuovo casino che non riesco a risolvere da qualche giorno :mbe:

il discorso è il seguente: devo recuperare dei dati presenti nella tabella "descr_movimenti" ma il nome di alcune colonne non è noto a priori ed è salvato nell'array $prefissi (mentre le colonne "tipologia", "data", "num_doc" sono note). Sono in grado di tirare fuori il contenuto delle colonne note, ma non riesco a stampare a video il contenuto delle colonne il cui nome è salvato nell'array... come posso fare?

$query = mysql_query("SELECT * FROM descr_movimenti WHERE ID_cliente = '$_POST[ID]' ORDER BY data") or die(mysql_error);

$tipologia = array();
$data = array();
$num_doc = array();


while ($linea = mysql_fetch_array($query)){
$tipologia[] = $linea['tipologia'];
$data[] = $linea['data'];
$num_doc[] = $linea['num_doc'];

}

foreach ($prefissi as $key => $item) {
echo "<tr><td align=center>".$tipologia[$key]."</td> <td align=center>".$data[$key]."</td> <td align=center>".$num_doc[$key]."</td>
<td align=center>".$prezzo[$key]."&euro; x ".???."</td>

ps. so di usare funzioni php deprecated ma purtroppo non ho tempo materiale per aggiornarmi :(

Tuvok-LuR-
11-11-2013, 14:17
stasera spaghetti! :D

prova così:
$query = mysql_query("SELECT * FROM descr_movimenti WHERE ID_cliente = '$_POST[ID]' ORDER BY data") or die(mysql_error);

while ( $linea = mysql_fetch_array($query) ) {
$tr = "<tr>";
$tr .= "<td align=center>".$linea['tipologia']."</td>";
$tr .= "<td align=center>".$linea['data']."</td>";
$tr .= "<td align=center>".$linea['num_doc']."</td>";
foreach ( $prefissi as $prefisso ) {
$tr .= "<td align=center>".$linea[$prefisso]."</td>";
}
$tr .= "</tr>";
echo $tr;
}
manca il prezzo che non ho capito da dove esce fuori

Cloud25
11-11-2013, 16:00
manca il prezzo che non ho capito da dove esce fuori
esce da qui: (è un pezzo di codice subito prima di quello che mi hai dato te, che ovviamente funziona alla grande!
//passo 1: recupero i prefissi
$query = mysql_query("SELECT prefix_giacenza, quantity_giac FROM descr_clienti WHERE ID = '$_POST[ID]'");

while ($giac = mysql_fetch_array($query)) {
$prefissi = unserialize($giac['prefix_giacenza']);
}

foreach ($prefissi as $key => $item) {

$query = mysql_query("SELECT Libro, Prezzo From descr_libri WHERE prefisso = '$prefissi[$key]'");

$prezzo = array();
while ($dati = mysql_fetch_array($query)) {
$libro = $dati['Libro'];
$prezzo[] = $dati['Prezzo'];
}
echo "<td>".$libro."</td>";
}
//chiudo rigo html
?>
<td></td>
</tr>