Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it L'avatar di torrone
    Registrato dal
    Apr 2006
    residenza
    Padova
    Messaggi
    1,128

    bbcode + dati dal database

    salve... io attualmente uso questa funzioncina per i bbcode

    Codice PHP:
    <?php

    function bbcode($testo) {

    $bb_prima = @array(
    '/\\n/is',
    '/\[b\](.*?)\[\/b\]/is'
    '/\[i\](.*?)\[\/i\]/is'
    '/\[u\](.*?)\[\/u\]/is',
    '/\[img\](.*?)\[\/img\]/is',
    '/\[url\](.*?)\[\/url\]/is',
    '/\[url\=(.*?)\](.*?)\[\/url\]/is',
    '/\[email\](.*?)\[\/email\]/is'
    );

    $bb_dopo = @array(
    '
    '
    ,
    '[b]$1[/b]',
    '[i]$1[/i]',
    '<u>$1</u>',
    '[img]$1[/img]',
    '[url="$1"]$1[/url]',
    '[url="$1"]$2[/url]',
    '[email="$1"]$1[/email]'
    );
     
    $testo = @preg_replace ($bb_prima$bb_dopo$testo);

    return 
    $testo;

    }

    ?>
    ora però vorrei riuscire a prelevare dei dati dal database, per esempio:

    [IDUTENTE=1]

    e stampo il nickname dell'utente salvato nel database con ID=1

    come potrei adattare questa funzioncina per far questo??

  2. #2

  3. #3
    Utente di HTML.it L'avatar di torrone
    Registrato dal
    Apr 2006
    residenza
    Padova
    Messaggi
    1,128
    Originariamente inviato da filippo.toso
    Utilizza preg_replace_callback()
    ho letto un pò.. sia nel manuale sia in qualceh altro sito, vedendo qualceh esempio.. ma non capisco...

  4. #4
    Semplicemente, al posto di dirgli "cosa" sostituire metti una funzione che viene richiamata a ogni corrispondenza ed il valore ritornato da questa funzione verrà utilizzato per la sostituzione

    Se guardi nel manuale, sia tra gli esempi sia tra i commenti c'è parecchia roba
    http://www.php.net/manual/en/functio...e-callback.php

    Quello che vuoi fare tu va integrato con il database e quindi è necessaria far intervenire una funzione che, ricevuto l'id dell'utente, effettui la ricerca sul database per visualizzarne il nome utente.

    Se hai difficoltà, invece, a scrivere l'espressione regolare, ti consiglio di dare un'occhiata al manuale
    http://www.php.net/manual/en/referen....modifiers.php
    http://www.php.net/manual/en/referen...ern.syntax.php

    Un'alternativa è l'utilizzo del modificatore PREG_REPLACE_EVAL

    Trovi qualcosa che fa riferimento a quel modificatore, oltre che nella pagina relativa ai modificatori, anche qui
    http://www.php.net/manual/en/function.preg-replace.php

    sotto la voce parameters -> replacement

    comunque, possiamo ipotizzare qualcosa del genere

    Codice PHP:
    function get_nickname_from_id($id)
    {
        
    // qui devi scrivere il codice che, leggendo l'id utente, acquisisce le informazioni dal database
        // E' assolutamente fondamentale controllare che l'id sia un numero maggiore di zero altrimenti rischi delle sql injection!!!!!
        
    return 'NOME UTENTE';
    }

    function 
    bbcode($testo)
    {
      
    $bb_prima = array
      (
        
    '/\\[ b\\](.*?)\\[\\/b\\]/is'
        
    '/\\[ i\\](.*?)\\[\\/i\\]/is'
        
    '/\\[ u\\](.*?)\\[\\/u\\]/is',
        
    '/\\[ img\\](.*?)\\[\\/img\\]/is'
        
    '/\\[ url\\](.*?)\\[\\/url\\]/is'
        
    '/\\[ url=(.*?)\\](.*?)\\[\\/url\\]/is'
        
    '/\\[ mailto\\](.*?)\\[\\/mailto\\]/is',
        
    '/\\[ idutente=(.*?)\\]/is',
        
    '/\\[ idutente\\](.*?)\\[\\/idutente\\]/ise',
      ); 

      
    $bb_dopo = array
      ( 
        
    '[b]$1[/b]'
        
    '[i]$1[/i]'
        
    '<u>$1</u>'
        
    '[img]$1[/img]'
        
    '[url="$1"]$1[/url]'
        
    '[url="$1"]$2[/url]'
        
    '[email="$1"]$1[/email]' ,
        
    '[b]get_nickname_from_id($1)[/b]',
        
    '[b]get_nickname_from_id($1)[/b]'
      
    );

      
    // La sostituzione dei \n, \r e \n\r la si può far fare direttamente a nl2br per sgravare il lavoro al motore delle preg
      
    $testo nl2br(preg_replace($bb_prima$bb_dopo$testo));
      
      return 
    $testo


    ?> 
    PS: le preg con '/(.*?)/is', immagino siano state "tagliate" via dal forum mi sono preso la libertà di riscriverle, controllale comunque ... inoltre gli spazi tra la prima quadra ed il contenuto li ho messi di proposito onde evitare di averli tagliati via dal forum

    PS2: è possibile, anzi direi probabile, che non ti funzioneranno a prima botta quindi fai qualche prova e eventualmente riporta gli errori

    PS3: ti ho scritto il tag idutente in due forme, usa poi quella che preferisci

  5. #5
    Utente di HTML.it L'avatar di torrone
    Registrato dal
    Apr 2006
    residenza
    Padova
    Messaggi
    1,128
    grazie daniele_dll

    avevo letto il manuale, e pure gli esempi.. ma faccio un pò fatica a comprendere...

    riguardo al codice che mi hai postato.. ho provato creare la funzione per il recupero dell'ID... dove sicuramente ho sbagliato qualcosa..

    questo è il codice

    Codice PHP:
    function get_nickname_from_id($id) { 

    if (
    $id 0) {

    $sql "SELECT * FROM tabella_utenti WHERE id_utente = '$id'";
    $query mysql_query($sql);
    $row mysql_fetch_array($query);
      
    $nickname $row[nickname];

    return 
    $nickname

    } else {

    echo 
    $id;

    }


    se richiamo la funzione da sola per esempio

    codice:
    function get_nickname_from_id(1);
    funziona!

    ma nel bbocde no... cioè mi stampa

    codice:
    get_nickname_from_id($1)
    get_nickname_from_id($1)
    e non esegue la funzione.. come mai?

  6. #6
    mmm, prova a mettere

    '/\\[ idutente=(.*?)\\]/ise',

    al posto di

    '/\\[ idutente=(.*?)\\]/is',

    (mi ero scordato la e alla fine)

    inoltre prova a cambiare i

    'get_nickname_from_id($1)'

    in

    '\'\' + get_nickname_from_id($1) + \'\''

  7. #7
    Utente di HTML.it L'avatar di torrone
    Registrato dal
    Apr 2006
    residenza
    Padova
    Messaggi
    1,128
    così intendi dire?

    Codice PHP:
    <?php

    function get_nickname_from_id($id) { 

    if (
    $id 0) {

    $sql "SELECT * FROM tw_utenti WHERE id_utente = '$id'";
    $query mysql_query($sql);
    $row mysql_fetch_array($query);
      
    $nickname $row[nickname];

    return 
    $nickname

    } else {

    echo 
    $id;

    }

    }

    function 
    bbcode($testo) {

    $bb_prima = @array(
    '/\[ b\](.*?)\[\/b\]/is'
    '/\[ i\](.*?)\[\/i\]/is'
    '/\[ u\](.*?)\[\/u\]/is',
    '/\[ img\](.*?)\[\/img\]/is',
    '/\[ url\](.*?)\[\/url\]/is',
    '/\[ url\=(.*?)\](.*?)\[\/url\]/is',
    '/\[ email\](.*?)\[\/email\]/is',
        
    '/\[ idutente=(.*?)\]/ise'
        
    '/\[ idutente\](.*?)\[\/idutente\]/ise'
    );

    $bb_dopo = @array(
    '[b]$1[/b]',
    '[i]$1[/i]',
    '<u>$1</u>',
    '[img]$1[/img]',
    '[url="1"]$1[/url]',
    '[url="$1"]$2[/url]',
    '[email="$1"]$1[/email]',
        
    "[b]' + get_nickname_from_id($1) + '[/b]"
        
    '[b]get_nickname_from_id($1)[/b]' 
    );
     
    $testo nl2br(preg_replace($bb_prima$bb_dopo$testo)); 

    return 
    $testo;

    }

    ?>
    perchè se csì fosse mi da i seguenti errori

    codice:
    Parse error: syntax error, unexpected '<' in /web/htdocs/www.sito.net/home/demo/cms2/include/funzioni/bbcode.php(49) : regexp code on line 1
    
    Fatal error: preg_replace() [function.preg-replace]: Failed evaluating code: &lt;strong&gt;' + get_nickname_from_id(1) + '&lt;/strong&gt; in /web/htdocs/www.sito.net/home/demo/cms2/include/funzioni/bbcode.php on line 49

  8. #8
    scusami, ma purtroppo il forum si è mangiato un pò di backslash

    '\'\' + get_nickname_from_id($1) + \'\''

  9. #9
    Utente di HTML.it L'avatar di torrone
    Registrato dal
    Apr 2006
    residenza
    Padova
    Messaggi
    1,128
    ottimo scritto in questo modo comincià già a funzionare

    Codice PHP:
    <?php

    function get_nickname_from_id($id) { 

    if (
    $id 0) {

    $sql "SELECT * FROM tw_utenti WHERE id_utente = '$id'";
    $query mysql_query($sql);
    $row mysql_fetch_array($query);
      
    $nickname $row[nickname];

    return 
    $nickname

    } else {

    echo 
    $id;

    }

    }

    function 
    bbcode($testo) {

    $bb_prima = @array(
    '/\[ b\](.*?)\[\/b\]/is'
    '/\[ i\](.*?)\[\/i\]/is'
    '/\[ u\](.*?)\[\/u\]/is',
    '/\[ img\](.*?)\[\/img\]/is',
    '/\[ url\](.*?)\[\/url\]/is',
    '/\[ url\=(.*?)\](.*?)\[\/url\]/is',
    '/\[ email\](.*?)\[\/email\]/is',
        
    '/\[ idutente=(.*?)\]/ise'
        
    '/\[ idutente\](.*?)\[\/idutente\]/ise'
    );

    $bb_dopo = @array(
    '[b]$1[/b]',
    '[i]$1[/i]',
    '<u>$1</u>',
    '[img]$1[/img]',
    '[url="1"]$1[/url]',
    '[url="$1"]$2[/url]',
    '[email="$1"]$1[/email]',
        
    '\'[b]\' + get_nickname_from_id($1) + \'[/b]\'',
        
    '\'[b]\' + get_nickname_from_id($1) + \'[/b]\''
    );
     
    $testo nl2br(preg_replace($bb_prima$bb_dopo$testo)); 

    return 
    $testo;

    }

    ?>
    peccato però che avendo provato a scrviere [idutente=1] oppure [idutente=2] mi stampa 0, come mai?? :master:

  10. #10
    Codice PHP:
    function get_nickname_from_id($id)
    {
      echo 
    "IDUTENTE = " $id "
    "
    ;
      
    $returnValue $id;
      
      
    // Verifica se $id è numerico e se è maggiore di zero
      
    if (is_numeric($id) === true && (int)$id 0)
      {
        
    $sql "SELECT * FROM tw_utenti WHERE id_utente = " . ((int)$id) . " LIMIT 1"
        
    $query mysql_query($sql) or die('Query ' $sql ' fallita: ' mysql_error()); 
        while((
    $row mysql_fetch_assoc($query))
        {
          
    // Imposta il nome utente
          
    $returnValue $row['nickname']; 
        }
        
        
    // Libera la memoria
        
    mysql_free_result($query);
      }
      
      
    // Restituisce il valore estratto dal database se trova il nickname
      // altrimenti restituisce il valore passato
      
    return $returnValue;


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.