Pulsante reset posizione
Pulsante reset posizione postato il 07/01/2014 13:58:09 nel forum programmazione, open source e hosting
Ciao a tutti e AUGURI :-)
Scrivo perché sto cercando un metodo "lineare" ovvero con pochi passaggi e possibilmente con un codice "semplice e funzionale" per programmare un pulsante che invii al DB delle informazioni.
La situazione è questa:
Ho una tabella in DB che si chiama "Navi" e questa tabella è composta da 3 colonne:
ID : ID della nave
Nome : Il nome della nave
Sinistra : La posizione in px da sinistra
Su : La posizione in px dall'alto
Ora, vorrei creare un pulsante che per un dato ID, imposti Sinistra e Su a due valori (diversi) di default (Mettiamo che i dati siano 100 e 200 (quindi 100px da sinistra e 200px da sopra).
Ogni "nave" ha una propria pagina di gestione e una posizione di "default", e l'idea sarebbe quella di poter reimpostare la posizione della nave sui suoi valori di default con un clic.
Possibile che tutte le soluzioni che mi vengano in mente comprendano strani giri tra form e values strani? XD
Grazie a tutti in anticipo :-)
Pagine → 1 2
07/01/2014 14:08:51
Beh dipende da cosa intendi per strani giri di form.
Per farla molto semplice io inserirei un form così
<form action="resettaNave.php">
<input type="hidden" name="idnave" value="XXX"/>
<input type="submit" value="Reset coordinate"/>
</form>
e dentro quella pagina .php poi si lancia una normale query di update stile
UPDATE navi SET Sinistra=100, Su=200 WHERE ID=XXX
Ovviamente io l'ho fatta molto facile, per farla in maniera più pulita sarebbe comodo far avvenire tutto questo in una chiamata ajax e soprattutto bisognerebbe fare un po' di controlli per evitare che chiunque possa resettare le navi altrui.
07/01/2014 14:16:39
In effetti mi sono espresso male... intendevo una soluzione che non comprendesse una pagina (o query) a parte e poi una chiamata ecc ecc...
Anche perché stavo valutando di raggruppare più navi (dello stesso giocatore) su un'unica pagina di gestione... anche se a pensarci bene basta che gli passo l'id della nave e non dovrebbero esserci problemi.
thx :-)
07/01/2014 14:22:25
sgc carter ha scritto: In effetti mi sono espresso male... intendevo una soluzione che non comprendesse una pagina (o query) a parte e poi una chiamata ecc ecc...
In questo caso sono abbastanza sicuro tu abbia già una pagina che gestisce lo spostamento delle navi. Se riesci a far partire quel form senza intaccare altra roba potresti appoggiarti a quello senza ulteriori pagine e query.
Ti basta "ingannare" quella pagina facendola lavorare come se l'utente avesse deciso autonomamente di spostarsi a 100,200 quando in realtà sei tu che gli hai passato quei valori in modo manuale.
In caso non sia possibile far partire lo stesso form che di norma userebbe l'utente, potresti banalmente farne uno nuovo che richiami la stessa pagina e faccia eseguire le stesse operazioni di aggiornamento.
07/01/2014 14:50:21
In effetti ho una pagina che raggruppa varie navi, per le rotazioni delle varie unità...
Il codice che fa "ruotare" le navi, in realtà sostituisce l'immagine che raffigura l'icona della direzione e funziona così:
<table cellpadding=1 cellspacing=1 border=0>
<form action="navi.php" method=Post>
<tr>
<td width="403" align=center><font class=Titolo color="#000000"> </font></td>
</tr><tr>
<td>
<center><font color="#FFCC33"> Nave 1 </font><br>
<?php if ($Icona1=='/H1.png')
$I1='Nord';
else if ($Icona1=='/H2.png')
$I1='Nord-Est';
else if ($Icona1=='/H3.png')
$I1='Est';
else if ($Icona1=='/H4.png')
$I1='Sud-Est';
else if ($Icona1=='/H5.png')
$I1='Sud';
else if ($Icona1=='/H6.png')
$I1='Sud-Ovest';
else if ($Icona1=='/H7.png')
$I1='Ovest';
else if ($Icona1=='/H8.png')
$I1='Nord-Ovest';
?>
<select name="Icona1">
<option value="<?= $I1 ?>"><?= $I1 ?></option>
<option value="/H1.png">Nord</option>
<option value="/H2.png">Nord-Est</option>
<option value="/H3.png">Est</option>
<option value="/H4.png">Sud-Est</option>
<option value="/H5.png">Sud</option>
<option value="/H6.png">Sud-Ovest</option>
<option value="/H7.png">Ovest</option>
<option value="/H8.png">Nord-Ovest</option>
</select>
<!-- <input type="text" name="Icona2" maxlength="50" value="<?= htmlspecialchars($Icona2) ?>" style="width:100px; font-size:11px; "> --> </center>
</td>
</tr><tr>
<td align=center> <input type=submit value="Ruota Nave 1"></td>
</tr>
</form>
</table>
Ovviamente poi c'è l'UPDATE che:
if ($Icona1!='') {
$MySql = "UPDATE Unita SET Icona = '$Icona1' WHERE Numero = '1000'";
mysql_query($MySql);
}
E questo avviene per diverse navi sulla stessa pagina individuando le varie navi1, 2, 3... con Icona1, Icona2, ecc...
Ora, idealmente, questo benedetto pulsantino sarebbe ideale comparisse accanto al pulsante "Ruota Nave 1" e recasse la scritta "Resetta Nave 1" così che i master (che muovono le navi) dovrebbero solamente premere il pulsante per impostare: Sopra e Sinistra (variabili in DB) sui valori predefiniti...
E il motivo per il quale cercavo un codice "lineare" è proprio perché tutto è il codice sopra, meno che lineare XD
07/01/2014 15:24:41
Mmmh, però mi sembra di non vedere nessun collegamento fra questo codice e quello della tabella Navi.
Non ne hai uno che fa l'update su quella tabella?
07/01/2014 15:40:00
L'update è:
if ($Icona1!='') {
$MySql = "UPDATE Unita SET Icona = '$Icona1' WHERE Numero = '1000'";
mysql_query($MySql);
}
Avevo chiamato la tabella "navi" nell'esempio per semplificare :-)
07/01/2014 18:00:55
<table cellpadding=1 cellspacing=1 border=0>
<form action="navi.php" method=Post id="formNavi">
<tr>
<td width="403" align=center><font class=Titolo color="#000000"> </font></td>
</tr><tr>
<td>
<center><font color="#FFCC33"> Nave 1 </font><br>
<?php if ($Icona1=='/H1.png')
$I1='Nord';
else if ($Icona1=='/H2.png')
$I1='Nord-Est';
else if ($Icona1=='/H3.png')
$I1='Est';
else if ($Icona1=='/H4.png')
$I1='Sud-Est';
else if ($Icona1=='/H5.png')
$I1='Sud';
else if ($Icona1=='/H6.png')
$I1='Sud-Ovest';
else if ($Icona1=='/H7.png')
$I1='Ovest';
else if ($Icona1=='/H8.png')
$I1='Nord-Ovest';
?>
<select name="Icona1">
<option value="<?= $I1 ?>"><?= $I1 ?></option>
<option value="/H1.png">Nord</option>
<option value="/H2.png">Nord-Est</option>
<option value="/H3.png">Est</option>
<option value="/H4.png">Sud-Est</option>
<option value="/H5.png">Sud</option>
<option value="/H6.png">Sud-Ovest</option>
<option value="/H7.png">Ovest</option>
<option value="/H8.png">Nord-Ovest</option>
</select>
<!-- <input type="text" name="Icona2" maxlength="50" value="<?= htmlspecialchars($Icona2) ?>" style="width:100px; font-size:11px; "> --> </center>
</td>
</tr><tr>
<td align=center> <input type=submit value="Ruota Nave 1"></td>
</tr>
<tr>
<td align=center> <input type="button" onClick="resetNave(<?php echo $ID_NAVE ?>)" value="Reset Nave 1"></td>
</tr>
</form>
</table>
questo per quanto riguarda il form, mentre questa è la funzione javascript che verrà richiamata al reset
<script>
function resetNave(idNave){
if(idNave!=null)
{
var form = document.getElementById("formNavi");
form.innerHTML = form.innerHTML + "<input type='text' name='reset' value='"+idNave+"'>";
form.submit();
}
}
</script>
per finire, il tuo codice PHP diventerà simile a questo
if ($Icona1!='') {
$MySql = "UPDATE Unita SET Icona = '$Icona1' WHERE Numero = '1000'";
mysql_query($MySql);
}
if($reset!=null && $reset>0)
{
//controlli per assicurarti che solo il proprietario di una nave possa resettarla, e che il numero inserito arrivi valido
$MySql = "UPDATE Unita SET SINISTRA=100, SU=200 WHERE Numero = $reset";
mysql_query($MySql);
}
Ho collaudato solo la parte JS, ma smanettandoci un po' sopra non dovrebbe esser difficile da adattare per bene alla tua situazione. Per come l'ho scritto è già impostato nell'ottica di avere più navi nella stessa pagina
07/01/2014 22:11:56
Ti ringrazio per la risposta...
Domani, a mente fresca, faccio un po' di prove e ti faccio sapere.
A prima vista però non mi torna il pulsante reset:
<input type="button" onClick="resetNave(<?php echo $ID_NAVE ?>)" value="Reset Nave 1">
quel $ID_NAVE non viene valorizzato da nessuna parte... mi sembra... cmq, come detto, domani faccio qualche prova e vediamo che succede.
Grazie ancora :-)
07/01/2014 22:37:38
sgc carter ha scritto: quel $ID_NAVE non viene valorizzato da nessuna parte... mi sembra...
Hai visto bene. Dal momento che l'unica cosa più simile ad un ID (per meglio chiamarla chiave primaria) che ho visto era quel WHERE Numero = '1000'", ho ragionato presupponendo che Numero == ID
Infatti nella mia query ho scritto WHERE Numero = $reset
In ogni caso da qualche parte avrai comunque un identificativo per la nave, altrimenti una volta fatto il submit del form non saprai quale specifico record aggiornare sul DB. Tutto quel che devi fare è sostituire quel $ID_NAVE con una variabile che contenga davvero quel dato. Nel caso in cui la tua chiave primaria non si chiami Numero ma ad esempio ID, ti basta far diventare la query WHERE ID = $reset
07/01/2014 22:45:02
Ahhh, tutto chiaro :-)
Grazie, ti farò sapere ^^
Discussione seguita da
Pagine → 1 2
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
New Orleans ↗
World of the Sea Battle ↗
The Coven ↗
Enlisted ↗
Cafuné ↗
Seconda Era ↗
War Thunder ↗
Foundation Galactic Frontier ↗
Tiles Survive ↗
Hero Wars ↗