Sommare "testi" in DB
Sommare "testi" in DB postato il 16/03/2014 03:09:49 nel forum programmazione, open source e hosting
Buonasera :-)
Stasera mi sono imbattuto in un problema un po' insolito...
Vorrei sapere se è possibile "sommare" dei testi con un Update di una cella in DB. Mi spiego:
Ho una tabella: A
In questa tabella nella riga B
Il valore viene inserito in DB con una query:
$MySql = "UPDATE A SET B = '$Variabile' WHERE Condizione
Adesso però vorrei far sì che in B non venga "inserito il valore "$Variabile), bensì che venga "aggiunto" $Valore a quello che già si trova in B.
Quindi se in B c'è scritto: "Uno"
e $Variabile= "Due"
a fine query vorrei che in B ci fosse "Uno Due".
Qualche idea su come fare?
Se fossero valori numerici, basterebbe salvare il valore di B in una variable (es. $VariabilePrima) e poi creare una terza variabile ($VariabileDopo) definita come:
$VariabileDopo= $VariabilePrima + $Variabile
$MySql = "UPDATE A SET B = '$VariabileDopo' WHERE Condizione
Solo che $VariabileDopo, $VariabilePrima e $Variabile non sono numeri, quindi come posso sommarli?
Scusate se il post è confuso... un po' l'argomento un po' l'orario... XD
Grazie a tutti in anticipo :-)
Pagine → 1 2
16/03/2014 03:20:54
Se ho ben capito il problema...
-- concatena 'pippo' a quanto conenuto in column (MySQL)
UPDATE table SET column = CONCAT('pippo ',column) WHERE [...]
-- concatena 'pippo' a quanto conenuto in column (SQLite)
UPDATE table SET column = 'pippo '||column WHERE [...]
E' quello che vuoi? :)
16/03/2014 14:51:42
è giusto come dice digital-destiny, ma attenzione all'ordine dei parametri della funzione CONCAT ;)
16/03/2014 17:52:53
Quindi concat in pratica "somma" due parole/testi?
Stupendo!
Ora ci provo e vi faccio sapere :-)
Grazie
16/03/2014 18:09:31
Hmm, mi sa che non ho ben capito la funzione concat.
Scrivendo:
$MySql = "UPDATE Personaggio SET C1 = CONCAT('$C0','$CNuovo') WHERE Nome = '$Login'";
pensavo mi sarei ritrovato nella tabella Personaggio nella colonna C1 della riga $Login i due valori di $C0 e $CNuovo Accodati". Ma non va e ho tanto il sospetto che ho capito male qualcosa... :-)
16/03/2014 18:48:36 e modificato da leoblacksoul il 16/03/2014 18:49:20
Domanda: dato che i due valori ce li hai già in PHP...perchè li vuoi concatenare in MYSQL?!?!?
Se ce li hai in PHP, concatenali in PHP, con il solito operatore . (punto)
$MySql = "UPDATE Personaggio SET C1 = '".$C0.$CNuovo."') WHERE Nome = '$Login'";
CONCAT serve se vuoi concatenare dati che hai solo su MySQL e non vuoi metterti a caricare in PHP
Se vuoi concatenare una nuova stringa a un campo MySql che non vuoi metterti a caricare in PHP, allora usa CONCAT. Assumendo che il valore da aggiungere alla colonna sia in $CNuovo, la query diventa questa:
$MySql = "UPDATE Personaggio SET C1 = CONCAT(C1,'$CNuovo') WHERE Nome = '$Login'";
17/03/2014 00:57:53
leoblacksoul ha scritto: Domanda: dato che i due valori ce li hai già in PHP...perchè li vuoi concatenare in MYSQL?!?!?
Se ce li hai in PHP, concatenali in PHP, con il solito operatore . (punto)
[/code]
In effetti io non voglio concatenarli in MYSQL... :-)
Adesso faccio delle prove con il punto e poi vi faccio sapere ^^
Grazie :-)
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:
[code]$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>';
}}
[/code]
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?
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>';
}
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
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>';
}
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!
State of Survival ↗
Seconda Era ↗
Crossout ↗
World of Tanks ↗
Wuthering Waves ↗
AlterEgo ↗
The Coven ↗
Project Entropy ↗