Problema su un UPDATE multiplo

di Anonimizzato19237 il
8 risposte
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

  • 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.
  • 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
  • Quello è l'esempio più chiaro di come NON fare le query che ricordi da un po' di tempo
  • Eh eh eh mai detto di essere un professionista... hai consigli a riguardo?
  • 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.
  • 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
  • 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.
  • 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