[PHP] Problemi su inserimento array nel db

  • Creatore Discussione Creatore Discussione Max61
  • Data di inizio Data di inizio

Max61

Utente Attivo
2 Mar 2014
760
4
18
salve come da titolo avrei la necessità di inserire la query random che mi estrae i nominativi in ordine casuale.
Con la query che posto l'estrazione è perfetta ma quando vado ad inserire nel DB il risultato mi inserisce soltanto l'ultimo nome estratto, mentre vorrei inserire tutti i nomi estratti.
La tabella è così strutturata:
id: autoincrement;
k: varchar;
v: varchar;
PHP:
$Rilevatori = array("minnie","pippo","pluto","Susanna","Antonio",
"Lorenzo","Melania","Giuliana","Liliana","Roberta","Stefania",
"Fabio","Luigino","Fabrizio","Giulia","Claudio","Carmela",
"Pier Paolo","Leonardo","Giovanni","Francesco","Tiziana");
$indici = array();
$Rilevatori_estratti = array();

$numero_Rilevatori = 22; // Rilevatori da estrarre dall'array
$tot_Rilevatori = count($Rilevatori) - 1; // numero totale dei Rilevatori nell'array

for ( $i = 0; $i < $numero_Rilevatori; $i++ ) {
  $ind = indiceCasuale($tot_Rilevatori, $indici);
  $indici[] = $ind;
  $Rilevatori_estratti[$i+1] = $Rilevatori[$ind];
}

function indiceCasuale ($tn, $in) {
  $ind = rand(0, $tn);
  if ( in_array($ind, $in) ) {
    $ind = indiceCasuale ($tn, $in);
  }
    return $ind;
}

?>

<!DOCTYPE html>
<html>
  <body>

    <?php
echo "<center><span style=\"color:black; font-size: 12pt\"><span style=\"color:red height:1;width:1; background-color:white\">&nbsp;____________________&nbsp;<br></span><br>";          
echo '<table>';
?>

<?php
foreach($Rilevatori_estratti as $k=>$v)echo '<tr><td>'.$k. ': </td><td>' .$v.'</td></tr>';
echo '</table>';
    //print_r ($Rilevatori_estratti);
    echo "<center><span style=\"color:black; font-size: 12pt\"><span style=\"color:red height:1;width:1; background-color:white\">&nbsp;____________________&nbsp;<br></span></i><br><br><br>";          
  ?>
  </body>
</html>

<?php
include("Connessione.php") ;

foreach($Rilevatori_estratti as $k=>$v){
            $Rilevatori_estratti["k"][] = "$k";
            $Rilevatori_estratti["v"][] = "$v";
              }
    $query = "INSERT INTO estrazione (k,v) VALUES ('$k','$v')";

    // invio la query
    $result = mysql_query($query);

   // controllo l'esito
   if (!$result) {
    die("<span style=\"color:red: font-size: 14pt\"Errore nell'inserimento. Riprova...</span>" . mysql_error());
   }
   echo "<span style=\"color: green; font-size: 14pt\"><strong>Inserimento eseguito correttamente. </span><br><br><br></b>";
Grazie
Max61
 
Ultima modifica:
Sposta la query all'interno del ciclo; ad ogni estrazione effetti l inserimento.

Nel caso si voglis utilizzare l'array nella query i valori devi separarli con una virgola ",".

PHP:
implode(",", $array)
 
Ultima modifica:
Cerco di esser più chiaro che prima ero da smatphone e ed probabilmente ho semplificato troppo..

Per utilizzare i valori di un array in una query devi trasformare l'array in stringa..
la query di riferimento per l' INSERT (in mysql, passa a mysqli) per valori multipliè del tipo:

PHP:
$query = "INSERT INTO Tabella (col1,col2) VALUES ('key1','val1'),('key2','val2') ";

quindi la stringa di valori in questo caso è ('key1','val1'),('key2','val2')

partendo quindi dall'array con i con valori da estrarre creaiamo la stringa da utilizzare nella query


PHP:
$array=array("val1","val2");

foreach($array as $k => $v){
$values[]= "($k, '$v' )";
}

print_r($values);
echo "<br>";
echo $values;

echo "<br>";

$values=implode(",", $values);  // trasformo array in stringa

echo $values; // variabile stringa da utilizzare nella query

$query = "INSERT INTO Tabella (col1,col2) VALUES $values";
 
Ciao Mr.X e grazie, ho provato il tuo codice ma inserisce soltanto i primi due record 0, 1 ad ogni estrazione
PHP:
$array=array("val1","val2");

foreach($array as $k => $v){
$values[]= "($k, '$v' )";
}

print_r($values);
echo "<br>";
echo $values;

echo "<br>";

$values=implode(",", $values);  // trasformo array in stringa

echo $values; // variabile stringa da utilizzare nella query

$query = "INSERT INTO estrazione (k,v) VALUES $values";

    // invio la query
    $result = mysql_query($query);
    
   // controllo l'esito
   if (!$result) {
    die("<span style=\"color:red: font-size: 14pt\"Errore nell'inserimento. Riprova...</span>" . mysql_error());
   }
   echo "<span style=\"color: green; font-size: 14pt\"><strong>Inserimento eseguito correttamente. </span><br><br><br></b>";
questo è il risultato a video:
Array ( [0] => (0, 'val1' ) [1] => (1, 'val2' ) )
(0, 'val1' ),(1, 'val2' )
dove sbaglio?
 
Ciao Max
in che senso solo i primi due record?

ti inserisce i dati solo nella colonna k e NON i valori in v (val1,val2) ?
 
Ciao Mr.X, mi inserisce:
colonna k: 2 righe la prima con valore 0, la seconda con valore 1
colonna v: 2 righe la prima con valore val1, la seconda con valore val2
 
Ciao Max
nel codice di esempio che ti ho scritto devi sostituire i valori dell'array con i tuoi ( o passare la tua variabile array al posto di $array).

Codice:
//...
foreach($Rilevatori_estratti as $k=>$v){
$values[]= "($k, '$v' )";
}

$values=implode(",", $values);  // trasformo array in stringa

echo $values; // variabile stringa da utilizzare nella query

$query = "INSERT INTO estrazione (k,v) VALUES $values";

//...

l'echo ti serve a verificare che i valori passati alla query siano quelli corretti
 
Ultima modifica:

Discussioni simili