[PHP] Problemi su inserimento array nel db

Discussione in 'PHP' iniziata da Max61, 24 Giugno 2019.

  1. Max61

    Max61 Utente Attivo

    Registrato:
    2 Marzo 2014
    Messaggi:
    602
    Mi Piace Ricevuti:
    3
    Punteggio:
    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: 24 Giugno 2019
  2. mr.x

    mr.x Utente Attivo

    Registrato:
    9 Aprile 2016
    Messaggi:
    213
    Mi Piace Ricevuti:
    22
    Punteggio:
    28
    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: 24 Giugno 2019
  3. mr.x

    mr.x Utente Attivo

    Registrato:
    9 Aprile 2016
    Messaggi:
    213
    Mi Piace Ricevuti:
    22
    Punteggio:
    28
    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"
     
  4. Max61

    Max61 Utente Attivo

    Registrato:
    2 Marzo 2014
    Messaggi:
    602
    Mi Piace Ricevuti:
    3
    Punteggio:
    18
    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?
     
  5. mr.x

    mr.x Utente Attivo

    Registrato:
    9 Aprile 2016
    Messaggi:
    213
    Mi Piace Ricevuti:
    22
    Punteggio:
    28
    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) ?
     
  6. Max61

    Max61 Utente Attivo

    Registrato:
    2 Marzo 2014
    Messaggi:
    602
    Mi Piace Ricevuti:
    3
    Punteggio:
    18
    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
     
  7. mr.x

    mr.x Utente Attivo

    Registrato:
    9 Aprile 2016
    Messaggi:
    213
    Mi Piace Ricevuti:
    22
    Punteggio:
    28
    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: 26 Giugno 2019
  8. Max61

    Max61 Utente Attivo

    Registrato:
    2 Marzo 2014
    Messaggi:
    602
    Mi Piace Ricevuti:
    3
    Punteggio:
    18
    FUNZIONA!!!
    GRAZIE
     
Sto caricando...

Condividi questa Pagina