- Home
- Categorie
- Coding e Sistemistica
- PHP
- Valore della variabile dipendente dall'if
-
Valore della variabile dipendente dall'if
Ciao a tutti, premetto che di PHP so poco/niente, quindi probabilmente userò dei termini non molto esatti ma spero che sia abbastanza comprensibile.
Brevemente quello che faccio e quello che vorrei fare:
- seleziono un campo dal db se un altro campo è uguale ad un testo
[php]$getname_cn1 = @mysql_query("SELECT cn FROM teamname WHERE uk='".$matchregs[1]."'",$obj_db);[/php]- ora vorrei creare una variabile che assuma il valore del testo contenuto nel testo se questo esiste altrimenti assume un altro valore che è uguale ad un precedente valore.
[php]if ($getname_cn1 !='') {$teamname_cn1 = mysql_result($getname_cn1,0);} else {$teamname_cn1=$matchregs[1];}[/php]Ma quest'ultimo mi fa visualizzare sempre il risultato della query al db anche se nel campo non c'è nessun testo. Ho provato anche invertendo ma non cambia
[php]if ($getname_cn1 =='') {$teamname_cn1=$matchregs[1];} else {$teamname_cn1 = mysql_result($getname_cn1,0);}[/php]In pratica mi serve che $teamname_cn1 abbia il valore presente nel db se esiste altrimenti deve usare il valore di $matchregs[1]
P.S.: il risultato mi serve come variabile dato che devo inserire questo testo in un database.
Non credo sia difficile ma son 2 ore che ci sbatto la testa
Grazie!
- seleziono un campo dal db se un altro campo è uguale ad un testo
-
Magari hai memorizzato uno spazio nel campo e quindi l'if non va.
Puoi provare a fare un trim sulla variabile oppure con uno strlenMa il campo può assumere valori NULL?
-
@Gorka said:
Magari hai memorizzato uno spazio nel campo e quindi l'if non va.
Puoi provare a fare un trim sulla variabile oppure con uno strlenMa il campo può assumere valori NULL?
La tabella "teamname" contiene i seguenti campi:
- 'id': numero progressivo
- 'isocode': codice di 2/3 lettere (probabilmente lo toglierò per non serve)
- 'uk': nome inglese
- 'cn': nome in cinese (con alfabeto cinese)
- 'ru': nome in russo (con alfabeto cirillico)
- 'it': nome in italiano (la maggior parte dei campi sono vuoti)
Quello che vorrei fare è cercare in 'uk' se esiste il valore uguale a $matchregs[1]. Se in 'cn' c'è la traduzione $teamname_cn1 assume questo valore, altrimenti $teamname_cn1 assume il medesimo valore di $matchregs[1].
Ho fatto l'echo di strlen e mi esce 15 :?. Può essere che strlen non riesce a contare i valori che utilizzano alfabeti diversi da quello latino? Anche se mi esce 15 come risultato dello strlen dei campi 'it' che sono vuoti.
I valori sono stati inseriti nella tabella come in questo esempio: (il primo ha tutti i campi "pieni" tranne 'it', nel secondo anche 'cn' è vuoto;
INSERT INTO teamname VALUES ('4', 'ar', 'Boca Juniors', '博卡青年', 'Бока Хуниорс', ''); INSERT INTO teamname VALUES ('10', 'ar', 'Huracan', '', 'Уракан', '');
Grazie
-
Qualcuno riesce ad aiutarmi?
Grazie
-
Prova ad aggiungere questo:
[php]
while($riga = mysql_fetch_array($getname_cn1))
{
if($riga["cn"] != '')
{
$teamname_cn1 = mysql_result($getname_cn1,0);
}
else
{
$teamname_cn1 = $matchregs[1];
}
}
[/php]
-
@Sups said:
Prova ad aggiungere questo:
Grazie, ci stiamo svvicinando alla soluzione
I titoli provengono da un feed quindi questa funzione deve tradurne 10-15. Con le righe che mi hai dato, quando non trova un contenuto (la maggior parte della volte) copia quello precedente e non quello originale...
Esempio1: Nel db la voce "Racing Club" non esiste ma invece di lasciare il testo originale copia quello della voce precedente.
(La prima riga è il titolo del feed, le altre due le traduzioni).
2008-08-31 Estudiantes La Plata - Arsenal Sarandi 2-0
2008-08-31 拉普拉塔大学生 - 阿尔瑟纳 2-0
2008-08-31 Эстудиантес Ла-Плата - Арсенал Саранди 2-02008-08-31 Argentinos Juniors - Racing Club 0-1
2008-08-31 阿根廷青年人 - 阿尔瑟纳 0-1
2008-08-31 Архентинос Хуниорс - Арсенал Саранди 0-1
Esempio 2: Ho provato ad aggiungere nel db "Racing Club" nel campo 'uk' lasciando vuoti gli altri 3. E adesso funziona:2008-08-31 Estudiantes La Plata - Arsenal Sarandi 2-0
2008-08-31 拉普拉塔大学生 - 阿尔瑟纳 2-0
2008-08-31 Эстудиантес Ла-Плата - Арсенал Саранди 2-02008-08-31 Argentinos Juniors - Racing Club 0-1
2008-08-31 阿根廷青年人 - Racing Club 0-1
2008-08-31 Архентинос Хуниорс - Racing Club 0-1
Come posso risolvere questa piccola "imperfezione"?.. perchè ovviamente non vorrei aggiungere anche tutte le voci senza traduzione..Grazie ancora
-
Ci sono vari motivi.
Con l'introduzione di un ciclo while, ogni operazione che attende un risultato elaborato dal ciclo, deve essere introdotta all'interno del ciclo stesso.Esempio
[php]
while($riga = mysql_fetch_array($getname_cn1))
{
if($riga["cn"] != '')
{
$teamname_cn1 = mysql_result($getname_cn1,0);
}
else
{
$teamname_cn1 = $matchregs[1];
}echo $teamname_cn1; // l'echo generato qui e' diverso da...
}
echo $teamname_cn1; // ... questo generato all'esterno.
[/php]Un esempio numerico:
WHILE { echo var $teamname_cn1 = 1 echo var $teamname_cn1 = 2 echo var $teamname_cn1 = 3 echo var $teamname_cn1 = 4 } echo var $teamname_cn1 = 4
Forse è per questa ragione che hai valori ripetuti.
La variabile $teamname_cn1 mantiene sempre lo stesso valore una volta che viene richiamata fuori dal ciclo che ha il compito di modificarla.
-
Non c'è una funzione per controllare se la riga esiste?...ho provato con mysql_num_rows > 0 ma non cambia nulla...
(ho modificato anche la funzione che cerca i valori per avere qualche ricerca nel db in meno.)
[php]
$getname_1 = @mysql_query("SELECT * FROM teamname WHERE uk='".$matchregs[1]."'",$obj_db);
$getname_2 = @mysql_query("SELECT * FROM teamname WHERE uk='".$matchregs[3]."'",$obj_db);if (mysql_num_rows($getname_1) > 0) {
while($riga = mysql_fetch_array($getname_1)) {
if($riga["cn"] != '') {$teamname_cn1 = $riga["cn"];} else {$teamname_cn1 = $matchregs[1];}
if($riga["ru"] != '') {$teamname_ru1 = $riga["ru"];} else {$teamname_ru1 = $matchregs[1];}
}}
if (mysql_num_rows($getname_2) > 0) {
while($riga = mysql_fetch_array($getname_2)) {
if($riga["cn"] != '') {$teamname_cn2 = $riga["cn"];} else {$teamname_cn2 = $matchregs[3];}
if($riga["ru"] != '') {$teamname_ru2 = $riga["ru"];} else {$teamname_ru2 = $matchregs[3];}
}}
[/php]______________________EDIT: Così sembra funzionare...è un abbaglio tipo oasi nel deserto oppure è giusto?
[php] $getname_1 = @mysql_query("SELECT * FROM teamname WHERE uk='".$matchregs[1]."'",$obj_db);
$getname_2 = @mysql_query("SELECT * FROM teamname WHERE uk='".$matchregs[3]."'",$obj_db);if (mysql_num_rows($getname_1) > 0) {
while($riga = mysql_fetch_array($getname_1)) {
if($riga["cn"] != '') {$teamname_cn1 = $riga["cn"];} else {$teamname_cn1 = $matchregs[1];}
if($riga["ru"] != '') {$teamname_ru1 = $riga["ru"];} else {$teamname_ru1 = $matchregs[1];}
}} else {$teamname_cn1 = $teamname_ru1 = $matchregs[1];}
if (mysql_num_rows($getname_2) > 0) {
while($riga = mysql_fetch_array($getname_2)) {
if($riga["cn"] != '') {$teamname_cn2 = $riga["cn"];} else {$teamname_cn2 = $matchregs[3];}
if($riga["ru"] != '') {$teamname_ru2 = $riga["ru"];} else {$teamname_ru2 = $matchregs[3];}
}} else {$teamname_cn2 = $teamname_ru2 = $matchregs[3];}[/php]
-
L'ultima modifica che hai postato, dove hai tolto mysql_result($getname_cn1,0) sostituendolo con $riga["cn"] è per questo che funziona, in questo modo sicuro sostituisci $teamname_cn1 con i valori correnti riga per riga.