[RISOLTO] [PHP] Istruzione "if" non funziona

CristianB72

Nuovo Utente
24 Giu 2016
24
1
3
47
Ri-buonasera al popolo di MrWebmaster!
Ho un nuovo quesito da sottoporre agli "illuminati" di questo ottimo sito, sempre in ambito PHP.
Sto inventandomi delle esercitazioni improntate sui database testuali per analizzare ogni singolo elemento e togliermi qualsiasi dubbio inerente al loro funzionamento.
Premetto che tutti i nomi e numeri di telefono sono totalmente inventati.
Il primo elemento è l'ID univoco a sua volta corrispondente all'ultimo elemento password.

Questo, il contenuto del database.txt:
Codice:
1|Ermanno|Foscari|Viale Ermanno Giordani XXV, 1|Bergamo|066549873|gty7
2|Cristian|Bugno|Via Ugo Foscolo, 15|Firenze|0554597332|iuy7
3|Marino|De Palo|Viale Zara, 23|Roma|061154702|78hg
4|Rolando|Furioso|Via Mortara, 15|Ferrara|06122382|34er
5|Mirco|Bertocchi|Viale Europa, 999|Verona|045549873|88ui
6|Lorenzo|Bertarelli|Viale Europa, 115|Verona|04598700|34as
7|Marco|Malvisi|Via Ungaretti, 7|Rovigo|042546710|ty11
8|Luisa|Maini|Via dell'Angelus, 211|Rovereto|0445110710|tc56
9|Marika|Foletti|Via Sasso Marconi, 33|Genova|019000002|5erq
10|Susanna|Righetti|Viale Australia, 88|Padova|049113578|70kk
11|Luisella|Martini|Via Bergamotto, 90|Padova|049997744|11qq
12|Leonardo|Manera|Via Jugoslavia, 65|Venezia|041357845|io94
13|Marisa|Laurito|Via dello Spezzatino, 14|Venezia|041324679|123
14|Massimo|Musiani|Via Le Dita dal Naso, 77|Ferrara|053277877|71z14
15|Antenore|Necchi|Via Ladino, 4|Ferrara|05327784577|7a7
Questo invece è lo script che dovrebbe apportare una modifica all'indirizzo e alla città dell'ipotetico utente:
PHP:
function modifica($elem1, $elem2, $elem3, $elem4)
            {
               
                $primo = fopen ("database.txt", "r");
                $secondo = fopen ("database_new.txt", "a");
                while ($linea = fgets ($primo))
                    {
                        $arg = explode("|", $linea);
                        if ($arg[0] == $elem1)
                            {
                                if ($arg[6] == $elem4)
                                    {
                                        $rigamodificata = $arg[0]."|".$arg[1]."|".$arg[2]."|".$elem2."|".$elem3."|".$arg[5]."|".$arg[6];
                                        fwrite ($secondo, $rigamodificata);
                                        echo "<br/>Indirizzo modificato con successo!!!<br/>";
                                    }else
                                        {
                                            fwrite ($secondo, $linea);
                                            echo "<br/>La password ".$elem4." non corrisponde, nessuna modifica effettuata!<br/>";
                                        }
                               
                            }else
                                {
                                    fwrite ($secondo, $linea);
                                }
                       
                    }
                fclose ($secondo);
                fclose ($primo);
                unlink ("database.txt");
                rename ("database_new.txt", "database.txt");
               
            }

modifica("13", "Corso Giovecca, 71", "Venezia", "123");
La mia domanda è, come mai lo script non modifica l'indirizzo dell'utente scelto? Ovvero, invocando la funzione "modifica()" e selezionando l'ID numero 13 e relativa password, sembra che la seconda istruzione "if" non da' esito positivo. Ho fatto mille prove e modifiche al codice ma non ne esco vivo.
Sempre un grazie infinito a chi mi risponderà. :)
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, le due stringhe non sono uguali. Se metti un var_dump prima della if ti accorgi della differenza
PHP:
var_dump($elem4);
var_dump($arg[6]);
puoi utilizzare la funzione trim() per eliminare gli spazi.
 

CristianB72

Nuovo Utente
24 Giu 2016
24
1
3
47
Hai ragione Criric....cavolo..! Ma lo spazio a cosa è dovuto? Cioè il "123 " da cosa viene creato? Dal "\r\n"?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
si, pi+ che uno spazio è un a capo
 

CristianB72

Nuovo Utente
24 Giu 2016
24
1
3
47
Capisco....probabilmente facevo un test attraverso l'uso di print_r() e non col var_dump().
Può essere?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
con il print_r non è cosi evidente lo spazio, devi selezionare il testo per vederlo.
Il parametro "a" della funzione fopen() aggiunge il testo indicato a quello già esistente ma non aggiunge la linea, devi aggiungerla tu con \n
Se vuoi trimmare per sicurezza tutti gli elementi di un array puoi utilizzare array_map()
PHP:
$arg = array_map('trim', explode("|", $linea));