Visualizzazione risultati 1 fino 21 di 21

Discussione: Problema user defined function

  1. #1
    L'avatar di zerobruno
    zerobruno non è connesso Utente
    Data registrazione
    03-10-2013
    Messaggi
    192

    Predefinito Problema user defined function

    Ho incluso il codice che riporto sotto ed ho scritto punteggio(+10);, ma dice che la funzione punteggio() non esiste.
    Ho controllato i percorsi e sono corretti. Ho Googlato ma non ho trovato un Gran Chio.

    Sono alle prime armi con le funzioni personalizzate, perchè non ho mai trovato una reale necessità di utilizzarle, ma penso che una volta imparate potrò perfezionare alcuni script presenti nel mio spazio web, ma questo è affar mio.

    Aspetto chi mi faccia Illuminista; nel Frattempo ringrazio.


    Grazie. Viva Händel.
    Codice PHP:
    <?
    if (isset($_SESSION['login']))
    //procedo se l'utente è loggato
    {
    function
    punteggio($str)
    {
    $dir = 'login/'.$_SESSION['login'].'/p.txt';
    //definisco la cartella del punteggio
    $o = substr($str, 0, 1);
    $n = substr($str, 1);
    //divido +1 in + ed in 1
    if ($o = "+")
    se è più
    {
    file_put_contents($dir, file_get_contents($dir)+$n);
    aggiorno il punteggio aggiungendogli il carattere dopo il più
    }
    elseif (
    $o = "-")
    {
    file_put_contents($dir, file_get_contents($dir)-$n);
    }
    //if del + o -
    }
    //function
    }
    //if del login
    ?>

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,247

    Predefinito

    Non sono andato a leggere l'interno della funzione, ma mi pare di capire che vuoi dichiarare una funzione solo se l'utente è loggato.

    A prima vista, manca la session_start().

    Ciao!

  3. #3
    L'avatar di zerobruno
    zerobruno non è connesso Utente
    Data registrazione
    03-10-2013
    Messaggi
    192

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Non sono andato a leggere l'interno della funzione, ma mi pare di capire che vuoi dichiarare una funzione solo se l'utente è loggato.

    A prima vista, manca la session_start().

    Ciao!
    No!
    session_start() c'è!
    Ultima modifica di zerobruno : 22-09-2014 alle ore 20.47.06

  4. #4
    Guest

    Predefinito

    Se gli passi +10 viene considerato il numero 10 e il segno viene eliminato quindi $0 non sarà mai né + né -
    Per passargi il segno devi passargli la stringa "+10"

  5. #5
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    questo stralcio di codice è semanticamente errato:
    Codice PHP:
    if ($o = "+")
    se è più
    {
    file_put_contents($dir, file_get_contents($dir)+$n);
    aggiorno il punteggio aggiungendogli il carattere dopo il più
    }
    elseif (
    $o = "-")
    non vuoi assegnare "+" (o "-") alla variabile $o, vuoi controllarne il valore. Quindi devi usare il comparatore di eguaglianza: ==.
    Inoltre, per quanto riguarda questa parte:
    Codice PHP:
    $o = substr($str, 0, 1);
    giusto un suggerimento; puoi evitare di fare la chiamata a substr, le stringhe (anche in php) sono trattate più o meno come un array di caratteri. Per avere il primo carettere puoi usare: $str[0]

  6. #6
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    Citazione Originalmente inviato da zerobruno Visualizza messaggio
    Ho incluso il codice che riporto sotto ed ho scritto punteggio(+10);, ma dice che la funzione punteggio() non esiste.
    Ho controllato i percorsi e sono corretti. Ho Googlato ma non ho trovato un Gran Chio.
    ALLORA, nel tuo codice la funzione viene CREATA SOLO se esiste la variabile $_SESSION['login'] (la funzione è ALL'INTERNO dell'if, quindi è come dico). L'unica probabilità (se hai eseguito session_start) è che la sessione ci sia ma non ci sia quella particolare variabile $_SESSION['login'] (hai definito $_SESSION['login']??)

    Consiglio: prova la funzione al di fuori dell'if e poi, solo quando sei certo che funzioni, rimettila nell'if.

    Tralascio qualunque commento sui bug della funzione perché i miei "colleghi" qui sopra hanno tutti ragione Sappi che funzionano benissimo le condizioni "$str < 0" e "$str > 0" perché "+10" e "-10" sono normalmente trattati come numeri
    Ultima modifica di Luffio : 22-09-2014 alle ore 23.21.16
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  7. #7
    L'avatar di zerobruno
    zerobruno non è connesso Utente
    Data registrazione
    03-10-2013
    Messaggi
    192

    Predefinito

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    [...]
    non vuoi assegnare "+" (o "-") alla variabile $o[...]devi usare il comparatore di eguaglianza: ==.
    [...] puoi usare: $str[0]
    Grazie.
    Non avevo mai commesso quwsto errore. Sono sempre stato attentissimo con gli operatori logici.


    Citazione Originalmente inviato da Luffio Visualizza messaggio
    [...]hai definito $_SESSION['login']??[...]
    Si. Infatti il punteggio veniva visualizzato, ma non aumentava.
    Citazione Originalmente inviato da Luffio Visualizza messaggio
    [...]Sappi che funzionano benissimo le condizioni "$str < 0" e "$str > 0" perché "+10" e "-10" sono normalmente trattati come numeri
    Wow.
    Codice PHP:
    $a = "+12";
    echo ++
    $a;
    stampa 13.
    Soltanto che nel mio caso non posso inserire anche il carattere +, dato che poi verrà tutto stampato a video, ma ciò mi ha fatto pensare che faccio prima a rimuovere + e -, piuttosto che rimuovere tutti i caratteri eccetto il primo dalla stringa.

    Grazie a tutti, ma non finisce qui.

    Se eseguo la funzione
    punteggio(+1);
    il mio punteggio non aumenta affatto.
    Ultima modifica di zerobruno : 23-09-2014 alle ore 14.31.03 Motivo: Opzionale

  8. #8
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    punteggio("+1")
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  9. #9
    L'avatar di zerobruno
    zerobruno non è connesso Utente
    Data registrazione
    03-10-2013
    Messaggi
    192

    Predefinito

    Citazione Originalmente inviato da Luffio Visualizza messaggio
    punteggio("+1")
    e fare punteggio(+1) è possibile?

    altra domanda:
    Codice PHP:
    if ($_SERVER['REMOTE_ADDR'] == '[I][censura][/I]' || $_GET['ip'] == 'no' || $_COOKIE['ip'] == 'no')
    {
    setcookie("ip", "no", time()+60*60*24*30);
    }
    else
    {
    $c = 'contatore.txt';
    $b = file_get_contents($c);
    file_put_contents($c,$b + 1);
    }
    Perchè questo codice aumenta il valore di 2 e non di uno?

  10. #10
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    Citazione Originalmente inviato da zerobruno Visualizza messaggio
    e fare punteggio(+1) è possibile?
    In un modo talmente banale che boh:
    Codice PHP:
    file_put_contents($dir,file_get_contents($dir) + $str);
    che se prima avevi 100 allora punteggio(+1) = 100 + (+1) = 101 mentre punteggio(-10) = 100 + (-1) = 100 - 1 = 99
    Citazione Originalmente inviato da zerobruno Visualizza messaggio
    altra domanda:
    Codice PHP:
    if ($_SERVER['REMOTE_ADDR'] == '[I][censura][/I]' || $_GET['ip'] == 'no' || $_COOKIE['ip'] == 'no')
    {
    setcookie("ip", "no", time()+60*60*24*30);
    }
    else
    {
    $c = 'contatore.txt';
    $b = file_get_contents($c);
    file_put_contents($c,$b + 1);
    }
    Perchè questo codice aumenta il valore di 2 e non di uno?
    Il codice aumenta di 1, ma ovviamente aumenta di uno volta che tu o qualcun altro visita la pagina, e ovviamente se la pagina è visitata 2 volte il valore di 2 rispetto a 2 visite prima :D
    Ultima modifica di Luffio : 23-09-2014 alle ore 17.37.17
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  11. #11
    L'avatar di zerobruno
    zerobruno non è connesso Utente
    Data registrazione
    03-10-2013
    Messaggi
    192

    Predefinito

    Citazione Originalmente inviato da Luffio Visualizza messaggio
    In un modo talmente banale che boh:
    Codice PHP:
    file_put_contents($dir,file_get_contents($dir) + $str);
    che se prima avevi 100 allora punteggio(+1) = 100 + (+1) = 101 mentre punteggio(-10) = 100 + (-1) = 100 - 1 = 99


    Il codice aumenta di 1, ma ovviamente aumenta di uno volta che tu o qualcun altro visita la pagina, e ovviamente se la pagina è visitata 2 volte il valore di 2 rispetto a 2 visite prima :D


    La prima risposta non l'ho capita.

    In quanto alla secondo...
    Guarda che il link a quella pagina ce l'ho soltanto io.


    E ciò come lo si fa?

  12. #12
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    Citazione Originalmente inviato da zerobruno Visualizza messaggio
    La prima risposta non l'ho capita.

    In quanto alla secondo...
    Guarda che il link a quella pagina ce l'ho soltanto io.
    1) Scrivi e prova questa funzione:
    Codice PHP:
    function punteggio($str){
    $dir = 'login/'.$_SESSION['login'].'/p.txt';
    file_put_contents($dir,file_get_contents($dir) + $str);
    }
    2) Se hai solo tu il link, allora sei sicuro che non ricarichi la pagina 2 volte insieme?
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  13. #13
    L'avatar di zerobruno
    zerobruno non è connesso Utente
    Data registrazione
    03-10-2013
    Messaggi
    192

    Predefinito

    Citazione Originalmente inviato da Luffio Visualizza messaggio
    1) Scrivi e prova questa funzione:
    Codice PHP:
    function punteggio($str){
    $dir = 'login/'.$_SESSION['login'].'/p.txt';
    file_put_contents($dir,file_get_contents($dir) + $str);
    }
    2) Se hai solo tu il link, allora sei sicuro che non ricarichi la pagina 2 volte insieme?
    E com'è possibile che ricarichi la pagina due volte, se ne refresho una?

  14. #14
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    1) Il codice che ti ho dato funziona?

    2)
    Citazione Originalmente inviato da zerobruno Visualizza messaggio
    E com'è possibile che ricarichi la pagina due volte, se ne refresho una?
    Per toglierci il dubbio, scrivi questo piccolo codice prima di usare file_get_contents:
    Codice PHP:
    for($i=0; file_exists("prova$i"); $i++);
    copy($dir, "prova$i");
    Se il mio codice funziona, dovresti avere uno o più file chiamati prova0, prova1, prova2 ecc. che contengono il contenuto del tuo file (non ti faccio fare semplicemente echo ma ti faccio salvare nei file perché, se ho ragione io, non ti accorgeresti di niente). Se ho ragione io, facendo caricando una volta la pagina dovresti avere almeno 2 file di prova, altrimenti l'errore non si trova nel pezzo di codice che ci hai mostrato.
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  15. #15
    L'avatar di zerobruno
    zerobruno non è connesso Utente
    Data registrazione
    03-10-2013
    Messaggi
    192

    Predefinito

    [QUOTE=Luffio;1165490]

    1) Scusa, mi sono dimenticato di risponderti in quanto al codice. No, non funziona, sia come punteggio(+1), sia come punteggio("+1"), in quanto la pagina riporta che la funzione non è esistente.

  16. #16
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    Citazione Originalmente inviato da zerobruno Visualizza messaggio

    1) Scusa, mi sono dimenticato di risponderti in quanto al codice. No, non funziona, sia come punteggio(+1), sia come punteggio("+1"), in quanto la pagina riporta che la funzione non è esistente.
    Mi tocca riquotarmi:
    Citazione Originalmente inviato da Luffio Visualizza messaggio
    ALLORA, nel tuo codice la funzione viene CREATA SOLO se esiste la variabile $_SESSION['login'] (la funzione è ALL'INTERNO dell'if, quindi è come dico). L'unica probabilità (se hai eseguito session_start) è che la sessione ci sia ma non ci sia quella particolare variabile $_SESSION['login'] (hai definito $_SESSION['login']??)
    e aggiungo che la chiamata a funzione deve essere probabilmente o all'interno dell'if o dopo l'if, non prima dell'if
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  17. #17
    L'avatar di zerobruno
    zerobruno non è connesso Utente
    Data registrazione
    03-10-2013
    Messaggi
    192

    Predefinito

    Infatti avevo modificato il codice, mettendo l'if al login all'interno della funzione.
    _
    In quanto al contatore:
    Codice PHP:
    if ($_SERVER['REMOTE_ADDR'] == '')
    {
    setcookie("ip", "no", time()+60*60*24*30);
    }
    else
    {
    $c = 'contatore.html';
    for(
    $i=0; file_exists("prova$i"); $i++);
    copy('./', "prova$i");

    $b = file_get_contents($c);
    file_put_contents($c,$b + 1);
    }
    il file 'contatore.txt' aumenta il suo valore di 1, ma non viene creato alcun file
    Ultima modifica di zerobruno : 25-09-2014 alle ore 14.59.12

  18. #18
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    Citazione Originalmente inviato da zerobruno Visualizza messaggio
    Infatti avevo modificato il codice, mettendo l'if al login all'interno della funzione.
    E quindi ora il tuo codice com'è?

    Citazione Originalmente inviato da zerobruno Visualizza messaggio
    il file 'contatore.txt' aumenta il suo valore di 1, ma non viene creato alcun file
    Il file non viene creato perché devi scrivere
    Codice PHP:
    copy($c, "prova$i");
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  19. #19
    L'avatar di zerobruno
    zerobruno non è connesso Utente
    Data registrazione
    03-10-2013
    Messaggi
    192

    Predefinito

    Citazione Originalmente inviato da Luffio Visualizza messaggio
    E quindi ora il tuo codice com'è?
    È così come mi hai indicato.
    Ora la funzione la riconosce ma non apporta modifiche al punteggio.

    Ho provato a stampare un po' di variabili.
    L'errore è file_get_contents, infatti
    Codice PHP:
    if (file_exists($dir))
    {
    echo
    '<br>si';
    }
    else
    {
    echo
    '<br>no! D:';

    }
    stampa 'no'. E ciò che mi rende inquieto è il fatto che il codice
    Codice PHP:
    <a href="'.$dir.'">no</a>
    stampa <a href="">no</a>.
    Ciò va fuori dalle mie competenze, vi prego di aiutarmi.




    Citazione Originalmente inviato da Luffio Visualizza messaggio
    Il file non viene creato perché devi scrivere
    Codice PHP:
    copy($c, "prova$i");
    Fatto. Crea un solo file.
    Ultima modifica di zerobruno : 25-09-2014 alle ore 15.29.54

  20. #20
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    Citazione Originalmente inviato da zerobruno Visualizza messaggio
    Ciò va fuori dalle mie competenze, vi prego di aiutarmi.
    È (molto) probabile che tu non sappia che le variabili all'interno delle funzioni sono locali, cioè esistono solo all'interno delle funzioni in cui sono usate (a meno che non sia dichiarato diversamente). In questo caso, $dir è una variabile locale all'interno della funzione punteggio, quindi è presumibile che tu stia cercando di stamparla al di fuori del suo dominio di esistenza (=la funzione punteggio), quindi riprova a stampare DENTRO la funzione.

    Citazione Originalmente inviato da zerobruno Visualizza messaggio
    Fatto. Crea un solo file.
    C.V.D. avevo ragione io, caricavi la pagina 2 volte senza accorgertene, o qualcun altro la visitava.
    Ultima modifica di Luffio : 25-09-2014 alle ore 16.16.34
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  21. #21
    L'avatar di zerobruno
    zerobruno non è connesso Utente
    Data registrazione
    03-10-2013
    Messaggi
    192

    Predefinito

    Citazione Originalmente inviato da Luffio Visualizza messaggio
    [...]

    C.V.D. avevo ragione io, caricavi la pagina 2 volte senza accorgertene, o qualcun altro la visitava.
    Primo risolto, secondo, temo di averlo incluso due volte lo stesso file.

Regole di scrittura

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