Problema su un UPDATE multiplo

di il
8 risposte

Problema su un UPDATE multiplo

Ciao a tutti, dovrei fare un UPDATE multiplo in una tabella di diverse righe con una query recuperando i valori da un form.
Il codice php su cui sto sbattendo la testa è questo:

switch($_POST['mod_part']){
case 'mod_partite':
$sq_casa = $_POST['sq_casa'];
$sq_osp = $_POST['sq_osp'];
$gol_sq_casa_and = $_POST['gol_sq_casa_and'];
$gol_sq_osp_and = $_POST['gol_sq_osp_and'];
$gol_sq_casa_rit = $_POST['gol_sq_casa_rit'];
$gol_sq_osp_rit = $_POST['gol_sq_osp_rit'];

foreach($sq_casa as $k=>$v){
$strsql_modpart = "
UPDATE partite_SerieA
SET sq_casa='".$sq_casa[$k]."',
sq_osp='".$sq_osp[$k]."',
gol_sq_casa_and='".$gol_sq_casa_and[$k]."',
gol_sq_osp_and='".$gol_sq_osp_and[$k]."',
gol_sq_casa_rit='".$gol_sq_casa_rit[$k]."',
gol_sq_osp_rit='".$gol_sq_osp_rit[$k]."'
WHERE id_stagione='$str_idstag' AND id_giornata_and='$str_id_gior_and' AND id_giornata_rit='$str_id_gior_rit'
";
$rs_modpart = @mysqli_query($link,$strsql_modpart) or die("Errore al DB. " . mysqli_error($link));
}
if($rs_inspart){
echo "<h3><i class='fas fa-check-circle'></i><b> Partite modificate correttamente.</b></h3>";
}else{
echo "NO!";
}

break;
}

$strsql_sel_part = "
SELECT partite_SerieA.*,
(SELECT nome_squadra FROM squadre_SerieA WHERE sq_casa=squadre_SerieA.id_squadra) AS squadra_casa,
(SELECT nome_squadra FROM squadre_SerieA WHERE sq_osp=squadre_SerieA.id_squadra) AS squadra_fuori
FROM partite_SerieA
WHERE id_stagione='$str_idstag' AND id_giornata_and='$str_id_gior_and'
ORDER BY squadra_casa ASC
";
$rs_sel_part = @mysqli_query($link,$strsql_sel_part) or die("Errore di connessione al DB. " . mysqli_error($link));
$count=mysqli_num_rows($rs_sel_part);
while($riga = mysqli_fetch_array($rs_sel_part)){
$str_id_sq_casa = $riga['sq_casa'];
$str_id_sq_osp = $riga['sq_osp'];
$str_gol_sq_casa_and = $riga['gol_sq_casa_and'];
$str_gol_sq_osp_and = $riga['gol_sq_osp_and'];
$str_gol_sq_casa_rit = $riga['gol_sq_casa_rit'];
$str_gol_sq_osp_rit = $riga['gol_sq_osp_rit'];

E il codice del form è il seguente:

<form method="POST" action="step4_serieA_mod_partite.php?stag=<?php echo $str_idstag; ?>&idgior_a=<?php echo $str_id_gior_and; ?>&idgior_r=<?php echo $str_id_gior_rit; ?>">
<input name="ids" type="hidden" value="ids" />
<input name="mod_part" type="hidden" value="mod_partite" />
<div class="row uniform">
<div style="width:12.5%;">
<input type="text" name="gol_sq_casa_and[]" placeholder="Gol and" value="<?php echo $str_gol_sq_casa_and; ?>"/>
</div>
<div style="width:12.5%;">
<input type="text" name="gol_sq_osp_and[]" placeholder="Gol and" value="<?php echo $str_gol_sq_osp_and; ?>"/>
</div>
<div style="width:25%;">
<div class="select-wrapper">
<select name="sq_casa[]">
<option value="0" selected>Squadra Casa</option>
<?php
$strsql_sel_squa = "
SELECT campionati_SerieA.id_stagione, squadre_SerieA.id_squadra,nome_squadra
FROM campionati_SerieA
JOIN squadre_SerieA ON campionati_SerieA.idsquadra=squadre_SerieA.id_squadra
WHERE id_stagione='$str_idstag'
ORDER BY nome_squadra
";
$rs_sel_squa = @mysqli_query($link,$strsql_sel_squa) or die("Errore di connessione al DB. " . mysqli_error($link));
while($riga = mysqli_fetch_array($rs_sel_squa)){
$sqc = array($riga['id_squadra'] => $riga['nome_squadra']);
foreach($sqc as $chiave => $valore){
if($riga['id_squadra'] == $str_id_sq_casa){
echo "<option value='$chiave' selected>$valore</option>";
}else{
echo "<option value='$chiave'>$valore</option>";
}
}
}
?>
</select>
</div>
</div>
<!-- Break -->
<div style="width:25%;">
<div class="select-wrapper">
<select name="sq_osp[]">
<option value="0" selected>Squadra Ospite</option>
<?php
$strsql_sel_squa = "
SELECT campionati_SerieA.id_stagione, squadre_SerieA.id_squadra,nome_squadra
FROM campionati_SerieA
JOIN squadre_SerieA ON campionati_SerieA.idsquadra=squadre_SerieA.id_squadra
WHERE id_stagione='$str_idstag'
ORDER BY nome_squadra
";
$rs_sel_squa = @mysqli_query($link,$strsql_sel_squa) or die("Errore di connessione al DB. " . mysqli_error($link));
while($riga = mysqli_fetch_array($rs_sel_squa)){
$sqf = array($riga['id_squadra'] => $riga['nome_squadra']);
foreach($sqf as $chiave => $valore){
if($riga['id_squadra'] == $str_id_sq_osp){
echo "<option value='$chiave' selected>$valore</option>";
}else{
echo "<option value='$chiave'>$valore</option>";
}
}
}
?>
</select>
</div>
</div>
<div style="width:12.5%;">
<input type="text" name="gol_sq_casa_rit[]" placeholder="Gol rit" value="<?php echo $str_gol_sq_casa_rit; ?>"/>
</div>
<div style="width:12.5%;">
<input type="text" name="gol_sq_osp_rit[]" placeholder="Gol rit" value="<?php echo $str_gol_sq_osp_rit; ?>"/>
</div>
</div>
<?php
}
?>
<div class="row uniform">
<div class="12u$">
<ul class="actions">
<li><input type="submit" value="Modifica tutte le partite" /></li>
</ul>
</div>
</div>
</form>

Come risultato mi cambia i valori solamente dell'ultima riga, non riesco a trovare soluzione.

Grazie dell'aiuto
Ciao
Tiziano

8 Risposte

  • Re: Problema su un UPDATE multiplo

    Quando incontri difficoltà devi scomporre i dati, dividi il form dalle query.
    <form method="POST" action="process.php">
      <select name="taskOption[]">
        <option value="First">First</option>
        <option value="Second">Second</option>
        <option value="Third">Third</option>
      </select>
      <input type="submit" value="Send"/>
    </form>
    <?php
    if(isset($_POST['taskOption'])) {
    var_dump($_POST['taskOption']);
    }
    Se metti 0 nel value avrai zero se metti First avrai First.
  • Re: Problema su un UPDATE multiplo

    Ciao Hormus grazie della risposta, cerco di spiegarlo meglio il mio problema che non ho ben capito la tua risposta, dunque da tuo consiglio includo tra i TAG codice tutta la pagina che dovrebbe fare l'UPDATE multiplo sulla tabella, così si può vedere tutto, che avevo messo prima solo le porzioni di codice che secondo me interessavano.
    
    <?php
    	$str_idstag = $_GET['stag'];
    	$str_id_partita = $_GET['idpart'];
    	$str_id_sq_casa = $_GET['sqc'];
    	$str_id_sq_osp = $_GET['sqf'];
    	$str_id_gior_and = $_GET['idgior_a'];
    	$str_id_gior_rit = $_GET['idgior_r'];
    ?>
    <header>
    	<h3>Modificare le partite per la Stagione <?php echo $str_annostag; ?></h3>
    	<p><?php echo "Giornate ".$str_id_gior_and."° - ".$str_id_gior_rit."°"; ?></p>
    	<blockquote><i class='fas fa-info-circle'></i> Selezionare le Squadre di casa e ospite dai menu a tendina e scrivere il risultato.</blockquote>
    </header>
    <div class='table-wrapper'>
    	<table class='alt'>
    		<tbody>
    			<tr>
    				<td width="23%"><b><?php echo "Giornata ".$str_id_gior_and."°"; ?></b></td>
    				<td width="54%"><b>Squadre</b></td>
    				<td width="23%"><b><?php echo "Giornata ".$str_id_gior_rit."°"; ?></b></td>
    			</tr>
    		</tbody>
    	</table>
    </div>
    <?php
    	switch($_POST['mod_part']){
    		case 'mod_partite':
    		$sq_casa = $_POST['sq_casa'];
    		$sq_osp = $_POST['sq_osp'];
    		$gol_sq_casa_and = $_POST['gol_sq_casa_and'];
    		$gol_sq_osp_and = $_POST['gol_sq_osp_and'];
    		$gol_sq_casa_rit = $_POST['gol_sq_casa_rit'];
    		$gol_sq_osp_rit = $_POST['gol_sq_osp_rit'];
    		
    		foreach($sq_casa as $k=>$v){
    			$strsql_modpart = "
    			UPDATE partite_SerieA 
    			SET sq_casa='".$sq_casa[$k]."',
    			sq_osp='".$sq_osp[$k]."',
    			gol_sq_casa_and='".$gol_sq_casa_and[$k]."',
    			gol_sq_osp_and='".$gol_sq_osp_and[$k]."',
    			gol_sq_casa_rit='".$gol_sq_casa_rit[$k]."',
    			gol_sq_osp_rit='".$gol_sq_osp_rit[$k]."'
    			WHERE id_stagione='$str_idstag' AND id_giornata_and='$str_id_gior_and' AND id_giornata_rit='$str_id_gior_rit'
    			";
    			$rs_modpart = @mysqli_query($link,$strsql_modpart) or die("Errore al DB. " . mysqli_error($link));
    		}
    		if($rs_inspart){
    			echo "<h3><i class='fas fa-check-circle'></i><b> Partite modificate correttamente.</b></h3>";
    		}else{
    			echo "NO!";
    		}
    				
    	break;
    	}
    	
    	$strsql_sel_part = "
    	SELECT partite_SerieA.*,
    	(SELECT nome_squadra FROM squadre_SerieA WHERE sq_casa=squadre_SerieA.id_squadra) AS squadra_casa,
    	(SELECT nome_squadra FROM squadre_SerieA WHERE sq_osp=squadre_SerieA.id_squadra) AS squadra_fuori
    	FROM partite_SerieA
    	WHERE id_stagione='$str_idstag' AND id_giornata_and='$str_id_gior_and'
    	ORDER BY squadra_casa ASC
    	";
    	$rs_sel_part = @mysqli_query($link,$strsql_sel_part) or die("Errore di connessione al DB. " . mysqli_error($link));
    	$count=mysqli_num_rows($rs_sel_part);
    	while($riga = mysqli_fetch_array($rs_sel_part)){
    		$str_id_sq_casa = $riga['sq_casa'];
    		$str_id_sq_osp = $riga['sq_osp'];
    		$str_gol_sq_casa_and = $riga['gol_sq_casa_and'];
    		$str_gol_sq_osp_and = $riga['gol_sq_osp_and'];
    		$str_gol_sq_casa_rit = $riga['gol_sq_casa_rit'];
    		$str_gol_sq_osp_rit = $riga['gol_sq_osp_rit'];
    ?>
    <form method="POST" action="step4_serieA_mod_partite.php?stag=<?php echo $str_idstag; ?>&idgior_a=<?php echo $str_id_gior_and; ?>&idgior_r=<?php echo $str_id_gior_rit; ?>">
    <input name="ids" type="hidden" value="ids" />
    <input name="mod_part" type="hidden" value="mod_partite" />
    	<div class="row uniform">
    		<div style="width:12.5%;">
    			<input type="text" name="gol_sq_casa_and[]" placeholder="Gol and" value="<?php echo $str_gol_sq_casa_and; ?>"/>
    		</div>
    		<div style="width:12.5%;">
    			<input type="text" name="gol_sq_osp_and[]" placeholder="Gol and" value="<?php echo $str_gol_sq_osp_and; ?>"/>
    		</div>
    		<div style="width:25%;">
    			<div class="select-wrapper">
    				<select name="sq_casa[]">
    					<option value="0" selected>Squadra Casa</option>
    					<?php
    					$strsql_sel_squa = "
    					SELECT campionati_SerieA.id_stagione, squadre_SerieA.id_squadra,nome_squadra
    					FROM campionati_SerieA
    					JOIN squadre_SerieA ON campionati_SerieA.idsquadra=squadre_SerieA.id_squadra
    					WHERE id_stagione='$str_idstag'
    					ORDER BY nome_squadra
    					";
    					$rs_sel_squa = @mysqli_query($link,$strsql_sel_squa) or die("Errore di connessione al DB. " . mysqli_error($link));
    					while($riga = mysqli_fetch_array($rs_sel_squa)){
    						$sqc = array($riga['id_squadra'] => $riga['nome_squadra']);
    						foreach($sqc as $chiave => $valore){
    							if($riga['id_squadra'] == $str_id_sq_casa){
    								echo "<option value='$chiave' selected>$valore</option>";
    							}else{
    								echo "<option value='$chiave'>$valore</option>";
    							}
    						}
    					}
    					?>
    				</select>
    			</div>
    		</div>
    		<!-- Break -->
    		<div style="width:25%;">
    			<div class="select-wrapper">
    				<select name="sq_osp[]">
    					<option value="0" selected>Squadra Ospite</option>
    					<?php
    					$strsql_sel_squa = "
    					SELECT campionati_SerieA.id_stagione, squadre_SerieA.id_squadra,nome_squadra
    					FROM campionati_SerieA
    					JOIN squadre_SerieA ON campionati_SerieA.idsquadra=squadre_SerieA.id_squadra
    					WHERE id_stagione='$str_idstag'
    					ORDER BY nome_squadra
    					";
    					$rs_sel_squa = @mysqli_query($link,$strsql_sel_squa) or die("Errore di connessione al DB. " . mysqli_error($link));
    					while($riga = mysqli_fetch_array($rs_sel_squa)){ 
    						$sqf = array($riga['id_squadra'] => $riga['nome_squadra']);
    						foreach($sqf as $chiave => $valore){
    							if($riga['id_squadra'] == $str_id_sq_osp){
    								echo "<option value='$chiave' selected>$valore</option>";
    							}else{
    								echo "<option value='$chiave'>$valore</option>";
    							}
    						}
    					}
    					?>
    				</select>
    			</div>
    		</div>
    		<div style="width:12.5%;">
    			<input type="text" name="gol_sq_casa_rit[]" placeholder="Gol rit" value="<?php echo $str_gol_sq_casa_rit; ?>"/>
    		</div>
    		<div style="width:12.5%;">
    			<input type="text" name="gol_sq_osp_rit[]" placeholder="Gol rit" value="<?php echo $str_gol_sq_osp_rit; ?>"/>
    		</div>
    		</div>
    <?php
    	}
    ?>
    		<div class="row uniform">
    		<div class="12u$">
    			<ul class="actions">
    				<li><input type="submit" value="Modifica tutte le partite" /></li>
    			</ul>
    		</div>
    	</div>
    </form>
    
    Il form è generato dalla query valorizzata nella variabile "$strsql_sel_part", mi recupera le partite con squadre e risultati con la clausola WHERE che filtra tra l'id_stagione e l'id_giornata_and, visualizzando con WHILE l'elenco delle partite e valorizzando una serie di input. Questo funziona correttamente con i risultati e squadre giuste. Anche nei campi "options" con le query interne che recuperano l'id_squadra. Per elaborare il form ho un imput hidden questo:
    <input name="mod_part" type="hidden" value="mod_partite" />
    che richiama la funzione switch() che recupera i dati dal form e poi fa la query UPDATE. Il problema sorge qui, io pensavo che per far passare tutti gli input si potesse usare il foreach() ma sbaglio qualcosa e non riesco a capire dove. Perchè quando clicco sul tasto del form mi modifica i valori nella tabella del database ma li fa tutti uguali all'ultima partita dell'elenco recuperato in precedenza.

    Grazie per l'aiuto
    Ciao
    Tiziano
  • Re: Problema su un UPDATE multiplo

    Quello è l'esempio più chiaro di come NON fare le query che ricordi da un po' di tempo
  • Re: Problema su un UPDATE multiplo

    Eh eh eh mai detto di essere un professionista... hai consigli a riguardo?
  • Re: Problema su un UPDATE multiplo

    Ciao Tiziano79, puoi inserire
    error_reporting(-1);
    in cima al codice php?
    Altresi assicurati di effettuare lo switch solo quando la variabile è valorizzata.
    Dovrebbero apparire i Notice poiché inizialmente avrai solo $_POST uguale a un array vuoto, quindi potrai chiamare senza notice $_POST['key'] solo quando esiste.
    Presta anche attenzione che questo switch inizialmente è NULL.
    if(isset($_POST['key']) && $_POST['key'] == 'valore') {
    switch($_POST['key']) {
    case 'valore':
    //altro codice
    }
    }
    Nel form hai bisogno di 7 valori ma multipli.. cioè
    <input type="text" name=nome[]>
    <input type="text" name=nome[]>
    Produce un array numerato a partire da zero e in questo esempio termina con 1 se devi inviare più di un option inserisci multiple in select html.
    Ciao fammi sapere.
  • Re: Problema su un UPDATE multiplo

    Ciao Hormus!
    ti allego il codice con le modifiche che mi hai consigliato:
    
    <?php
    	$str_idstag = $_GET['stag'];
    	$str_id_partita = $_GET['idpart'];
    	$str_id_sq_casa = $_GET['sqc'];
    	$str_id_sq_osp = $_GET['sqf'];
    	$str_id_gior_and = $_GET['idgior_a'];
    	$str_id_gior_rit = $_GET['idgior_r'];
    	
    	error_reporting(-1);
    ?>
    <header>
    	<h3>Modificare le partite per la Stagione <?php echo $str_annostag; ?></h3>
    	<p><?php echo "Giornate ".$str_id_gior_and."° - ".$str_id_gior_rit."°"; ?></p>
    	<blockquote><i class='fas fa-info-circle'></i> Selezionare le Squadre di casa e ospite dai menu a tendina e scrivere il risultato.</blockquote>
    </header>
    <div class='table-wrapper'>
    	<table class='alt'>
    		<tbody>
    			<tr>
    				<td width="23%"><b><?php echo "Giornata ".$str_id_gior_and."°"; ?></b></td>
    				<td width="54%"><b>Squadre</b></td>
    				<td width="23%"><b><?php echo "Giornata ".$str_id_gior_rit."°"; ?></b></td>
    			</tr>
    		</tbody>
    	</table>
    </div>
    <?php
    	if(isset($_POST['mod_part']) && $_POST['mod_part'] == 'mod_partite') {
    	switch($_POST['mod_part']){
    		case 'mod_partite':
    		$sq_casa = $_POST['sq_casa'];
    		$sq_osp = $_POST['sq_osp'];
    		$gol_sq_casa_and = $_POST['gol_sq_casa_and'];
    		$gol_sq_osp_and = $_POST['gol_sq_osp_and'];
    		$gol_sq_casa_rit = $_POST['gol_sq_casa_rit'];
    		$gol_sq_osp_rit = $_POST['gol_sq_osp_rit'];
    		
    		foreach($_POST as $k=>$v){
    			$strsql_modpart = "
    			UPDATE partite_SerieA 
    			SET sq_casa='".$sq_casa[$k]."',
    			sq_osp='".$sq_osp[$k]."',
    			gol_sq_casa_and='".$gol_sq_casa_and[$k]."',
    			gol_sq_osp_and='".$gol_sq_osp_and[$k]."',
    			gol_sq_casa_rit='".$gol_sq_casa_rit[$k]."',
    			gol_sq_osp_rit='".$gol_sq_osp_rit[$k]."'
    			WHERE id_stagione='$str_idstag' AND id_giornata_and='$str_id_gior_and' AND id_giornata_rit='$str_id_gior_rit'
    			";
    			$rs_modpart = @mysqli_query($link,$strsql_modpart) or die("Errore al DB. " . mysqli_error($link));
    		}
    		if($rs_inspart){
    			echo "<h3><i class='fas fa-check-circle'></i><b> Partite modificate correttamente.</b></h3>";
    		}else{
    			echo "NO!";
    		}
    				
    	break;
    	}
    	}
    	
    	$strsql_sel_part = "
    	SELECT partite_SerieA.*,
    	(SELECT nome_squadra FROM squadre_SerieA WHERE sq_casa=squadre_SerieA.id_squadra) AS squadra_casa,
    	(SELECT nome_squadra FROM squadre_SerieA WHERE sq_osp=squadre_SerieA.id_squadra) AS squadra_fuori
    	FROM partite_SerieA
    	WHERE id_stagione='$str_idstag' AND id_giornata_and='$str_id_gior_and'
    	ORDER BY squadra_casa ASC
    	";
    	$rs_sel_part = @mysqli_query($link,$strsql_sel_part) or die("Errore di connessione al DB. " . mysqli_error($link));
    	$count=mysqli_num_rows($rs_sel_part);
    	while($riga = mysqli_fetch_array($rs_sel_part)){
    		$str_id_sq_casa = $riga['sq_casa'];
    		$str_id_sq_osp = $riga['sq_osp'];
    		$str_gol_sq_casa_and = $riga['gol_sq_casa_and'];
    		$str_gol_sq_osp_and = $riga['gol_sq_osp_and'];
    		$str_gol_sq_casa_rit = $riga['gol_sq_casa_rit'];
    		$str_gol_sq_osp_rit = $riga['gol_sq_osp_rit'];
    ?>
    <form method="POST" action="step4_serieA_mod_partite.php?stag=<?php echo $str_idstag; ?>&idgior_a=<?php echo $str_id_gior_and; ?>&idgior_r=<?php echo $str_id_gior_rit; ?>">
    <input name="ids" type="hidden" value="ids" />
    <input name="mod_part" type="hidden" value="mod_partite" />
    	<div class="row uniform">
    		<div style="width:12.5%;">
    			<input type="text" name="gol_sq_casa_and[]" placeholder="Gol and" value="<?php echo $str_gol_sq_casa_and; ?>"/>
    		</div>
    		<div style="width:12.5%;">
    			<input type="text" name="gol_sq_osp_and[]" placeholder="Gol and" value="<?php echo $str_gol_sq_osp_and; ?>"/>
    		</div>
    		<div style="width:25%;">
    			<div class="select-wrapper">
    				<select name="sq_casa[]">
    					<option selected>Squadra Casa</option>
    					<?php
    					$strsql_sel_squa = "
    					SELECT campionati_SerieA.id_stagione, squadre_SerieA.id_squadra,nome_squadra
    					FROM campionati_SerieA
    					JOIN squadre_SerieA ON campionati_SerieA.idsquadra=squadre_SerieA.id_squadra
    					WHERE id_stagione='$str_idstag'
    					ORDER BY nome_squadra
    					";
    					$rs_sel_squa = @mysqli_query($link,$strsql_sel_squa) or die("Errore di connessione al DB. " . mysqli_error($link));
    					while($riga = mysqli_fetch_array($rs_sel_squa)){
    						$sqc = array($riga['id_squadra'] => $riga['nome_squadra']);
    						foreach($sqc as $chiave => $valore){
    							if($riga['id_squadra'] == $str_id_sq_casa){
    								echo "<option value='$chiave' selected>$valore</option>";
    							}else{
    								echo "<option value='$chiave'>$valore</option>";
    							}
    						}
    					}
    					?>
    				</select>
    			</div>
    		</div>
    		<!-- Break -->
    		<div style="width:25%;">
    			<div class="select-wrapper">
    				<select name="sq_osp[]">
    					<option selected>Squadra Ospite</option>
    					<?php
    					$strsql_sel_squa = "
    					SELECT campionati_SerieA.id_stagione, squadre_SerieA.id_squadra,nome_squadra
    					FROM campionati_SerieA
    					JOIN squadre_SerieA ON campionati_SerieA.idsquadra=squadre_SerieA.id_squadra
    					WHERE id_stagione='$str_idstag'
    					ORDER BY nome_squadra
    					";
    					$rs_sel_squa = @mysqli_query($link,$strsql_sel_squa) or die("Errore di connessione al DB. " . mysqli_error($link));
    					while($riga = mysqli_fetch_array($rs_sel_squa)){ 
    						$sqf = array($riga['id_squadra'] => $riga['nome_squadra']);
    						foreach($sqf as $chiave => $valore){
    							if($riga['id_squadra'] == $str_id_sq_osp){
    								echo "<option value='$chiave' selected>$valore</option>";
    							}else{
    								echo "<option value='$chiave'>$valore</option>";
    							}
    						}
    					}
    					?>
    				</select>
    			</div>
    		</div>
    		<div style="width:12.5%;">
    			<input type="text" name="gol_sq_casa_rit[]" placeholder="Gol rit" value="<?php echo $str_gol_sq_casa_rit; ?>"/>
    		</div>
    		<div style="width:12.5%;">
    			<input type="text" name="gol_sq_osp_rit[]" placeholder="Gol rit" value="<?php echo $str_gol_sq_osp_rit; ?>"/>
    		</div>
    		</div>
    <?php
    	}
    ?>
    		<div class="row uniform">
    		<div class="12u$">
    			<ul class="actions">
    				<li><input type="submit" value="Modifica tutte le partite" /></li>
    			</ul>
    		</div>
    	</div>
    </form>
    
    Credo di non aver compreso bene perchè non funziona, mi aggiorna sempre l'ultima partita e la ripete per tutte le altre, cioè mi scrive nel DB 10 righe uguali.

    La funzione:
    error_reporting(-1);
    non mi visualizza nulla...

    Dove ho sbagliato?

    Grazie per l'aiuto
    Tiziano
  • Re: Problema su un UPDATE multiplo

    Ancora non sono state effettuate tutte le modifiche da me richieste innanzitutto devi riordinare i vari elementi del form usa multiple prima del name della select mentre i restanti 4 valori andrebbero messi dentro il ciclo while poiché li devi stampare per quanti incontri (per un un'incontro occorrono due squadre una di casa e l'altra ospite) di Serie A da aggiornare
    Poi effettivamente avrai un array a due dimensioni e non un singolo array.
    <?php
    	$str_idstag = $_GET['stag'];
    	$str_id_partita = $_GET['idpart'];
    	$str_id_sq_casa = $_GET['sqc'];
    	$str_id_sq_osp = $_GET['sqf'];
    	$str_id_gior_and = $_GET['idgior_a'];
    	$str_id_gior_rit = $_GET['idgior_r'];
    	
    	error_reporting(-1);
    ?>
    <header>
    	<h3>Modificare le partite per la Stagione <?php echo $str_annostag; ?></h3>
    	<p><?php echo "Giornate ".$str_id_gior_and."° - ".$str_id_gior_rit."°"; ?></p>
    	<blockquote><i class='fas fa-info-circle'></i> Selezionare le Squadre di casa e ospite dai menu a tendina e scrivere il risultato.</blockquote>
    </header>
    <div class='table-wrapper'>
    	<table class='alt'>
    		<tbody>
    			<tr>
    				<td width="23%"><b><?php echo "Giornata ".$str_id_gior_and."°"; ?></b></td>
    				<td width="54%"><b>Squadre</b></td>
    				<td width="23%"><b><?php echo "Giornata ".$str_id_gior_rit."°"; ?></b></td>
    			</tr>
    		</tbody>
    	</table>
    </div>
    <?php
    	if(isset($_POST['mod_part']) && $_POST['mod_part'] == 'mod_partite') {
    	switch($_POST['mod_part']){
    		case 'mod_partite':
    		$sq_casa = $_POST['sq_casa'];
    		$sq_osp = $_POST['sq_osp'];
    		$gol_sq_casa_and = $_POST['gol_sq_casa_and'];
    		$gol_sq_osp_and = $_POST['gol_sq_osp_and'];
    		$gol_sq_casa_rit = $_POST['gol_sq_casa_rit'];
    		$gol_sq_osp_rit = $_POST['gol_sq_osp_rit'];
                    //Avrai $_POST['sq_casa'][0] $_POST['sq_casa'][1] un array multidimensionale
    		
    		foreach ($_POST as $k) {
                    //Ogni valore del form deve essere controllato, oltre a possibili attacchi c'è il rischio che il foreach interpreti erroneamente altri valori $_POST, lascio $k ma in realtà è il valore e non la chiave da iterare.
    
    			$strsql_modpart = "
    			UPDATE partite_SerieA 
    			SET sq_casa='".$sq_casa[$k]."',
    			sq_osp='".$sq_osp[$k]."',
    			gol_sq_casa_and='".$gol_sq_casa_and[$k]."',
    			gol_sq_osp_and='".$gol_sq_osp_and[$k]."',
    			gol_sq_casa_rit='".$gol_sq_casa_rit[$k]."',
    			gol_sq_osp_rit='".$gol_sq_osp_rit[$k]."'
    			WHERE id_stagione='$str_idstag' AND id_giornata_and='$str_id_gior_and' AND id_giornata_rit='$str_id_gior_rit'
    			";
    			$rs_modpart = @mysqli_query($link,$strsql_modpart) or die("Errore al DB. " . mysqli_error($link));
    		}
    		if($rs_inspart){
    			echo "<h3><i class='fas fa-check-circle'></i><b> Partite modificate correttamente.</b></h3>";
    		}else{
    			echo "NO!";
    		}
    				
    	break;
    	}
    	}
    	
    	$strsql_sel_part = "
    	SELECT partite_SerieA.*,
    	(SELECT nome_squadra FROM squadre_SerieA WHERE sq_casa=squadre_SerieA.id_squadra) AS squadra_casa,
    	(SELECT nome_squadra FROM squadre_SerieA WHERE sq_osp=squadre_SerieA.id_squadra) AS squadra_fuori
    	FROM partite_SerieA
    	WHERE id_stagione='$str_idstag' AND id_giornata_and='$str_id_gior_and'
    	ORDER BY squadra_casa ASC
    	";
    	$rs_sel_part = @mysqli_query($link,$strsql_sel_part) or die("Errore di connessione al DB. " . mysqli_error($link));
    	$count=mysqli_num_rows($rs_sel_part);
    	while($riga = mysqli_fetch_array($rs_sel_part)){
    		$str_id_sq_casa = $riga['sq_casa'];
    		$str_id_sq_osp = $riga['sq_osp'];
    		$str_gol_sq_casa_and = $riga['gol_sq_casa_and'];
    		$str_gol_sq_osp_and = $riga['gol_sq_osp_and'];
    		$str_gol_sq_casa_rit = $riga['gol_sq_casa_rit'];
    		$str_gol_sq_osp_rit = $riga['gol_sq_osp_rit'];
    ?>
    <form method="POST" action="step4_serieA_mod_partite.php?stag=<?php echo $str_idstag; ?>&idgior_a=<?php echo $str_id_gior_and; ?>&idgior_r=<?php echo $str_id_gior_rit; ?>">
    <input name="ids" type="hidden" value="ids" />
    <input name="mod_part" type="hidden" value="mod_partite" />
    	<div class="row uniform">
    		<div style="width:12.5%;">
    			<input type="text" name="gol_sq_casa_and[]" placeholder="Gol and" value="<?php echo $str_gol_sq_casa_and; ?>"/>
    		</div>
    		<div style="width:12.5%;">
    			<input type="text" name="gol_sq_osp_and[]" placeholder="Gol and" value="<?php echo $str_gol_sq_osp_and; ?>"/>
    		</div>
    		<div style="width:25%;">
    			<div class="select-wrapper">
    				<select multiple name="sq_casa[]">
    					<option selected>Squadra Casa</option>
    					<?php
    					$strsql_sel_squa = "
    					SELECT campionati_SerieA.id_stagione, squadre_SerieA.id_squadra,nome_squadra
    					FROM campionati_SerieA
    					JOIN squadre_SerieA ON campionati_SerieA.idsquadra=squadre_SerieA.id_squadra
    					WHERE id_stagione='$str_idstag'
    					ORDER BY nome_squadra
    					";
    					$rs_sel_squa = @mysqli_query($link,$strsql_sel_squa) or die("Errore di connessione al DB. " . mysqli_error($link));
    					while($riga = mysqli_fetch_array($rs_sel_squa)){
    						$sqc = array($riga['id_squadra'] => $riga['nome_squadra']);
    						foreach($sqc as $chiave => $valore){
    							if($riga['id_squadra'] == $str_id_sq_casa){
    								echo "<option value='$chiave' selected>$valore</option>";
    							}else{
    								echo "<option value='$chiave'>$valore</option>";
    							}
    						}
    					}
    					?>
    				</select>
    			</div>
    Ho anche aggiunto multiple alla prima select html.
    Mentre in questa definizione di variabile $strsql_sel_part dentro al while dovresti o stampare il codice html quando sei ancora dentro al loop o devi creare una array multidimensionale che poi comunque dovrà essere usato in un ciclo foreach per stampare effettivamente tutte gli indici.
  • Re: Problema su un UPDATE multiplo

    Ciao Hormus! Ok problema risolto... copio tutto il codice della pagina, magari a qualcuno interessa, il sistema mi funziona benissimo.
    
    <?php
    	$str_idstag = $_GET['stag'];
    	$str_id_sq_casa = $_GET['sqc'];
    	$str_id_sq_osp = $_GET['sqf'];
    	$str_id_gior_and = $_GET['idgior_a'];
    	$str_id_gior_rit = $_GET['idgior_r'];
    ?>
    <header>
    	<h3>Modificare le partite per la Stagione <?php echo $str_annostag; ?></h3>
    	<p><?php echo "Giornate ".$str_id_gior_and."° - ".$str_id_gior_rit."°"; ?></p>
    	<blockquote><i class='fas fa-info-circle'></i> Selezionare le Squadre di casa e ospite dai menu a tendina e scrivere il risultato.</blockquote>
    </header>
    <div class='table-wrapper'>
    	<table class='alt'>
    		<tbody>
    			<tr>
    				<td width="23%"><b><?php echo "Giornata ".$str_id_gior_and."°"; ?></b></td>
    				<td width="54%"><b>Squadre</b></td>
    				<td width="23%"><b><?php echo "Giornata ".$str_id_gior_rit."°"; ?></b></td>
    			</tr>
    		</tbody>
    	</table>
    </div>
    <?php
    	if(isset($_POST['mod_part'])){
    	switch($_POST['mod_part']){
    		case 'mod_partite':
    		
    		foreach($_POST['ids'] as $id_p){
    			$sq_casa = $_POST['sq_casa'][$id_p];
    			$sq_osp = $_POST['sq_osp'][$id_p];
    			$gol_sq_casa_and = $_POST['gol_sq_casa_and'][$id_p];
    			$gol_sq_osp_and = $_POST['gol_sq_osp_and'][$id_p];
    			$gol_sq_casa_rit = $_POST['gol_sq_casa_rit'][$id_p];
    			$gol_sq_osp_rit = $_POST['gol_sq_osp_rit'][$id_p];
    			
    			$strsql_modpart = "
    			UPDATE partite_SerieA
    			SET sq_casa='$sq_casa',
    			sq_osp='$sq_osp',
    			gol_sq_casa_and='$gol_sq_casa_and',
    			gol_sq_osp_and='$gol_sq_osp_and',
    			gol_sq_casa_rit='$gol_sq_casa_rit',
    			gol_sq_osp_rit='$gol_sq_osp_rit'
    			WHERE id_partita='$id_p'
    			";
    			$rs_modpart = @mysqli_query($link,$strsql_modpart) or die("Errore al DB. " . mysqli_error($link));
    		}
    		if($rs_modpart){
    			echo "<h3><i class='fas fa-check-circle'></i><b> Partite modificate correttamente.</b></h3>";
    		}
    	break;
    	}
    	}
    ?>
    <form method="POST" action="step4_serieA_mod_partite.php?stag=<?php echo $str_idstag; ?>&idgior_a=<?php echo $str_id_gior_and; ?>&idgior_r=<?php echo $str_id_gior_rit; ?>">
    <input name="mod_part" type="hidden" value="mod_partite" />
    <?php
    	$strsql_sel_part = "
    	SELECT partite_SerieA.*,
    	(SELECT nome_squadra FROM squadre_SerieA WHERE sq_casa=squadre_SerieA.id_squadra) AS squadra_casa,
    	(SELECT nome_squadra FROM squadre_SerieA WHERE sq_osp=squadre_SerieA.id_squadra) AS squadra_fuori
    	FROM partite_SerieA
    	WHERE id_stagione='$str_idstag' AND id_giornata_and='$str_id_gior_and' AND id_giornata_rit='$str_id_gior_rit'
    	ORDER BY squadra_casa ASC
    	";
    	$rs_sel_part = @mysqli_query($link,$strsql_sel_part) or die("Errore di connessione al DB. " . mysqli_error($link));
    	while($riga = mysqli_fetch_assoc($rs_sel_part)){
    		$str_id_partita = $riga['id_partita'];
    		$str_id_sq_casa = $riga['sq_casa'];
    		$str_id_sq_osp = $riga['sq_osp'];
    		$str_gol_sq_casa_and = $riga['gol_sq_casa_and'];
    		$str_gol_sq_osp_and = $riga['gol_sq_osp_and'];
    		$str_gol_sq_casa_rit = $riga['gol_sq_casa_rit'];
    		$str_gol_sq_osp_rit = $riga['gol_sq_osp_rit'];
    ?>
    	<div class="row uniform">
    		<input type="hidden" name="ids[]" value="<?php echo $str_id_partita; ?>"/>
    		<div style="width:12.5%;">
    			<input type="text" name="gol_sq_casa_and[<?php echo $str_id_partita; ?>]" placeholder="Gol and" value="<?php echo $str_gol_sq_casa_and; ?>"/>
    		</div>
    		<div style="width:12.5%;">
    			<input type="text" name="gol_sq_osp_and[<?php echo $str_id_partita; ?>]" placeholder="Gol and" value="<?php echo $str_gol_sq_osp_and; ?>"/>
    		</div>
    		<div style="width:25%;">
    			<div class="select-wrapper">
    				<select name="sq_casa[<?php echo $str_id_partita; ?>]">
    					<option value="0">Squadra Casa</option>
    					<?php
    					$strsql_sel_squa = "
    					SELECT campionati_SerieA.id_stagione, squadre_SerieA.id_squadra,nome_squadra
    					FROM campionati_SerieA
    					JOIN squadre_SerieA ON campionati_SerieA.idsquadra=squadre_SerieA.id_squadra
    					WHERE id_stagione='$str_idstag'
    					ORDER BY nome_squadra
    					";
    					$rs_sel_squa = @mysqli_query($link,$strsql_sel_squa) or die("Errore di connessione al DB. " . mysqli_error($link));
    					while($riga = mysqli_fetch_array($rs_sel_squa)){
    						$sqc = array($riga['id_squadra'] => $riga['nome_squadra']);
    						foreach($sqc as $chiave => $valore){
    							if($riga['id_squadra'] == $str_id_sq_casa){
    								echo "<option value='$chiave' selected>$valore</option>";
    							}else{
    								echo "<option value='$chiave'>$valore</option>";
    							}
    						}
    					}
    					?>
    				</select>
    			</div>
    		</div>
    		<!-- Break -->
    		<div style="width:25%;">
    			<div class="select-wrapper">
    				<select name="sq_osp[<?php echo $str_id_partita; ?>]">
    					<option value="0">Squadra Ospite</option>
    					<?php
    					$strsql_sel_squa = "
    					SELECT campionati_SerieA.id_stagione, squadre_SerieA.id_squadra,nome_squadra
    					FROM campionati_SerieA
    					JOIN squadre_SerieA ON campionati_SerieA.idsquadra=squadre_SerieA.id_squadra
    					WHERE id_stagione='$str_idstag'
    					ORDER BY nome_squadra
    					";
    					$rs_sel_squa = @mysqli_query($link,$strsql_sel_squa) or die("Errore di connessione al DB. " . mysqli_error($link));
    					while($riga = mysqli_fetch_array($rs_sel_squa)){ 
    						$sqf = array($riga['id_squadra'] => $riga['nome_squadra']);
    						foreach($sqf as $chiave => $valore){
    							if($riga['id_squadra'] == $str_id_sq_osp){
    								echo "<option value='$chiave' selected>$valore</option>";
    							}else{
    								echo "<option value='$chiave'>$valore</option>";
    							}
    						}
    					}
    					?>
    				</select>
    			</div>
    		</div>
    		<div style="width:12.5%;">
    			<input type="text" name="gol_sq_casa_rit[<?php echo $str_id_partita; ?>]" placeholder="Gol rit" value="<?php echo $str_gol_sq_casa_rit; ?>"/>
    		</div>
    		<div style="width:12.5%;">
    			<input type="text" name="gol_sq_osp_rit[<?php echo $str_id_partita; ?>]" placeholder="Gol rit" value="<?php echo $str_gol_sq_osp_rit; ?>"/>
    		</div>
    		</div>
    <?php
    	}
    ?>
    		<div class="row uniform">
    		<div class="12u$">
    			<ul class="actions">
    				<li><input type="submit" name="submit" value="Modifica tutte le partite" /></li>
    			</ul>
    		</div>
    	</div>
    </form>
    
    Grazie mille per l'aiuto!

    A presto
    Ciao
    Tiziano
Devi accedere o registrarti per scrivere nel forum
8 risposte