Inviare dati da form a database

  • Creatore Discussione Creatore Discussione anthares
  • Data di inizio Data di inizio

anthares

Nuovo Utente
8 Gen 2012
26
0
0
Ciao a tutti, sono vari giorni che cerco di capire cosa sbaglio nell'inserimento di questo codice php..

il codice del form è questo:
HTML:
<form method="post" name="form_setv&setp" action="./"> 
        		<input type="text" name="setv" width="6px" height="6px"/>
         <INPUT type="submit" name="invia_set" value="S"> </form>

ed è presente in un file php.

Il codice php per l'invio dei dati al database:
PHP:
 $connessione_db = mysql_connect('localhost', '***', '***');

			mysql_select_db('***');
		   
		   $setv = $_POST['setv'];
		  		   
		   $sql = "INSERT INTO PN_PARTITA_UTENTI (set_vinti) VALUES ('".$setv."') WHERE id_partita = $id_partita AND user_id=3";
		    
           $result = mysql_query($sql);

Nonostante metta un valore diverso da zero, in set_vinti rimane 0 e non aggiorna il valore
setv.JPG

Cosa sbaglio? vi chiedo aiuto!
 
A quanto mi risulta sull'action non va bene "./" quindi prova a mettere

action="<?php echo $_SERVER['PHP_SELF']; ?>"
 
grazie del consiglio, fortunatamente ho apportato questa modifica e funziona:

PHP:
mysql_query("UPDATE PN_PARTITA_UTENTI SET set_vinti=$setv, set_persi=$setp WHERE id_partita = $id_partita AND username = '$username' ");


Ora mi è sorto un altro dubbio.. esiste un modo per inviare i dati di vari form premendo un solo pulsante submit? Per far capire meglio ti mostro la schermata del sito:
lista.JPG

Senza far caso all'errore di css per l'allineamento verticale :rolleyes: come puoi vedere si crea automaticamente un form per ogni scheda utente, all'interno di ogni campo devo inserire dei valori numerici diversi per ognuno.. mi piacerebbe fare un'unica compilazione e poi mandare i dati al database.

Il mio codice è questo:
HTML:
<?php 
$count = count($ListaPartecipanti);
for ($i = 1; $i <= $count; $i++) {
?>


  <div class="player_cont">
  
        <div class="player_ico"><?php echo get_avatar($ListaPartecipanti_avatar[$i], $size = '48' ); ?>
        </div>
        <div class="player_info_cont">
        	<a class="player_name" title="Vedi il profilo di <?php echo $ListaPartecipanti[$i]?>" href="http://volleynapoli.altervista.org/sito/iscritti/<?php echo $ListaPartecipanti[$i]?>" >
			<?php echo $ListaPartecipanti[$i]?></a>
       	  </div>
			<?php if( current_user_can( 'manage_options' ) ) { 
			if ($stato_partita = 'AT') { 
			if($data_attuale > $data_fine_confronto){
			?> 
            <div class="player_link_cont">
              	<form method="post" name="form_setv&setp" action="./"> 
        		<input style="visibility:hidden" type="text" name="username" value="<?php echo $ListaPartecipanti[$i]?>" />
                <input type="text" name="setv" size="1px"/><input type="text" name="setp" size="1px"/>
         <INPUT type="submit" name="invia_set" value="go"> </form>
         
		 
      
       <?php  // AGGIUNGI SET VINTI E PERSI

 $connessione_db = mysql_connect('localhost', '***', '***');

			mysql_select_db('***');
		   
		   $setv = $_POST['setv'];
		   $setp = $_POST['setp'];
		   $username = $_POST['username'];
		   
		         
		   mysql_query("UPDATE PN_PARTITA_UTENTI SET set_vinti=$setv, set_persi=$setp WHERE id_partita = $id_partita AND username = '$username' ");
		    
            ?>
         

            </div>
          
            
		<?php } } }?>
        

        
		
        
   </div>


<?php } ?>
 
Ultima modifica:
Scusa ma non ho capito bene cosa intendi dire; ho visto che ogni utente ha due campi vuoti ma non ho capito cosa intendi fare
 
Inserisco dei valori numerici e li invio al database... il problema è che con questo codice si creano 14 form, quindi per ogni utente devo premere GO. Secondo te c'è un modo per fare un'unica compilazione e a fine lista un solo pulsante GO?
 
Scusa la mia insistenza, ma secondo me forse hai adottato una logica sbagliata; cmq per inviare più form con un solo submit potresti racchiudere tutto in
una funzione contenente ad esempio:

document.nomeform1.submit();
document.nomeform2.submit();
 
uaa è una funzione che non ho mai visto.. potresti fare un esempio per favore? c'è online qualche guida che lo spiega? spero sia davvero la soluzione che cerco!
 
Scusa se rispondo solo ora;
è semplicissima (si tratta di javascript);

Una funzione come dice il nome stesso racchiude delle "funzionalità"; in quetso caso gli abbiamo indicato tramite javascript di fare il submit
rispettivamente di nomeform1 e nomeform2 (i nomi ad esempio sarebbero presi dal tag name vicino al form.

Codice:
/**racchiudo tutti gli invii all'interno di una funzione
function test(){

  document.nomeform1.submit(); //significa che ho un <form name='nomeform1'....
  document.nomeform2.submit(); //significa che ho un <form name='nomeform2'....



}

//richiamo la funzione
<a href='#' onclick='javascript:test()'>Invia i dati di tutti i form</a>
 
Scusa se rispondo solo ora;
è semplicissima (si tratta di javascript);

Una funzione come dice il nome stesso racchiude delle "funzionalità"; in quetso caso gli abbiamo indicato tramite javascript di fare il submit
rispettivamente di nomeform1 e nomeform2 (i nomi ad esempio sarebbero presi dal tag name vicino al form.

Codice:
/**racchiudo tutti gli invii all'interno di una funzione
function test(){

  document.nomeform1.submit(); //significa che ho un <form name='nomeform1'....
  document.nomeform2.submit(); //significa che ho un <form name='nomeform2'....



}

//richiamo la funzione
<a href='#' onclick='javascript:test()'>Invia i dati di tutti i form</a>


Grazie per la risposta, sempre gentilissimo. Quindi se ho capito bene devo aggiungerlo subito dopo il form in questo modo..

Codice:
<form method="post" name="form_setv&setp" action="./"> 
        		<input style="visibility:hidden" type="text" name="username" value="<?php echo $ListaPartecipanti[$i]?>" />
                <input type="text" name="setv" size="1px"/><input type="text" name="setp" size="1px"/>
         <INPUT type="submit" name="invia_set" value="go"> </form>


function test(){

  document.form_setv&setp.submit(); 

}

<a href='#' onclick='javascript:test()'>Invia i dati di tutti i form</a>
 
Un'altra alternativa potrebbe essere quella di chiudere tutti i campi da compilare in un'unico form.
Era una soluzione che avevo tenuto conto ma purtroppo non funziona in questo caso.. se vedi nel codice ho solo un form che si ripete in automatico per ogni utente che si aggiunge alla lista.
 
Perdonami ma da quel poco che ho capito :book: devi prendere i dati di più utenti e passarli da qualche altra parte; (scusa la mia testa ma facendo un esempio pratico forse riesco a capire):

- con una query prelevi i dati di tutti gli utenti;
- fai un ciclo for e metti tutti questi dati in uno / più array
- Trasmetti questo array dove ti serve
 
Scusami tu, non ho spiegato bene il funzionamento della pagina php..

Con $ListaPartecipanti[$i] prelevo gli utenti uno ad uno che si posizionano a formare una lista completa, poi quando if($data_attuale > $data_fine_confronto) genero un form per ogni utente
HTML:
<form method="post" name="form_setv&setp" action="./"> 
        		<input style="visibility:hidden" type="text" name="username" value="<?php echo $ListaPartecipanti[$i]?>" size="1px"/>
                <input type="text" name="setv" size="1px"/><input type="text" name="setp" size="1px"/>
         <INPUT type="submit" name="invia_set" value="SET!"> </form>
ed infine compilando i riquadri <input type="text" name="setv" size="1px"/><input type="text" name="setp" size="1px"/> li trasmetto al database in questo modo mysql_query("UPDATE PN_PARTITA_UTENTI SET set_vinti=$setv, set_persi=$setp WHERE id_partita = $id_partita AND username = '$username' ");

Perdonami per il linguaggio poco professionale che ho usato, sto andando avanti un pò da autodidatta e un pò col tuo aiuto.. ci sto perdendo la testa ma puoi ben immaginare la soddisfazione nel vedere che il programmato funziona!
 
Con $ListaPartecipanti[$i] prelevo gli utenti uno ad uno che si posizionano a formare una lista completa, poi quando if($data_attuale > $data_fine_confronto) genero un form per ogni utente

bo ci provo....
Allora potresti ad esempio

PHP:
<form>

<?php 
//seleziono tutti gli utenti con data_attuale>data_fine_controllo
$sql=("SELECT * FROM UTENTI WHERE data_attuale>data_fine_controllo");
$sql_query=mysql_query($sql);

while($row=mysql_fetch_array($sql_query)){

$id_utente=$row['id'] //ricavo l'identificativo di ogni utente
echo "<input name='utente".$i."' />" //dato / dati da modificare

}

?>
</form>

Ti premetto non ho guardato bene le tue tabelle come sono strutturate e quindi non so se le query fanno proprio al caso tuo ma guarda l'idea: Prelevi l'id di ogni utente e lo inserisci all'interno del tag name; in questo modo per ogni utente puoi prelevare i dati con un unico form
 
Non ho capito bene qual'è il tuo consiglio.. guarda l'immagine che ti posto qua.. lista giocatori.JPG

è un esempio di lista di giocatori che hanno aderito alla partita, e a fine giornata occorre inserire i risultati della partita attraverso i set vinti e i set persi di ognuno.

Come creo questa lista? usando la variabile $ListaPartecipanti[$i] prendo da una tabella il nome dell'utente che ha aderito a quella specifica partita, con $ListaPartecipanti_avatar[$i] il suo avatar.. quando la data attuale supera quella di confronto (ossia quando la partita è stata disputata), se sono amministratore si attivano i campi per inserire i set vinti e persi, una coppia di campi per ogni giocatore, proprio come nell'immagine sopra. La cosa che mi piacerebbe fare è usare un unico pulsante submit a fine lista per inviare tutti i dati dei campi in una sola volta.

Se vedi il codice io uso un solo codice form che poi si replica automaticamente per ogni giocatore.. e penso sia qua il problema, solo che non so davvero dove mettere mano. Da autodidatta mi sto spingendo in frontiere che non avevo ancora valicato!

PHP:
<?php
// Verifico se l'utente è loggato con la variabile $isLogged ...
// Variabili utilizzate ... 
// $stato_partita
// $NomeUtente
// $CodiceUtente
// $numero_partita = 1;
// $data_partita = '26-04-2010';
// $numero_partecipanti = 14;
// $data_inizio_iscrizione = '24-04-2010-07-00';
// $data_fine_iscrizione = '25-04-2010-19-00';
//
// Se è vuoto , la partita è "ATTIVA E VALIDA". Se è pieno ...le iscrizioni sono chiuse...
// $messaggio_stato_partita
// $link_forum = '#';
// $id_partita (identificativo partita)
// $UtentePresente (Nella partita ... "si" / "no" )
// $UtenteAutorizzatoPartita (Autorizzato a partecipare si / no)
// $ListaPartecipanti ( array() )
// $ListaRiserve = ( array() )
// $ListaPartecipanti_avatar ( array() )
// $ListaPartecipanti_ruolo ( array() )
// $ListaPartecipanti_zona ( array() )
// $ListaRiserve_avatar = ( array() )
// $ListaCancellati = array()
// $ListaCancellati_avatar = array()
// $PostiLiberi
// $TipoPartita (C=Classica, O=Open, P=Promozionale,  A=Allenamento)

include '../sito/php_volleynapoli/pnbp_crea_partita.php';
include '../sito/php_volleynapoli/pnbp_check_login.php';
include '../sito/php_volleynapoli/pnbp_iscrivi_cancella_giocatore.php';
include '../sito/php_volleynapoli/pnbp_check_partecipazione.php';
include '../sito/php_volleynapoli/pnbp_lista_partecipanti.php';
include '../sito/php_volleynapoli/pnbp_aggiorna_giocatore.php';

?>

<div class="titolo_lista"><strong>LISTA GIOCATORI:</strong> <?php echo $PostiLiberi?> posti disponibili</div>
<div class="lista">


<?php 
$count = count($ListaPartecipanti);
for ($i = 1; $i <= $count; $i++) {
?>

  <div class="player_cont">
  
        <div class="player_ico"><?php echo get_avatar($ListaPartecipanti_avatar[$i], $size = '48' ); ?>
        </div>
        <div class="player_info_cont">
        	<a class="player_name" title="Vedi il profilo di <?php echo $ListaPartecipanti[$i]?>" href="http://volleynapoli.altervista.org/sito/iscritti/<?php echo $ListaPartecipanti[$i]?>" >
			<?php echo $ListaPartecipanti[$i]?></a>
       	  </div>
			<?php if( current_user_can( 'manage_options' ) ) { 
			if ($stato_partita = 'AT') { 
			if($data_attuale > $data_fine_confronto){
			?> 
            <div class="player_link_cont">
              	<form method="post" name="form_setv&setp" action="./"> 
        		<input style="visibility:hidden" type="text" name="username" value="<?php echo $ListaPartecipanti[$i]?>" size="1px"/>
                <input type="text" name="setv" size="1px"/><input type="text" name="setp" size="1px"/>
        		<INPUT type="submit" name="invia_set" value="s"> </form>
         
<?php  // AGGIUNGI SET VINTI E PERSI

$connessione_db = mysql_connect('localhost', '***', '***');
mysql_select_db('my_***');
		   
$setv = $_POST['setv'];
$setp = $_POST['setp'];
$username = $_POST['username'];
		   
mysql_query("UPDATE PN_PARTITA_UTENTI SET set_vinti=$setv, set_persi=$setp WHERE id_partita = $id_partita AND username = '$username' ");
		    
			
// CALCOLO IL NUMERO DI SET VINTI E PERSI e AGGIORNO TABELLA...

$query = "SELECT sum(set_vinti) as num_setv FROM PN_PARTITA_UTENTI where username = '$username' ";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);

$user_setv = $row['num_setv'];

mysql_query("UPDATE PN_USER_EXTENDED SET user_setv = $user_setv WHERE username = '$username' ");


$query = "SELECT sum(set_persi) as num_setp FROM PN_PARTITA_UTENTI where username = '$username' ";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);

$user_setp = $row['num_setp'];

mysql_query("UPDATE PN_USER_EXTENDED SET user_setp = $user_setp WHERE username = '$username' ");
			
            ?>
         
            </div>
                    
		<?php } } }?>
   </div>

<?php } ?>
 
Ultima modifica:

Discussioni simili