• User

    Aiuto codice Column count doesn't match value count at row 1

    Salve a tutti,
    è da giorni che sto litigando con questo codice php per l'inserimento dei dati in un database mysql. Mi potete aiutare? Grazie
    L'errore che ricevo è che al momento di premere salva mi esce questo: Column count doesn't match value count at row 1

    <form method="post" action="">
    <?php
    $campo=array();
    $campo[]=array("type"=>"text","nome"=>"username");
    $campo[]=array("type"=>"text","nome"=>"data");
    $campo[]=array("type"=>"text","nome"=>"ora");
    $campo[]=array("type"=>"bool","nome"=>"campo1");
    $campo[]=array("type"=>"bool","nome"=>"campo2");
    $campo[]=array("type"=>"bool","nome"=>"campo3");
    $campo[]=array("type"=>"bool","nome"=>"campo4");
    $campo[]=array("type"=>"bool","nome"=>"campo5");
    $campo[]=array("type"=>"bool","nome"=>"campo6");
    $campo[]=array("type"=>"bool","nome"=>"campo7");
    $campo[]=array("type"=>"bool","nome"=>"campo8");
    $campo[]=array("type"=>"bool","nome"=>"campo9");
    $campo[]=array("type"=>"bool","nome"=>"campo10");
    $campo[]=array("type"=>"bool","nome"=>"campo11");
    $campo[]=array("type"=>"bool","nome"=>"campo12");
    $campo[]=array("type"=>"bool","nome"=>"campo13");
    $campo[]=array("type"=>"bool","nome"=>"campo14");
    $campo[]=array("type"=>"bool","nome"=>"campo15");
    $campo[]=array("type"=>"bool","nome"=>"campo16");
    $campo[]=array("type"=>"bool","nome"=>"campo17");
    $campo[]=array("type"=>"text","nome"=>"puntiatt");
    $campo[]=array("type"=>"text","nome"=>"puntiottenuti");
    
    foreach($campo as $k => $v){
        switch($v['type']){
            case "text":
                echo '<b>' . $v['nome'] . ':</b><input type="text" name="' . $v['nome'] . '" /><br/>';
            break;
            case "bool":
                echo '<b>' . $v['nome'] . ':</b><input type="checkbox" name="' . $v['nome'] . '" value="1" /><br/>';
            break;
            default:
                echo '<b>' . $v['nome'] . ':</b><input type="text" name="' . $v['nome'] . '" /><br/>';
            break;
        }
    }
    
    if(isset($_POST)){
         $server="****";
         $user="***";
         $pass="***"; 
         $db="**";
         $tabella="punti";
         $link=mysql_connect($server,$user,$pass)or die(mysql_error());
         $sel_db=mysql_select_db($db,$link)or die(mysql_error());
         $query="INSERT INTO $tabella VALUES(";
         $i=0;
         foreach($_POST as $k => $v){
              $v=htmlspecialchars($v);
              if($i==0){
                  $query.="'" . $v . "'";
              }else{
                  $query.=",'" . $v . "'";
              }
              $i++;
         }
         $query.=")";
         $exec=mysql_query($query,$link)or die(mysql_error());
         mysql_close($link);
         
    }
    ?>
    <input type="submit" value="Salva" />
    </form> 
    

  • ModSenior

    Ciao webmatsolution,

    fai un echo della query, e prova a vedere cosa va ad eseguire.


  • User

    Saresti cosi gentile da postarmi il codice?

    Grazie


  • ModSenior

    [php]
    <form method="post" action="">
    <?php
    $campo=array();
    $campo[]=array("type"=>"text","nome"=>"username");
    $campo[]=array("type"=>"text","nome"=>"data");
    $campo[]=array("type"=>"text","nome"=>"ora");
    $campo[]=array("type"=>"bool","nome"=>"campo1");
    $campo[]=array("type"=>"bool","nome"=>"campo2");
    $campo[]=array("type"=>"bool","nome"=>"campo3");
    $campo[]=array("type"=>"bool","nome"=>"campo4");
    $campo[]=array("type"=>"bool","nome"=>"campo5");
    $campo[]=array("type"=>"bool","nome"=>"campo6");
    $campo[]=array("type"=>"bool","nome"=>"campo7");
    $campo[]=array("type"=>"bool","nome"=>"campo8");
    $campo[]=array("type"=>"bool","nome"=>"campo9");
    $campo[]=array("type"=>"bool","nome"=>"campo10");
    $campo[]=array("type"=>"bool","nome"=>"campo11");
    $campo[]=array("type"=>"bool","nome"=>"campo12");
    $campo[]=array("type"=>"bool","nome"=>"campo13");
    $campo[]=array("type"=>"bool","nome"=>"campo14");
    $campo[]=array("type"=>"bool","nome"=>"campo15");
    $campo[]=array("type"=>"bool","nome"=>"campo16");
    $campo[]=array("type"=>"bool","nome"=>"campo17");
    $campo[]=array("type"=>"text","nome"=>"puntiatt");
    $campo[]=array("type"=>"text","nome"=>"puntiottenuti");

    foreach($campo as $k => $v){
    switch($v['type']){
    case "text":
    echo '<b>' . $v['nome'] . ':</b><input type="text" name="' . $v['nome'] . '" /><br/>';
    break;
    case "bool":
    echo '<b>' . $v['nome'] . ':</b><input type="checkbox" name="' . $v['nome'] . '" value="1" /><br/>';
    break;
    default:
    echo '<b>' . $v['nome'] . ':</b><input type="text" name="' . $v['nome'] . '" /><br/>';
    break;
    }
    }

    if(isset($_POST)){
    $server="";
    $user="
    ";
    $pass="
    ";
    $db="
    ";
    $tabella="punti";
    $link=mysql_connect($server,$user,$pass)or die(mysql_error());
    $sel_db=mysql_select_db($db,$link)or die(mysql_error());
    $query="INSERT INTO $tabella VALUES(";
    $i=0;
    foreach($_POST as $k => $v){
    $v=htmlspecialchars($v);
    if($i==0){
    $query.="'" . $v . "'";
    }else{
    $query.=",'" . $v . "'";
    }
    $i++;
    }
    $query.=")";
    echo
    $query;
    $exec=mysql_query($query,$link)or die(mysql_error());
    mysql_close($link);

    }
    ?>
    <input type="submit" value="Salva" />
    </form>
    [/php]


  • User

    Grazie 1000 molto gentile per il codice.
    ho inserito facendo questa prova:
    username ho messo matteo
    data ho messo 23/09/2009
    ora ho messo 12.32
    ed ho selezionato il primo campo

    il risultato è questo

    INSERT INTO punti VALUES('matteo','23/09/2009','12.34','1','12','32')Column count doesn't match value count at row 1
    

  • ModSenior

    Bisognerebbe vedere la struttura della tabella.
    Conviene comunque strutturare la query in modo da specificare il value a quale campo si riferisce, sicuramente qualche campo è invertito rispetto alla struttura della tabella.
    Un esempio pratico di come dovrebbe venire è:

    
    INSERT INTO punti(nome, data, ora, campo1, campo2 ,campo3) VALUES('matteo','23/09/2009','12.34','1','12','32')
    
    

  • User

    Non ho ben capito cosa mettere in values. cioè non ho gia i campi


  • ModSenior

    Il values va bene così com'è, devi modificare la query in modo da essere come quella che ti ho postato io, perchè sicuramente hai invertito l'ordine di qualche campo non essendo specificati e quindi ottieni quell'errore.


  • User

    Scusa ma il php mi è nuovo 🙂 se riesci ed hai voglia visto che il mio assistente sara' assente per un po se riesci postarmi la query modificata mi faresti un grandissimo favore


  • ModSenior

    Dovresti postare la struttura della tabella.
    Senza quella non posso aiutarti più di cosi.


  • Super User

    Se usi phpmyadmin ti basta accedere al tuo database e vedere la struttura della tabella 'punti'.

    Per una migliore flessibilità ti consiglio anch'io di utilizzare i nomi dei campi invece che riempire ordinatamente tutti i campi, tuttavia ciò non è indispensabile, e se ti fai una lista ordinata dei campi della tabella ti basta anche solo inserire i valori alle rispettive posizioni.