[RISOLTO] GDRCD 5.4 - Problema modifica colonna di database
[RISOLTO] GDRCD 5.4 - Problema modifica colonna di database postato il 29/06/2017 22:34:16 nel forum programmazione, open source e hosting e modificato da fargus il 30/06/2017 09:47:01
Buonasera ho un problema con una scrittura di codice mysql
<?php /*Modifica di un record*/
if (gdrcd_filter('get',$_POST['op'])=='doedit'){
/*Eseguo l'aggiornamento*/
gdrcd_query("UPDATE progettogilda SET progetto ='".gdrcd_filter('in',$_POST['progetto'])."', testo ='".gdrcd_filter('in',$_POST['testo'])."', stato ='".gdrcd_filter('in',$_POST['stato'])."'");
?>
<div class="warning">
<?php echo gdrcd_filter('out',$MESSAGE['warning']['modified']);?>
</div>
<!-- Link di ritorno alla visualizzazione di base -->
<div class="link_back">
<a href="main.php?page=nuovo_progettogilda">
<?php echo gdrcd_filter('out',$MESSAGE['interface']['administration']['plot']['link']['back']); ?>
</a>
</div>
<?php } ?>
Tento di applicare una modifica allo stato di una proposta di gilda e non capisco come mai quando faccio l'invio questa mi sovrascrive tutte le altre proposte esistenti. La modifca viene applicata a tutto l'elenco di proposte. Il codice che vi ho messo sopra è relativo alla parte della modifica di un record.
Creare un nuovo record funziona correttamente, lo differenzia dagli altri.
Quando invece applico una modifica, questa sovrascrive tutto l'elenco nel database e lo applica a tutti quanti.
Come devo modificare il codice che ho scritto sopra affinché la modifica venga applicata UNICAMENTE al record con l'id_progetto corrispondente a quello che sto correntemente modificando?
Vi mostro di seguito quello dell'inserimento che funziona correttamente, semmai può esservi di aiuto per comprendere quali colonne uso nel database:
<?php /*Inserimento di un nuovo record*/
gdrcd_query("SELECT * FROM progettogilda WHERE nome = '".$_SESSION['login']."'");
if ($_POST['op']=='insert') {
/*Eseguo l'inserimento*/
gdrcd_query("INSERT INTO progettogilda (id_progetto, progetto, testo, nome, stato) VALUES ('".gdrcd_filter('num',$_POST['id_progetto'])."', '".gdrcd_filter('in',$_POST['progetto'])."', '".gdrcd_filter('in',$_POST['testo'])."', '".gdrcd_filter('in',$_SESSION['login'])."', '".gdrcd_filter('in',$_POST['stato'])."')");
?>
<div class="warning">
<?php echo gdrcd_filter('out',$MESSAGE['warning']['inserted']);?>
</div>
<!-- Link di ritorno alla visualizzazione di base -->
<div class="link_back">
<a href="main.php?page=nuovo_progettogilda">
<?php echo gdrcd_filter('out',$MESSAGE['interface']['administration']['plot']['link']['back']); ?>
</a>
</div>
<?php } ?>
Pagine → 1
29/06/2017 22:40:46 e modificato da seralia il 29/06/2017 22:42:18
gdrcd_query("UPDATE progettogilda SET progetto ='".gdrcd_filter('in',$_POST['progetto'])."', testo ='".gdrcd_filter('in',$_POST['testo'])."', stato ='".gdrcd_filter('in',$_POST['stato'])."'");
Manca il WHERE
Non stai dicendo DOVE vada aggiornata la tabella...
Credo dovrebbe essere:
gdrcd_query("UPDATE progettogilda SET testo ='".gdrcd_filter('in',$_POST['testo'])."', stato ='".gdrcd_filter('in',$_POST['stato'])."' WHERE progetto ='".gdrcd_filter('in',$_POST['progetto'])."'");
Edit per puntualizzare: CREDO perché essendo una tabella homemade... guarda tu cosa usi come campi id/nome/etc
29/06/2017 22:49:42
seralia ha scritto:
gdrcd_query("UPDATE progettogilda SET progetto ='".gdrcd_filter('in',$_POST['progetto'])."', testo ='".gdrcd_filter('in',$_POST['testo'])."', stato ='".gdrcd_filter('in',$_POST['stato'])."'");
Manca il WHERE
Non stai dicendo DOVE vada aggiornata la tabella...
Credo dovrebbe essere:
gdrcd_query("UPDATE progettogilda SET testo ='".gdrcd_filter('in',$_POST['testo'])."', stato ='".gdrcd_filter('in',$_POST['stato'])."' WHERE progetto ='".gdrcd_filter('in',$_POST['progetto'])."'");
Edit per puntualizzare: CREDO perché essendo una tabella homemade... guarda tu cosa usi come campi id/nome/etc
Ho provato a mettere
gdrcd_query("UPDATE progettogilda SET id_progetto ='".gdrcd_filter('num',$_POST['id_progetto'])."', progetto ='".gdrcd_filter('in',$_POST['progetto'])."', testo ='".gdrcd_filter('in',$_POST['testo'])."', stato ='".gdrcd_filter('in',$_POST['stato'])."' WHERE id_progetto =".gdrcd_filter('num',$_POST['id_record'])." ");
ma adesso non salva nemmeno la modifica, non so cosa ho sbagliato
29/06/2017 22:54:17
Stai settando lo stesso campo che fa da discriminante?
Il campo di riferimento id_progetto va cambiato oppure no? Non credo che l'id del progetto cambi, no?
Quindi non va tra i campi da SETtare
gdrcd_query("UPDATE progettogilda SET progetto ='".gdrcd_filter('in',$_POST['progetto'])."', testo ='".gdrcd_filter('in',$_POST['testo'])."', stato ='".gdrcd_filter('in',$_POST['stato'])."' WHERE id_progetto =".gdrcd_filter('num',$_POST['id_record'])." ");
Nel form il campo lo hai chiamato "id_progetto" o "id_record" quello che punta l'ID del progetto? Perché in SET lo avevi messo come "id_progetto" ed in WHERE come "id_record"...
29/06/2017 22:56:48 e modificato da fargus il 29/06/2017 23:01:05
seralia ha scritto: Stai settando lo stesso campo che fa da discriminante?
Il campo di riferimento id_progetto va cambiato oppure no? Non credo che l'id del progetto cambi, no?
Quindi non va tra i campi da SETtare
gdrcd_query("UPDATE progettogilda SET progetto ='".gdrcd_filter('in',$_POST['progetto'])."', testo ='".gdrcd_filter('in',$_POST['testo'])."', stato ='".gdrcd_filter('in',$_POST['stato'])."' WHERE id_progetto =".gdrcd_filter('num',$_POST['id_record'])." ");
Nel form il campo lo hai chiamato "id_progetto" o "id_record" quello che punta l'ID del progetto? Perché in SET lo avevi messo come "id_progetto" ed in WHERE come "id_record"...
L'id_progetto resta invariato esatto.
comunque nel form ho scritto cosi:
<?php /*Form di inserimento/modifica*/
if ((gdrcd_filter('get',$_POST['op'])=='edit') ||
(gdrcd_filter('get',$_REQUEST['op'])=='new')){
/*Preseleziono l'operazione di inserimento*/
$operation='insert';
/*Se è stata richiesta una modifica*/
if ($_POST['op']=='edit'){
/*Carico il record da modificare*/
$loaded_record=gdrcd_query("SELECT * FROM progettogilda WHERE id_progetto=".gdrcd_filter('num',$_POST['id_record'])." LIMIT 1 ");
/*Cambio l'operazione in modifica*/
$operation='edit';
} ?>
29/06/2017 22:59:32 e modificato da fargus il 29/06/2017 23:14:36
Nel where non capisco quale dei 4 devo mettere.
Per campo discriminante cosa intendi? probabilmente il titolo (nome) della gilda... ma metti che un giorno vorro cambiare il nome della gilda?
Ho infine provato anche mettendo cosi, immaginando che nel where devo mettere l'unico campo che non voglio si modifichi... quindi come condizione che esso resti invariato, ovvero l'id_progetto:
gdrcd_query("UPDATE progettogilda SET progetto ='".gdrcd_filter('in',$_POST['progetto'])."', testo ='".gdrcd_filter('in',$_POST['testo'])."', stato ='".gdrcd_filter('in',$_POST['stato'])."' WHERE id_progetto = '".gdrcd_filter('in',$_POST['id_progetto'])."'");
Ma niente non mi applica la modifica, non stampa nulla nella pagina web
29/06/2017 23:21:33
Ok, ricominciamo da capo...
Quale e' la struttura della tabella e come e' fatto il form?
Per "discriminante" intendo un campo univoco che venga usato nel WHERE per indicare esattamente quale riga della tabella si va a modificare, in questo caso la discriminante per me e' l'ID del record perché e' l'unico campo che non dovrebbe variare mai...
30/06/2017 00:13:29
seralia ha scritto: Ok, ricominciamo da capo...
Quale e' la struttura della tabella e come e' fatto il form?
Per "discriminante" intendo un campo univoco che venga usato nel WHERE per indicare esattamente quale riga della tabella si va a modificare, in questo caso la discriminante per me e' l'ID del record perché e' l'unico campo che non dovrebbe variare mai...
struttura tabella:
codice della pagina:
<div class="pagina_gestione_abilita">
<!-- Titolo della pagina -->
<div class="page_title">
<h2><?php echo gdrcd_filter('out','Presentazione di Nuovi Progetti di Gilda / Mestiere'); ?></h2>
</div>
<!-- Corpo della pagina -->
<div class="page_body">
<?php /*Inserimento di un nuovo record*/
gdrcd_query("SELECT * FROM progettogilda WHERE nome = '".$_SESSION['login']."'");
if ($_POST['op']=='insert') {
/*Eseguo l'inserimento*/
gdrcd_query("INSERT INTO progettogilda (id_progetto, progetto, testo, nome, stato) VALUES ('".gdrcd_filter('num',$_POST['id_progetto'])."', '".gdrcd_filter('in',$_POST['progetto'])."', '".gdrcd_filter('in',$_POST['testo'])."', '".gdrcd_filter('in',$_SESSION['login'])."', '".gdrcd_filter('in',$_POST['stato'])."')");
?>
<div class="warning">
<?php echo gdrcd_filter('out',$MESSAGE['warning']['inserted']);?>
</div>
<!-- Link di ritorno alla visualizzazione di base -->
<div class="link_back">
<a href="main.php?page=nuovo_progettogilda">
<?php echo gdrcd_filter('out',$MESSAGE['interface']['administration']['plot']['link']['back']); ?>
</a>
</div>
<?php } ?>
<?php /* Cancellatura in un record */
if ($_POST['op']=='erase'){
/*Eseguo la cancellatura*/
gdrcd_query("DELETE FROM progettogilda WHERE id_progetto=".gdrcd_filter('num',$_POST['id_record'])." LIMIT 1");
?>
<div class="warning">
<?php echo gdrcd_filter('out',$MESSAGE['warning']['deleted']);?>
</div>
<!-- Link di ritorno alla visualizzazione di base -->
<div class="link_back">
<a href="main.php?page=nuovo_progettogilda">
<?php echo gdrcd_filter('out',$MESSAGE['interface']['administration']['plot']['link']['back']); ?>
</a>
</div>
<?php } ?>
<?php /*Modifica di un record*/
if (gdrcd_filter('get',$_POST['op'])=='doedit'){
/*Eseguo l'aggiornamento*/
gdrcd_query("UPDATE progettogilda SET progetto ='".gdrcd_filter('in',$_POST['progetto'])."', testo ='".gdrcd_filter('in',$_POST['testo'])."', stato ='".gdrcd_filter('in',$_POST['stato'])."' WHERE id_progetto = '".gdrcd_filter('in',$_POST['id_progetto'])."'");
?>
<div class="warning">
<?php echo gdrcd_filter('out',$MESSAGE['warning']['modified']);?>
</div>
<!-- Link di ritorno alla visualizzazione di base -->
<div class="link_back">
<a href="main.php?page=nuovo_progettogilda">
<?php echo gdrcd_filter('out',$MESSAGE['interface']['administration']['plot']['link']['back']); ?>
</a>
</div>
<?php } ?>
<?php /*Form di inserimento/modifica*/
if ((gdrcd_filter('get',$_POST['op'])=='edit') ||
(gdrcd_filter('get',$_REQUEST['op'])=='new')){
/*Preseleziono l'operazione di inserimento*/
$operation='insert';
/*Se è stata richiesta una modifica*/
if ($_POST['op']=='edit'){
/*Carico il record da modificare*/
/*
$query="SELECT * FROM ambientazione WHERE capitolo=".gdrcd_filter('num',$_POST['id_record'])." LIMIT 1 ";
$result=mysql_query($query);
*/
$loaded_record=gdrcd_query("SELECT * FROM progettogilda WHERE id_progetto=".gdrcd_filter('num',$_POST['id_record'])." LIMIT 1 ");
/*Cambio l'operazione in modifica*/
$operation='edit';
} ?>
<!-- Form di inserimento/modifica -->
<div class="panels_box">
<form action="main.php?page=nuovo_progettogilda"
method="post"
class="form_gestione">
<div class='form_label'>
<?php echo gdrcd_filter('out','Si rammenta che il proponente deve SEMPRE essere colui che sarà Leader e che non sono ammessi progetti che prevedano più di un Leader'); ?><br /><br />
<?php echo gdrcd_filter('out','Prima di inviare leggere attentamente le informazioni!'); ?>
</div>
<br />
<div class='form_label'>
<?php echo gdrcd_filter('out','Nome della Gilda o Mestiere proposti, specificando se gilda o mestiere'); ?>
</div>
<div class='form_field'>
<input name="progetto"
value="<?php echo gdrcd_filter('out',$loaded_record['progetto']); ?>" />
</div>
<div class='form_label'>
<?php echo gdrcd_filter('out','Progetto di massima della Gilda o Mestiere'); ?>
</div>
<div class='form_field'>
<script>edToolbar('ambient'); </script><textarea name="testo" id="ambient"><?php echo gdrcd_filter('out',$loaded_record['testo']); ?></textarea>
</div>
<?php if ($_SESSION['permessi']>=GUILDMODERATOR){ ?>
<div class='form_label'>
<?php echo gdrcd_filter('out','Stato di Approvazione del Progetto'); ?>
</div>
<div class="form_info">
<div class='form_field'>
<input name="stato"
value="<?php echo gdrcd_filter('out',$loaded_record['stato']); ?>" />
</div>
<br /> <?php } else { }?>
<?php echo '
<b>INFORMAZIONI SULLA PRESENTAZIONE</b><br /><br />
<b>Fase 1: Presentazione di un Progetto</b><br />
Grazie a questo modulo è possibile presentare un nuovo progetto di Gilda o Mestiere all\'Ordine Scarlatto, il quale a sua volta si occuperà di valutare la proposta e decidere se darle un seguito oppure no. Lo scritto deve contenere una presentazione a grandi linee dei contenuti programmatici; deve essere chiaro, conciso e non eccedere in lunghezza (massimo 100 righe).<br />
L\'Ordine Scarlatto procederà alla selezione dei progetti validi tramite votazione interna, stabilendo quali tra essi siano confacenti alle necessità del Regno e quali siano le effettive possibilità di realizzazione. Saranno ritenuti validi i progetti che riscuoteranno la metà più uno di voti favorevoli da parte dei membri dell\'Ordine e che avranno ricevuto il consenso del Magnifico Rettore dell\'Ordine stesso.<br />
'; ?>
</div>
<!-- bottoni -->
<div class='form_submit'>
<?php /* Se l'operazione è una modifica stampo i tasti modifica*/
if ($operation == "edit"){?>
<input type="submit"
value="<?php echo gdrcd_filter('out',$MESSAGE['interface']['forms']['modify']);?>" />
<input type="hidden"
name="art"
value="<?php echo 0+$loaded_record['id_progetto']; ?>">
<input type="hidden"
name="op"
value="doedit">
<?php } /* Altrimenti il tasto inserisci */
else { ?>
<input type="hidden"
name="op"
value="insert">
<input type="submit"
value="<?php echo gdrcd_filter('out',$MESSAGE['interface']['forms']['submit']);?>" />
<?php } ?>
</div>
</form>
</div>
<!-- Link di ritorno alla visualizzazione di base -->
<div class="link_back">
<a href="main.php?page=nuovo_progettogilda">
<?php echo gdrcd_filter('out',$MESSAGE['interface']['administration']['plot']['link']['back']); ?>
</a>
</div>
<?php }//if ?>
<?php if (isset($_REQUEST['op'])===FALSE) { /*Elenco record (Visualizzaione di base della pagina)*/
//Determinazione pagina (paginazione)
$pagebegin=(int)gdrcd_filter('get',$_REQUEST['offset'])*$PARAMETERS['settings']['records_per_page'];
$pageend=$PARAMETERS['settings']['records_per_page'];
//Conteggio record totali
$record_globale=gdrcd_query("SELECT COUNT(*) FROM progettogilda");
$totaleresults=$record_globale['COUNT(*)'];
//Lettura record
$result = gdrcd_query("SELECT id_progetto, progetto, testo, nome, stato FROM progettogilda ORDER BY id_progetto LIMIT ".$pagebegin.", ".$pageend."", 'result');
$numresults = gdrcd_query($result, 'num_rows');
/* Se esistono record */
if ($numresults>0){ ?>
<!-- Elenco dei record paginato -->
<div class="elenco_record_gestione">
<table>
<!-- Intestazione tabella -->
<tr>
<td class="casella_titolo"><div class="titoli1_elenco"><?php echo gdrcd_filter('out','Numero Identificativo'); ?></div></td>
<td class="casella_titolo"><div class="titoli1_elenco"><?php echo gdrcd_filter('out','Nome Gilda Progetto'); ?></div></td>
<td class="casella_titolo"><div class="titoli1_elenco"><?php echo gdrcd_filter('out','Possibile Leader'); ?></div></td>
<td class="casella_titolo"><div class="titoli1_elenco"><?php echo gdrcd_filter('out','Stato di Approvazione'); ?></div></td>
<?php if ($_SESSION['permessi']>=GUILDMODERATOR){ ?><td class="casella_titolo"><div class="titoli1_elenco"><?php echo gdrcd_filter('out',$MESSAGE['interface']['administration']['ops_col']); ?></div></td><?php } else { }?>
</tr>
<!-- Record -->
<?php while ($row = gdrcd_query($result, 'fetch')){ ?>
<tr class="risultati_elenco_record_gestione">
<td class="casella_elemento">
<div class="elementi_elenco">
<?php echo $row['id_progetto']; ?>
</div>
</td>
<td class="casella_elemento">
<div class="elementi_elenco">
<?php echo gdrcd_filter('out',$row['progetto']); ?>
</div>
</td>
<td class="casella_elemento">
<div class="elementi_elenco">
<?php echo gdrcd_filter('out',$row['nome']); ?>
</div>
</td>
<td class="casella_elemento">
<div class="elementi_elenco">
<?php echo gdrcd_filter('out',$row['stato']); ?>
</div>
</td>
<?php if ($_SESSION['permessi']>=GUILDMODERATOR){ ?>
<td class="casella_controlli"><!-- Iconcine dei controlli -->
<!-- Modifica -->
<div class="controlli_elenco">
<div class="controllo_elenco" >
<form class="opzioni_elenco_record_gestione" action="main.php?page=nuovo_progettogilda" method="post">
<input type="hidden" name="id_record" value="<?php echo $row['id_progetto']?>" />
<input type="hidden" name="op" value="edit" />
<input type="image"
src="imgs/icons/edit.png"
alt="<?php echo gdrcd_filter('out',$MESSAGE['interface']['administration']['ops']['edit']); ?>"
title="<?php echo gdrcd_filter('out',$MESSAGE['interface']['administration']['ops']['edit']); ?>" />
</form>
</div>
<!-- Elimina -->
<div class="controllo_elenco" >
<form class="opzioni_elenco_record_gestione" action="main.php?page=nuovo_progettogilda" method="post">
<input type="hidden" name="id_record" value="<?php echo $row['id_progetto']?>" />
<input type="hidden" name="op" value="erase" />
<input type="image"
src="imgs/icons/erase.png"
alt="<?php echo gdrcd_filter('out',$MESSAGE['interface']['administration']['ops']['erase']); ?>"
title="<?php echo gdrcd_filter('out',$MESSAGE['interface']['administration']['ops']['erase']); ?>"/>
</form>
</div>
</div>
<?php } else { ?>
</td>
</tr><?php } ?>
<?php } //while
gdrcd_query($result, 'free');
?>
</table>
</div>
<?php }//if ?>
<!-- Paginatore elenco -->
<div class="pager">
<?php if($totaleresults>$PARAMETERS['settings']['records_per_page']){
echo gdrcd_filter('out',$MESSAGE['interface']['pager']['pages_name']);
for($i=0;$i<=floor($totaleresults/$PARAMETERS['settings']['records_per_page']);$i++){
if ($i!=gdrcd_filter('num',$_REQUEST['offset'])){?>
<a href="main.php?page=nuovo_progettogilda&offset=<?php echo $i; ?>"><?php echo $i+1; ?></a>
<?php } else { echo ' '.($i+1).' '; }
} //for
}//if ?>
</div>
<!-- link crea nuovo -->
<div class="link_back">
<a href="main.php?page=nuovo_progettogilda&op=new">
<?php echo gdrcd_filter('out','Nuovo Progetto'); ?>
</a>
</div>
<!-- Link di ritorno alla visualizzazione elenco progetti -->
<div class="link_back">
<a href="main.php?page=leggi_progettogilda">
<?php if($_SESSION['permessi']>=GUILDMODERATOR){echo gdrcd_filter('out','Visualizza l\'elenco delle proposte in dettaglio'); }?>
</a>
</div>
<?php }//else ?>
</div>
</div><!--Pagina-->
30/06/2017 07:43:33
Perdonami, sono da cellulare, ma a primo sguardo... Nel Form non ho trovato la parte in cui richiami come input (hidden immsgino) il valore id_progetto per poi passarlo come campo POST...
30/06/2017 09:02:09
seralia ha scritto: Perdonami, sono da cellulare, ma a primo sguardo... Nel Form non ho trovato la parte in cui richiami come input (hidden immsgino) il valore id_progetto per poi passarlo come campo POST...
ok perfetto, ho aggiunto e chiarificato questa parte ed ora funziona bene. grazie mille seralia
c'era ma si chiamava name="art" nel form e quindi non si riconoscevano
30/06/2017 09:10:56
Infatti, mi pareva... ma essendo da cell preferivo aspettare di guardare con più schermo XD
Perfetto, puoi segnalare il thread come RISOLTO aggiornando il titolo?
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Wuthering Waves ↗
Tiles Survive ↗
Exclusive Villa GdR ↗
War Thunder ↗
AlterEgo ↗
Hero Wars ↗
Enlisted ↗