Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    10

    Foreach e dati in mysql

    Ciao a tutti

    posto per chiedere aiuto riguardo ad all'inserimento di alcuni dati all'interno del db del mio sito.

    ho creato un form in questo modo:

    codice:
    <form action="creazione.php" method="post">
    all'interno di questo form creo una serie di input in base alle statistiche di una tabella del database:


    Codice PHP:
    $result query("QUERY SELECT id, nome FROM definizionestatistiche ORDER BY id ASC"); 
    if (
    query('ROWS'$result)) {     
    $lista_att = array();     
    $conto_att query('ROWS'$result);          
    while (
    $rs query('while'$result))     {               
    $lista_att[] = array(                                 
    'id' => $rs['id'],                                 
    'nome' => $rs['nome']                             
    );          
    }          
    query('FREE'$result); } 
    li ho stampati in questo modo:

    codice:
    <input type="text" value="1" size="2" name="<?php echo $att['nome']; ?>"  id="<?php echo $att['id']; ?>" />
    quando io invio i dati alla pagina creazione.php mi trovo con una serie di variabili prese in post di questo tipo:

    $nomestatistica1
    $nomestatistica2

    che hanno come valore il valore impostato dall'utente nell'input
    Però devo inserire un campo in una tabella per ogni input che ho stampato in precedenza, in questo modo:

    tabella statistiche utente:
    id --
    nome = nome delal statistica presa da definizionestatistiche
    valore = valore impostato dall'utente


    e sinceramente non so proprio da che parte girarmi... qualche animo nobile che mi da una mano?

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    con un foreach scorri chiavi(name dell'input) e valori(value dell'input) dell'array $_POST e formuli la query di inserimento

    Codice PHP:
    $query "insert into tabella (id, nome, valore) values ";
    $conta=0;
    foreach (
    $_POST as $chiave=>$valore){
        if (! 
    $conta ) {$conta 1; }
        else 
    $query .= ", ";
        
    $query .= " (NULL, '$chiave', '$valore') ";


    attenzione agli apici per i values, se ad esempio sul db il numero della statistica è di tipo numerico gli apici vanno eliminati quindi verrebbe così:

    Codice PHP:
    $query "insert into tabella (id, nome, valore) values ";
    $conta=0;
    foreach (
    $_POST as $chiave=>$valore){
        if (! 
    $conta ) {$conta 1; }
        else 
    $query .= ", ";
        
    $query .= " (NULL, '$chiave', $valore) ";

    penso che l'id sia autoincrement, in questo caso si passa NULL per l'id

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    10
    Grazie mille per il suggerimento... ho provato ed effettivamente quando ho provato a stampare tutte le chiavi e tutti i valori funziona tutto perfettamente, il problema è che non mi inserisce i campi nel database.

    Sinceramente non ho idea di come mai...

    id è int 11 autoincrement
    nome è varchar 255
    valore int 11

    ovviamente ho cambiato tabella con il nome della tabella così :

    Codice PHP:
    $query "insert into prova (id, nome, valore) values "$conta=0
    foreach (
    $_POST as $chiave=>$valore){   
     if (! 
    $conta ) {$conta 1; }   
    else 
    $query .= ", ";  $query .= " (NULL, '$chiave', $valore) "; } 

    però niente da fare

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    Quando fai la query puoi anche vedere l'errore

    mysql_query($query) or die ( mysql_error()." ".$query );

    In questo modo se la query da errore l'esecuzione si ferma e ti dice qual'è l'errore.

    A quel punto posta qui l'errore.

    nb. non tenere mysql_error quando il lavoro girerà online, tuttavia è un ottimo strumento da sfruttare fintanto che provi il codice in locale.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    10
    ehm lo so, me lo ripetono in tanti non so perchè non mi viene mai in mente di usarlo...


    cmq viene fuori questo


    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(NULL, 'Destrezza', 1)' at line 1 insert into prova (id, nome, valore) values (NULL, 'Forza', 1) (NULL, 'Destrezza', 1)

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    infatti prima di inserire il secondo set di valori dovrebbe mettere la virgola cosa che non fa

    la query dovrebbe essere:
    insert into prova (id, nome, valore) values (NULL, 'Forza', 1) , (NULL, 'Destrezza', 1);

    invece stranamente ti viene
    insert into prova (id, nome, valore) values (NULL, 'Forza', 1) (NULL, 'Destrezza', 1);


    vedi se così funziona, comunque è colpa della variabile $conta, che dovrebbe servire a mettere la virgola prima di ogni set di valori solo dal secondo set in poi.

    Codice PHP:

    $query 
    "insert into prova (id, nome, valore) values ";
    $conta=0;
    foreach (
    $_POST as $chiave=>$valore){
        if ( 
    $conta == $conta 1
        else 
    $query .= ", ";
        
    $query .= " (NULL, '$chiave', $valore) ";


  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    10
    Grazie mille *_* così funziona ...


    mi hai salvato la vita sono settimane che penso a come fare

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    218
    Così è un modo alternativo.

    Codice PHP:
    $query "INSERT INTO prova (id, nome, valore) VALUES "

    $i 0;

    foreach (
    $_POST as $chiave=>$valore){ 

        
    $separatore = ($i == 0) ? '' ',';

        
    $query .= $separatore." (NULL, '$chiave', $valore)"

        
    $i++;


  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    10
    purtroppo è saltato fuori un altro problema...


    ho dovuto aggiungere alcuni campi alla tabella per tanto ho richiesto allo script di aggiungere ulteriori campi...ma improvvisamente non funziona più...
    ho provato cosi:

    Codice PHP:
    $query "INSERT INTO statistiche_pg (id, pg, nome, visibile, valore, tipo) VALUES ";  
     
    $i 0;  
    foreach (
    $_POST as $chiave=>$valore){       
    $separatore = ($i == 0) ? '' ',';     
     
    $query .= $separatore." (NULL, $pgid, '$chiave', '$chiave', $valore, '$tipo')";  mysql_query($query) or die ( mysql_error()." ".$query );    
     
    $i++; } 
    e anche cosi:

    Codice PHP:
    $query "insert into statistiche_pg (id, pg, nome, visibile, valore, tipo) values "
    $conta=0
    foreach (
    $_POST as $chiave=>$valore){     
    if ( 
    $conta == $conta 1;      else $query .= ", ";     
    $query .= " (NULL, $pgid, '$chiave', '$chiave', $valore, '$tipo') ";     
    mysql_query($query) or die ( mysql_error()." ".$query ); } 
    la cosa che non mi spiego è che in entrambi i modi se tengo
    Codice PHP:
    mysql_query($query) or die ( mysql_error()." ".$query ); 
    Mi inserisce i dati nel database, ma ogni variabile la inserisce 4 volte.
    Mentre se la levo non fa proprio nulla...

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    cambia il tuo codice così
    Codice PHP:
    $query "insert into statistiche_pg (id, pg, nome, visibile, valore, tipo) values "
    $conta=0
    foreach (
    $_POST as $chiave=>$valore){     
        if ( 
    $conta == $conta 1;      
        else 
    $query .= ", ";     
        
    $query .= " (NULL, $pgid, '$chiave', '$chiave', $valore, '$tipo') ";     
    }
    mysql_query($query) or die ( mysql_error()." ".$query ); 
    come facevi tu in sostanza la prima volta che entrava nel ciclo inseriva il primo record, la seconda volta reinseriva il primo record e il secondo, per risolvere basta effettuare la query fuori dal ciclo, comunque altro consiglio che ti do è quello di ripassare come funzionano i cicli (for, while, do while, foreach) e di utilizzare un'opportuna indentazione, altrimenti rischi di creare codice poco chiaro anche a te stessa.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.