[PHP] problema insert query

enricocarli

Utente Attivo
26 Set 2014
46
0
6
Buongiorno a tutti,
ho questo codice:

mysql_query("INSERT INTO ".$_GET['table']."(".
foreach ($array_col as $col) {
if ($col['key']!="PRI") {
echo $col['nome'].",";
}
}
.") values(".
foreach ($array_col as $col) {
echo $_POST[$col['nome']].",";
}
.")");
ma non inserisce nulla nel db;

sto facendo un piccolo crud, per quello il nome della tabella e i campi devono essere dinamici.

Qualcuno può aiutarmi?
dho.gif


grazie mille a tutti!
buona serata
 
Che versione di PHP usi?

Se non sai come vederlo, basta che leggi la testata della tabella che ti spunta eseguendo questo codice.

PHP:
<?php
echo phpinfo();
?>
 
Non ho ben capito la struttura delle tue variabili. In ogni caso, ti consiglio di fare come segue, se corrisponde al tuo caso.

Sostanzialmente, devi salvare in un array i valori che ti arrivano da $_POST: per cui se richiedi nome, cognome e anno di nascita avrai una cosa del genere
PHP:
// inseriamo i valori passati dal form in un array
$array_insert['nome'] = $_POST['nome']; // $_POST['nome'] = "Alan"
$array_insert['cognome'] = $_POST['cognome']; // $_POST['cognome'] = "Turing"
$array_insert['anno'] = $_POST['anno']; // $_POST['anno'] = "1930"

Ciò che dobbiamo fare è costruire una query di inserimento che usa le chiavi dell'array come nomi di colonna e i valori corrispondenti a tali chiavi come valori della riga che stiamo inserendo.

Per cui dovremo ottenere una stringa sulla falsa riga della seguente
PHP:
$query = "INSERT INTO tabella (nome,cognome,anno) VALUES ('Alan','Turing','1930')";

A tal fine ho scritto una funzioncina che può venirti in aiuto.
PHP:
function genera_insert($tabella,$array_colonna_valore) {
// prende in input il nome della tabella e un array con i valori da inserire in tabella
    $query = "INSERT INTO $tabella (".
          implode(', ', array_keys($array_colonna_valore)).
          ") VALUES ( '".
          implode("', '", $array_colonna_valore).
          "');";
    return $query;
}

// esempio di utilizzo
$array_insert['nome'] = "Bianca";
$array_insert['cognome'] = "Neve";
$array_insert['città'] = "Hogsmeade";

echo genera_insert('utenti',$array_insert);

// produce la seguente stringa
//"INSERT INTO utenti (nome, cognome, città) VALUES ( 'Bianca', 'Neve', 'Hogsmeade');"

Per cui ora hai la tua query_string, che non è altro che la funzione genera_insert().
 
ciao AdeKnite,
intanto grazie x la disponibilità, la tua soluzione potrebbe anche funzionare, mi metto all'opera e provo, di fatto io non devo mai mettere i nomi delle colonne del db perchè sono sempre diversi.
ti faccio sapere
grazie ancora
 
funziona adeknite, grazie infinite, posto il codice qua:

PHP:
             $array_insert = array();
             foreach ($array_col as $col) {
               if($col['key']!="PRI"){
                 $array_insert[] = $col['nome'];
               }
             }
             $array_value = array();
             foreach ($array_col as $col) {
               if($col['key']!="PRI"){
                 $array_value[] = $_POST[$col['nome']];
               }
             }             
             $query_insert = mysql_query("INSERT INTO ".$_GET['table']." (
               ".implode(',', $array_insert)."
               ) VALUES ( '".
               implode("','", $array_value).
             "')");
             if($query_insert===1){
               $insert = mysql_fetch_assoc($query_insert);
             }

di fatto ho passato 2 array.

grazie ancora e buona serata!
 
Consiglio. Smetti di usare le funzioni mysql_, sostituendole con mysqli_ o PDO.
 
No, non solo per quello, è anche un discorso di sicurezza e funzionalità implementate. Qui trovi un confronto delle tre API citate.

Tra le ragioni più importanti c'è sicuramente l'assenza delle cosiddette prepared statements, che comporta, se non si presta abbastanza attenzione, delle falle nella sicurezza.
 
Grazie mille dei consigli AdeKnite.
Devo imparare diverse cose di php sono un niubbo. Darò un occhio anche a queste.
Grazie ancora e buonanotte
 

Discussioni simili