Visualizzazione risultati 1 fino 22 di 22

Discussione: [PHP] Modificare file di testo

  1. #1
    Guest

    Unhappy [PHP] Modificare file di testo

    Ma dico io: cosa c'è di più facile?

    E invece no. Non vuole assolutamente, inesorabilmente, sfortunatamente, dannatamente funzionare.

    Codice semplicissimo, eppure non funziona. Perché? Il cervello sta per scoppiarmi. Ma lui non funziona.

    Ecco il codice:

    Codice PHP:
    <?php
    $colors_file
    =fopen("../txt/colors.txt","w+");
    $ris=fwrite($colors_file,"$_GET[c]");
    fclose($colors_file);

    if(
    $ris){ ?><h1>Il file è stato cambiato.</h1><?php } ?>

  2. #2
    Ospite Guest

    Predefinito

    Che vuol dire che non funziona?
    Ovvero: Che errore ti da?

  3. #3
    Guest

    Predefinito

    - il file in questione ha i permessi necessari? li controlli con is_writable()
    - $_GET[c] non dovrebbe essere: $_GET['c'] ?

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    un paio di controlli già non farebbero male
    Codice PHP:
    <?php
    if ( $colors_file = fopen("../txt/colors.txt","w+") )
    {
    $ris = fwrite($colors_file, $_GET[c]);
    fclose($colors_file);
    ?><h1>Il file è stato cambiato.</h1><?
    }
    else
    echo
    "Errore nella scrittura";
    ?>
    quel $_GET[c] è un po' dubbio anche per me. se ci metti c, deve esistere la costante, altrimenti è $c oppure 'c'. Se poi lo metti in una stringa non credo vada: i nomi di variabili complessi vanno messi fra graffe, quindi "$ciao" è ok, ma poi devi usare "{$_GET[c]}" (a quel punto, fuori dalla stringa è più saggio).

    is_writable() non è in effetti necessario, se fai il controllo sul risultato di fopen(): se non riesce ad aprirlo come w+ fallisce e ritorna false.
    Ultima modifica di dreadnaut : 29-07-2007 alle ore 16.31.52

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da Zorinik
    Ma dico io: cosa c'è di più facile?

    E invece no. Non vuole assolutamente, inesorabilmente, sfortunatamente, dannatamente funzionare.

    Codice semplicissimo, eppure non funziona. Perché? Il cervello sta per scoppiarmi. Ma lui non funziona.

    Ecco il codice:

    Codice PHP:
    <?php
    $colors_file
    =fopen("../txt/colors.txt","w+");
    $ris=fwrite($colors_file,"$_GET[c]");
    fclose($colors_file);

    if(
    $ris){ ?><h1>Il file è stato cambiato.</h1><?php } ?>
    non credo che tu possa interrompere cosi il tag del php...

    Codice PHP:
    <?php
    $colors_file
    =fopen("../txt/colors.txt","w+");
    $ris=fwrite($colors_file,"$_GET[c]");
    fclose($colors_file);

    if(
    $ris){ echo"<h1>Il file è stato cambiato.</h1>";} ?>

  6. #6
    Ospite Guest

    Predefinito

    - $_GET[c] non dovrebbe essere: $_GET['c'] ?
    Gli apici non fanno la differenza
    non credo che tu possa interrompere cosi il tag del php...
    Informazione errata,si può eccome

  7. #7
    Guest

    Predefinito

    io ogni volta che li ometto mi da un errore undefined constant! bho
    almeno apache, quello di altervista invece no

    Per l'interruzione del php, mi scuso, non lo sapevo è la prima volta che vedo una cosa simile

    P.S. scusate le informazioni in ritardo, ma ogni pagina del forum di altervista mi da 60 secondi di attesa! Credo ci sia qualche problema...
    Ultima modifica di Dharlet : 29-07-2007 alle ore 16.35.46

  8. #8
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    @dharlet: si, puoi farlo
    @probid: gli apici fanno differenza assai, php è gentile a volte, ma da un warning comunque.

    riguardando (e rieditando in ritardo il mio mess sopra) direi che l'errore è "$_GET[c]" che dovrebbe essere $_GET['c'] oppure "{$_GET['c']}".

  9. #9
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut
    riguardando (e rieditando in ritardo il mio mess sopra) direi che l'errore è "$_GET[c]" che dovrebbe essere $_GET['c'] oppure "{$_GET['c']}".
    Come immaginavo
    però dovremmo anche sapere qual'e il problema, se da errori o simili...
    aspettiamo l'autore del topic

  10. #10
    Ospite Guest

    Predefinito

    @probid: gli apici fanno differenza assai, php è gentile a volte, ma da un warning comunque.
    Non usare i doppi apici non è un errore,dipende tutto dalla segnalazione errori.
    L'errore dubito sia causato dai doppi apici,infatti l'uso di questi consente l'interpretazione della variabile; sarebbe stato un errore se gli apici fossero stati unici.
    Nello script secondo me non ci sono errori,verifica i permessi piuttosto

  11. #11
    Guest

    Predefinito

    Allora; ho provato a correggere quel $_GET[c] mettendo gli apici e memorizzandolo in una variabile separata da passare al file. Ma niente.

    Poi: errori? Niente, neanche l'ombra.

    Ecco il codice che ho usato:

    Codice PHP:
    if ( $colors_file = fopen("../txt/colors.txt","w+") )
    {
    $color=$_GET['c'];
    $ris = fwrite($colors_file, $color);
    fclose($colors_file);
    ?><h1>Il file è stato cambiato.</h1><?
    }else{
    echo
    "Errore nella scrittura";
    }
    ?>
    Mi dice in pompa magna "Il file è stato cambiato." ma in realtà non ha cambiato neanche un bit di quel file.

    EDIT: aggiornamento: al posto di $color ho provato a mettere una stringa a piacere mio... e me la cambia! Per evitare dubbi, la variabile $_GET['c'] esiste!
    Ultima modifica di Zorinik : 29-07-2007 alle ore 16.55.22

  12. #12
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Citazione Originalmente inviato da probid
    Non usare i doppi apici non è un errore, dipende tutto dalla segnalazione errori.
    uhm, stiamo parlando di cose diverse? io parlavo di warning, e non faccio differenza fra doppi e singoli apici quando dentro c'è solo "c". Se intendi "all'esterno" di $_GET['c'], allora con apici doppi la variabile viene letta, altrimenti viene usata la stringa stessa.

    @zorinik:
    e se dentro al file provi a scriverci la magica parola ?
    Codice PHP:
    fwrite($colors_file, "aaaaaaaaaaaaaarrrrghhhhh");
    edit: che fastidio sta lag

    per sicurezza aggiungi in cima al file un
    Codice PHP:
    error_reporting(E_ALL);
    print_r($_GET);
    così sei certo di quello che sta succedendo
    Ultima modifica di dreadnaut : 29-07-2007 alle ore 17.00.52

  13. #13
    Guest

    Predefinito

    Allora. Il valore di c era un codice esadecimale di un colore.

    Ora, fin quando iniziava con # lo script non muoveva un muscolo.

    Appena ho modificato lo script in modo da fargli arrivare solo il codice, e di aggiungere lo # in fase di scrittura, d'un tratto tutto ha magicamente funzionato. Dunque l'errore era che quella variabile iniziava per #.
    Non sapevo però che non si potesse fare... pur sempre una stringa è...

  14. #14
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    se metti un #qualcosa in fondo ad un url, viene usato come anchor!! quindi la variabile $_GET['c'] era vuota

  15. #15
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut
    se metti un #qualcosa in fondo ad un url, viene usato come anchor!! quindi la variabile $_GET['c'] era vuota
    io ho sempre saputo che con # iniziava un commento
    quindi se in php scrivi qualcosa dopo # la considera commento

  16. #16
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    commenti? in php? non erano // e /* ... */ ? :mumble:

    edit: si! anche # può essere usato come commento! non credo sia però il caso di questo errore, perché commento o non commento, era dentro una variabile. Il problema era l'url con un anchor in fondo.
    Ultima modifica di dreadnaut : 29-07-2007 alle ore 17.06.16

  17. #17
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut
    commenti? in php? non erano // e /* ... */ ? :mumble:
    Provare per credere, commento o meno, e come lo ignorasse

  18. #18
    Guest

    Predefinito

    Probabilmente ha ragione dreadnut, sì...

    Quella dei commenti è falsa, perché i commenti iniziano sì per #, ma se # è messo in una stringa (fra le due virgolette) mica viene calcolato come inizio commento!

  19. #19
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    rinuncio a postare con la lag, o con gente troppo veloce
    ho editato il mess sopra, anche se in ritardo

  20. #20
    Guest

    Predefinito

    Citazione Originalmente inviato da Zorinik
    Probabilmente ha ragione dreadnut, sì...

    Quella dei commenti è falsa, perché i commenti iniziano sì per #, ma se # è messo in una stringa (fra le due virgolette) mica viene calcolato come inizio commento!
    Non so bene a cosa serva, so solo che se scrivo qualcosa che comincia per # me la ignora completamente

    EDIT: è ovvio che messo tra virgolette come stringa non viene considerato!
    prova a fare $parola = "/*";
    non lo considera come inizio commento, eppure /* serve proprio a quello!

    P.S. con sti lag ho una certa voglia di buttare il computer dalla finestra... non so voi
    Ultima modifica di Dharlet : 29-07-2007 alle ore 17.10.28

  21. #21
    Guest

    Predefinito

    Ma diamine sono l'unico a non sapere cosa sono 'sti lag?!?

  22. #22
    Ospite Guest

    Predefinito

    Non so bene a cosa serva, so solo che se scrivo qualcosa che comincia per # me la ignora completamente
    Perchè il testo dopo il # viene considerato commento, come già detto.
    Se però tu metti il testo compreso di # tra virgolette [magari come valore di una variabile] ,viene interpretato ;)
    EDIT: lag = http://it.wikipedia.org/wiki/Lag_(informatica)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •