• User

    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 :mmm:

    Grazie!


  • Super User

    Magari hai memorizzato uno spazio nel campo e quindi l'if non va.
    Puoi provare a fare un trim sulla variabile oppure con uno strlen

    Ma il campo può assumere valori NULL?


  • User

    @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 strlen

    Ma 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


  • User

    Qualcuno riesce ad aiutarmi?

    Grazie


  • User Attivo

    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]


  • User

    @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-0

    2008-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-0

    2008-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


  • User Attivo

    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.


  • User

    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]


  • User Attivo

    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.