Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Problema query con ciclo per form classifica

    Ciao a tutti,
    sto creando una classifica con 80 forms, cosi composta

    codice:
    <form action="xxx/clasificamod.php" method="post"> 
    Nome01: <input name="nome01" type="text" />
    Punteggio: <input name="score01" type="text" />
     
    Nome02: <input name="nome02" type="text" /> 
    Punteggio: <input name="score02" type="text" />
     
    Nome03: <input name="nome03" type="text" /> 
    Punteggio: <input name="score03" type="text" />
    
    Nome04: <input name="nome04" type="text" /> 
    Punteggio: <input name="score04" type="text" />
    ecc...fino a 80 valori.
    Ilproblema è nel file classifica mod.

    Il mio ciclo è
    Codice PHP:
    for ($i=0$i<=80$i++)
        { 
    $v_nome=$_POST['nome'];

    $v_score=$_POST['score'];


    $query="insert into classifica(nome.,score) values('$v_nome','$v_score')  


    "
    ;
       } 
    che so sicuramente sarà sbagliato. Miotete dare una mano che nn ne esco fuori?
    Voglio che venga postato nel db i nomi dei giocatori e il punteggio.
    Poi ogni volta che si riscrive nel form,venga cancellato il valore precedente e inserito il nuovo valore.
    Sono allo sfinimento

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    128
    sì dunque procedo per punti:

    1) non sono 80 form, ma 80 coppie di campi, il form è unico
    2) nel form non valeva la pena scrivere 80 volte ogni coppia, potevi fare un ciclo anche lì

    3) quandi tu fai $_POST, passi il valore di un campo. Se fai in un ciclo di 890 volte $_POST['nome'], lui ti passerà 80 volte lo stesso campo, che tra l'altro non esiste perchè non hai nessun campo che si chiama nome (ma si chiamano nome01,nome02,ecc.)
    4) nella query c'è nome.,score, devi togliere il punto
    5) ti conviene fare un addslashes quando recuperi i valori dei nomi, se nel nome ci sono degli apici ti spacca tutto

    6) $query="insert into classifica(nome,score) values('$v_nome','$v_score')"; -> così hai preparato la query, ma poi la devi eseguire con mysql_query($query)

    Nessun altro errore

  3. #3
    Originariamente inviato da diabolikk
    sì dunque procedo per punti:

    1) non sono 80 form, ma 80 coppie di campi, il form è unico
    2) nel form non valeva la pena scrivere 80 volte ogni coppia, potevi fare un ciclo anche lì

    3) quandi tu fai $_POST, passi il valore di un campo. Se fai in un ciclo di 890 volte $_POST['nome'], lui ti passerà 80 volte lo stesso campo, che tra l'altro non esiste perchè non hai nessun campo che si chiama nome (ma si chiamano nome01,nome02,ecc.)
    4) nella query c'è nome.,score, devi togliere il punto
    5) ti conviene fare un addslashes quando recuperi i valori dei nomi, se nel nome ci sono degli apici ti spacca tutto

    6) $query="insert into classifica(nome,score) values('$v_nome','$v_score')"; -> così hai preparato la query, ma poi la devi eseguire con mysql_query($query)

    Nessun altro errore
    si sorry, punto 1 espresso male

    4) nella query c'è nome.,score, devi togliere il punto
    Si hai ragione,avevo un altro valore, ma poi tolto e ho lasiato il punto

    il 5 e il 6 mi potresti spiegare meglio?
    No ho mai fatto questo genere di query ed è la primavolta che me letrovo

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    128
    nel form ho visto che cominci a contare da uno, quindi anche il contatore deve partire da 1, anche perchè partendo da 0 fino a <=80 conterebbe 81 volte

    Codice PHP:

    for ($i=1$i<=80$i++)
        { 
    // ad ogni giro mi genero i nomi dei campi da prendere
    $name "nome0".$i;
    $val "score0".$i;;
    // recupero per ogni giro il valore dei campi, nel caso del nome uso la funzione addslashes per trattare eventuali apici
    $v_nomeaddslashes($_POST[$name]);
    $v_score=$_POST[$val];


    $query="insert into classifica(nome,score) values ('$v_nome','$v_score')";
    mysql_query($query);
       } 
    così dovrebbe funzionare, se non funziona proviamo a stampare gli errori.
    Non è ancora ottimale, perchè così ad ogni giro fai una insert, mentre sarebbe più pulito salvarsi tutti i valori e fare una query unica alla fine, ma è un punto di partenza!

  5. #5
    Utente di HTML.it L'avatar di jcsnake
    Registrato dal
    Jun 2010
    Messaggi
    629
    Ciao l'idea di base è corretta, solo che ci sono dei piccoli errori sia nella pagina che richiama la funzione php che in classificamod.php stesso.
    Come prima cosa ti suggerirei di creare i campi in cui devi inserire Nome e Punteggio con un ciclo for sempre in php.

    Codice PHP:

    for ($i=1$i<=80$i++)
         echo 
    "Nome$i: <input name='nome$i' type='text' />
                  Punteggio: <input name='score
    $i' type='text' />
    "

    Così adesso in classificamod.php puoi fare più semplicemente

    Codice PHP:

    for ($i=1$i<=80$i++)
    {
        
    $v_nome=$_POST['nome$i'];

     
    $v_score=$_POST['score$i'];


    $query="insert into classifica(nome,score) values('$v_nome','$v_score')";
    $ris=mysql_query($query);
    if(
    $ris//inserimento avvenuto correttamente
    else //gestione dell'errore

    Questo nel caso in cui tu debba inserire solo nuovi campi, se devi invece modificarli quelli già esistenti devi cambiare la query sql.

    Spero di esserti stato d'aiuto.

  6. #6
    Vi ringrazio davvero. Appena vado in ufficio provo!
    Grazie davvero!!

  7. #7
    Originariamente inviato da jcsnake
    Ciao l'idea di base è corretta, solo che ci sono dei piccoli errori sia nella pagina che richiama la funzione php che in classificamod.php stesso.
    Come prima cosa ti suggerirei di creare i campi in cui devi inserire Nome e Punteggio con un ciclo for sempre in php.

    Codice PHP:

    for ($i=1$i<=80$i++)
         echo 
    "Nome$i: <input name='nome$i' type='text' />
                  Punteggio: <input name='score
    $i' type='text' />
    "

    Così adesso in classificamod.php puoi fare più semplicemente

    Codice PHP:

    for ($i=1$i<=80$i++)
    {
        
    $v_nome=$_POST['nome$i'];

     
    $v_score=$_POST['score$i'];


    $query="insert into classifica(nome,score) values('$v_nome','$v_score')";
    $ris=mysql_query($query);
    if(
    $ris//inserimento avvenuto correttamente
    else //gestione dell'errore

    Questo nel caso in cui tu debba inserire solo nuovi campi, se devi invece modificarli quelli già esistenti devi cambiare la query sql.

    Spero di esserti stato d'aiuto.
    perfetto, funziona benissimo!
    Unica cosa che mi manca ora, è fare in modo che ogni volta che si reinserisce il valore, mi faccia l'update.
    Se esempio per nome01 avevo inserito ciao, score01 1000

    se reinserisco
    nome01 bel score01 2000

    Mi cancelli i dati inseriti precedentemente e mi inserisce i nuovi valori.

  8. #8
    Vorrei provare ad aiutarti io se posso intromettermi... per fare l'update considerando questo codice:

    codice:
    for ($i=1; $i<=80; $i++) 
    { 
        $v_nome=$_POST['nome$i']; 
    
     $v_score=$_POST['score$i']; 
    
    
    $query="insert into classifica(nome,score) values('$v_nome','$v_score')"; 
    $ris=mysql_query($query); 
    if($ris) //inserimento avvenuto correttamente 
    else //gestione dell'errore 
    }
    io come prima cosa, ancora prima del ciclo for farei una bella select sulla classifica e mi farei restituire con il comando mysql_result il valore del nome e dello score così che se il campo è vuoto li farei fare una insert, altrimenti un update... in sostanza scriverei questo:

    codice:
    $query="select*from classifica limit 80";
    $risposta=mysql_query($query);
    
    for ($i=1; $i<=80; $i++) 
    {
    $nome=mysql_result($risposta,$i,0);
    $score=mysql_result($risposta,$i,1); 
    if (empty($nome)&&empty($score)){
        
    $v_nome=mysql_escape_string($_POST['nome$i']); 
    
     $v_score=mysql_escape_string($_POST['score$i']); 
    
    $query1="insert into classifica(nome,score) values('$v_nome','$v_score')"; 
    $ris=mysql_query($query1); 
    }
    else{
    $v_nome=mysql_escape_string($_POST['nome$i']); 
    
     $v_score=mysql_escape_string($_POST['score$i']); 
    
    $query1="update classifica set score='$v_score' where nome='$v_nome'"; 
    $ris=mysql_query($query1); 
    }
    if($ris) //inserimento avvenuto correttamente 
    else //gestione dell'errore 
    }
    Spero sia giusto... chiedo conferma cmq

  9. #9
    Dimenticavo, per funzionare la tabella classifica deve avere come primo elemento il nome e come secondo elemento lo score altrimenti bisogna modificare i 2 parametri del mysql_result di $nome e $score.

  10. #10
    Grzie Vittorio, lo provo appena posso!
    Per quanto riguarda lo script precedente, di jcsnake, ho visto che nel database continuava a inserire i valori nel db, allora ho inserito ID, come primario e impostato fino a 80, poi inserito un on duplicate key update, che faccia in modo che ad ogni inserimento, i vecchi dati vadano cancellati e inseriti dei nuovi fino a 80.

    Grazie davvero ragazzi!ottimo forum!!

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.