Sommare "testi" in DB


sgc carter

SCRIVI

GESTORE GIOCO

17/03/2014 01:26:22

Bene, funziona quasi tutto per eccezione di una particolarità...

A volte, apparentemente senza schema, al posto di inserire in DB il valore della "Nuova Postazione" inserisce come valore " Nuova Postazione" ovvero aggiunge uno spazio davanti al valore...

Premesso che la variabile contiene il valore giusto (senza spazio) il codice è il seguente:

$sql = mysql_query("SELECT Consolle FROM Personaggio WHERE Nome = '$Login'");
$row = mysql_fetch_array($sql);
mysql_free_result($sql);
$PostazionePrima = $row['Consolle'];


if ($PostazionePrima != '0'){

if ($NuovaPostazione != '0') {
$MySql = "UPDATE Personaggio
SET Consolle = '".$PostazionePrima.' '.$NuovaPostazione."'
WHERE Nome = '$Login'";
$Result = mysql_query($MySql) or die(mysql_error());
echo '<b><font color=red>Consolle assegnata a '.htmlspecialchars(stripslashes($Login)).' </font></b>';
}
else {
$MySql = "UPDATE Personaggio
SET Consolle = '$NuovaPostazione'
WHERE Nome = '$Login'";
$Result = mysql_query($MySql) or die(mysql_error());
echo '<b><font color=red>Consolle assegnata a '.htmlspecialchars(stripslashes($Login)).' </font></b>';
} }

else {
if ($NuovaPostazione != '0') {
$MySql = "UPDATE Personaggio
SET Consolle = '$NuovaPostazione'
WHERE Nome = '$Login'";
$Result = mysql_query($MySql) or die(mysql_error());
echo '<b><font color=red>Consolle assegnata a '.htmlspecialchars(stripslashes($Login)).' </font></b>';
}
else {
$MySql = "UPDATE Personaggio
SET Consolle = '$NuovaPostazione'
WHERE Nome = '$Login'";
$Result = mysql_query($MySql) or die(mysql_error());
echo '<b><font color=red>Consolle assegnata a '.htmlspecialchars(stripslashes($Login)).' </font></b>';
}}



Lo spazio tra $PostazionePrima $NuovaPostazione quando $PostazionePrima NON vale 0, è voluto (così da dividere le due parole nella cella) ma quando in DB il valore è 0, non capisco perché venga inserito al posto di quello 0 uno "(Spazio)$NuovaPostazione".

Inoltre questo errore lo da, come detto, in maniera apparentemente random... Ho fatto diverse prove e niente... non capisco perché inserisca quello spazio...

Qualche idea in merito?

SGCOnline.it
L´unico GDR su Stargate
http://www.sgconline.it

quota


leoblacksoul

SCRIVI

17/03/2014 12:57:13 e modificato da leoblacksoul il 17/03/2014 12:57:42

Perchè fai così tanti if e else se poi ci metti dentro sempre la stessa query?

Ecco una versione un po' più comprensibile. Tolti i rami if inutili, pulite le variabili. Secondo me è tutta questione di pulizia dei contenuti delle variabili.
Dovresti riflettere molto bene su cosa accade quando $NuovaPostazione o $PostazionePrima sono vuote o uguali a zero. Io ho cercato di interpretare quello che volevi:


<?php
$sql = mysql_query("SELECT Consolle FROM Personaggio WHERE Nome = '$Login'");
$row = mysql_fetch_array($sql);
mysql_free_result($sql);
$PostazionePrima = trim($row['Consolle']);

$NuovaPostazione=trim($NuovaPostazione);
if(!empty($PostazionePrima) && !empty($NuovaPostazione)){
$MySql = "UPDATE Personaggio
SET Consolle = '".mysql_real_escape_string($PostazionePrima." ".$NuovaPostazione)."'
WHERE Nome = '$Login'";
$Result = mysql_query($MySql) or die(mysql_error());
echo '<b><font color=red>Consolle assegnata a '.htmlspecialchars(stripslashes($Login)).' </font></b>';
}
else{
$MySql = "UPDATE Personaggio
SET Consolle = '0'
WHERE Nome = '$Login'";
$Result = mysql_query($MySql) or die(mysql_error());
echo '<b><font color=red>Consolle assegnata a '.htmlspecialchars(stripslashes($Login)).' </font></b>';
}

---
Non chiedetemi aiuto in privato per questioni di programmazione; chiedete sul forum e eventualmente vi risponderò lì.
http://gdrportal.eu - Hosting per GDR

quota


sgc carter

SCRIVI

GESTORE GIOCO

17/03/2014 16:26:10

Ho provato il codice che mi ha dato, e ti ringrazio, ma credo che senza una spiegazione più approfondita di cosa sto cercando di fare (magari avrei dovuta darla prima) è difficile interpretare quel pezzo di codice.

Il problema (e motivo) di tutti quei if è il seguente:

Quel codice servirebbe per "occupare" delle postazioni di plancia. (Capitano, primo ufficiale...).

Fino ad ora era possibile accomodarsi solamente ad una singola postazione alla volta. Adesso però abbiamo introdotto la possibilità di interfacciare più postazioni insieme.

La chat è predisposta per "ignorare" il tag della postazione (che viene stampato in chat prima di ogni azione del PG) se nel Tag c'è uno 0 (non se è vuoto).

Quindi i vari if nascono dall'idea:

SE nel campo consolle del PG c'è uno 0, lo 0 va eliminato e al suo posto va inserita la postazione occupata (quindi quando ci si siete a una postazione)

SE nel campo consolle del PG c'è già una postazione (quindi se è =!0) la nuova postazione va aggiunta, dopo uno spazio, a quella già presente nel campo (quindi quando si interfacciano due o più postazioni)

SE il valore della nuova postazione è 0, allora nel campo va inserito solo uno 0 (che corrisponde ad alzarsi dalla postazione).

E da qui, tutta quella serie di if, else, maybe e perhaps XD



SGCOnline.it
L´unico GDR su Stargate
http://www.sgconline.it

quota


leoblacksoul

SCRIVI

17/03/2014 23:21:33 e modificato da leoblacksoul il 17/03/2014 23:22:46

La chat è predisposta per "ignorare" il tag della postazione (che viene stampato in chat prima di ogni azione del PG) se nel Tag c'è uno 0 (non se è vuoto).

Quella parte non l'ho cambiata XD
Tu hai scritto !='0' ma dato che PHP ha tipizzazione dinamica e fa conversione dei tipi in automatico, quel controllo che hai scritto tu equivale praticamente al mio empty().
Se vuoi controllare esattamente il carattere 0, allora devi usare l'operatore di identità (===) e non l'operatore di uguaglianza (==) perchè altrimenti vengono fatte conversioni di tipo. http://www.php.net/manual/en/types.comparisons.php
Ma io eviterei di farlo e userei empty() per cercare di rendere più robusto il comportamento del codice in caso di valori inattesi (tipo appunto il campo vuoto)

Per quanto riguarda il resto allora ci va una piccola modifica:

$sql = mysql_query("SELECT Consolle FROM Personaggio WHERE Nome = '$Login'");
$row = mysql_fetch_array($sql);
mysql_free_result($sql);
$PostazionePrima = trim($row['Consolle']);

$NuovaPostazione=trim($NuovaPostazione);
if(!empty($PostazionePrima) && !empty($NuovaPostazione)){
$MySql = "UPDATE Personaggio
SET Consolle = '".mysql_real_escape_string($PostazionePrima." ".$NuovaPostazione)."'
WHERE Nome = '$Login'";
$Result = mysql_query($MySql) or die(mysql_error());
echo '<b><font color=red>Consolle assegnata a '.htmlspecialchars(stripslashes($Login)).' </font></b>';
}
else{
$MySql = "UPDATE Personaggio
SET Consolle = '".mysql_real_escape_string($NuovaPostazione)."'
WHERE Nome = '$Login'";
$Result = mysql_query($MySql) or die(mysql_error());
echo '<b><font color=red>Consolle assegnata a '.htmlspecialchars(stripslashes($Login)).' </font></b>';
}

---
Non chiedetemi aiuto in privato per questioni di programmazione; chiedete sul forum e eventualmente vi risponderò lì.
http://gdrportal.eu - Hosting per GDR

quota


Discussione seguita da sgc carter

Pagine → 1  2 

Rispondi alla Discussione Aggiungi ai Preferiti Inoltra Discussione Forum Programmazione, GDRCD e Open Source Elenco Forum

Articoli, Recensioni, Interviste e altre Risorse!

Pubblicità

Accedi o Registrati

Risorse del Portale

Pubblicità

Ultime dal Portale

Pubblicità