Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    strpos() dà posizione sfalzata

    ciao a tutti,
    ho un testo composto così:
    Codice PHP:
    $contenuto "Prima parte di testo {elenco}, qui segue la seconda parte del testo"
    ora devo sostituire alla parola "{elenco}" un file con un elenco, appunto.
    ho scritto questo
    Codice PHP:
    $start strpos($contenuto,"{elencolocalita}");

      if(
    $start 0)
      {
      echo 
    substr($contenuto,0,$start);
      include(
    'elenco.php');

      echo 
    $contenuto str_replace("{elenco}","",substr($contenuto,$start));
      }else{
      echo 
    $contenuto;
      } 
    praticamente se trova un'occorrenza:
    1. spezza il testo
    2. inserisce il file php
    3. riprende il testo da dove è stato spezzato

    solo che ho un problema: la posizione del testo varia in continuazione e il file elenco.php viene stampato fuori dai tag.

    riporto un esempio
    codice:
     <tr>
                <td>PRIMO TESTO a cui segue l'elenco:</td>
            <<a href=file.htm'>Primo punto in elenco</a>/tr><-RIGA TRONCATA
            <tr>
                <td>POSIZIONE CORRETTA MA NON RISPETTATA</td>
            </tr>
            <tr>
                <td>
                SECONDO TESTO</td>
            </tr>
    cosa sbaglio?
    ---------------------------
    danielix05

  2. #2
    Ma nel file elenco.php cosa c'è
    CODENCODE \ Branding \ Design \ Marketing
    www.codencode.it

  3. #3

    file elenco.php

    Codice PHP:
        $query_elenco "SELECT nome FROM tab";
        
    $result_elenco mysql_query($query_elenco) or die (mysql_error());
        
        while (
    $res_elenco mysql_fetch_assoc($result_elenco)) {
        
    $localita str_replace("'","",$res_elenco['nome']);
        
    $localita strtolower(str_replace(" ","_",$localita));
            echo 
    "[url='#'][b]".$result1['nome']." ".$res_elenco['nome']."[/b][/url]";
        } 
    ---------------------------
    danielix05

  4. #4
    Perchè fari riferimento prima a "{elencolocalita}" e poi "{elenco}".
    Nella variabile $contenuto hai inserito "{elenco}" non {elencolocalita}".
    CODENCODE \ Branding \ Design \ Marketing
    www.codencode.it

  5. #5

    errore mio

    scusa indicano la stessa cosa ho sbagliato a scrivere
    ---------------------------
    danielix05

  6. #6
    Quindi hai risolto?
    CODENCODE \ Branding \ Design \ Marketing
    www.codencode.it

  7. #7
    no, purtroppo non ho ancora risolto, non è {elenco} o {elencolocalita} il poblema, quello è stato solo un mio refuso.

    il problema risiede nel fatto che la funzione strpos() non mi indica con esattezza il punto in cui si presenta l'occorrenza {elenco}.

    Da una mia idea capisco che ciò può essere dato dai tag html o dalla decodifica degli accenti e degli apostrofi che, magari, falsano il conteggio; ma non riesco a capire come intervenire.
    ---------------------------
    danielix05

  8. #8
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Perdonate l'intromissione...

    a me questa roba funziona, magari ti aiuta:

    index.php
    Codice PHP:
    <?php
    define
    ('TAG_START''{');
    define('TAG_END''}');

    $testo = <<<EOT
    <table>
        <tr>
            <td>PRIMO TESTO a cui segue l'elenco:</td>
            <td><a href=file.htm'>[b]Primo punto in elenco[/b]</a></td>
        </tr>
        {elenco}
        <tr>
            <td>SECONDO TESTO</td>
        </tr>
    </table>
    EOT;
        
    function 
    AggiungiContenuto($marcatore$contenitore){
        
    $ret $contenitore;    
        if((
    $pos strpos($contenitore$tagged TAG_START.$marcatore.TAG_END)) !== false){        
            echo 
    substr($contenitore0$pos);
            include 
    $marcatore.'.php';
            
    $ret substr($contenitore$pos strlen($tagged));
        }
        return 
    $ret;
    }
    ?>

    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Ex 1</title>
        </head>
        <body>
            <?php
                
    echo AggiungiContenuto('elenco',$testo);                           
            
    ?>
        </body>
    </html>
    elenco.php
    Codice PHP:
    <?php
    $voce 
    = array('Voce 1''Voce 2''Voce 3');

    foreach (
    $voce as $value
        echo <<<EOT
       <tr>
           <td>Commento:</td><td>[url='#']
    $value[/url]</td>
       </tr>
    EOT;
    ?>
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  9. #9

    incredibile Grino.

    Al tuo codice non sarei mai arrivato!
    solo come ti comporti se nel $testo ci sono più di un richiamo {elenco}?

    il mio intento è quello di includere dei file direttamente da editor, esempio con codice:
    codice:
    <table width="100%" border="0">
        <tbody>
            <tr>
                <td>[img]/immagini/x_immagine.jpg[/img]</td>
            </tr>
            <tr>
                <td>
                <h1>{titolo}</h1>
                </td>
            </tr>
            <tr>
                <td>{boxmutui}<td>
            </tr>
            <tr>
                <td>Primo Testo......... 
    
                
    
                ....continua primo testo
    
                
    
                Elenco localit&agrave;
    
                nelle principali localit&agrave;:</td>
            </tr>
            <tr>
                <td>{elencolocalita}</td>
            </tr>
            <tr>
                <td>
                
    
    Secondo Testo..................</p>
                </td>
            </tr>
            <tr>
                <td>{adsense}</td>
            </tr>
            <tr>
                <td>[img]/immagini/x_immagine.jpg[/img]</td>
            </tr>
        </tbody>
    </table>
    ---------------------------
    danielix05

  10. #10
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Modificherei la funzione e la chiamerei allo stesso modo:

    Codice PHP:
    <?php
    define
    ('TAG_START''{');
    define('TAG_END''}');

    $testo = <<<EOT
    <table>
        <tr>
            <td>PRIMO TESTO a cui segue l'elenco:</td>
            <td><a href=file.htm'>[b]Primo punto in elenco[/b]</a></td>
        </tr>
        {elenco}
        <tr>
            <td>SECONDO TESTO</td>
        </tr>
        {elenco}
    </table>
    EOT;
        
    function 
    AggiungiContenuto($marcatori$contenitore) {
        if(!
    is_array($marcatori))
            
    $marcatori = array($marcatori);
        
        
    $ret $contenitore;
        foreach (
    $marcatori as $marcatore)
            if ((
    $pos strpos($ret$tagged TAG_START $marcatore TAG_END)) !== false) {
                echo 
    substr($ret0$pos);
                include 
    $marcatore '.php';
                
    $ret substr($ret$pos strlen($tagged));
            }
        return 
    $ret;
    }
    ?>

    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Ex 1</title>
        </head>
        <body>
            <?php            
                
    //chiamata per ogni segnaposto
                
    echo "--------- VERSIONE CON CHIAMATA PER OGNI SEGNAPOSTO ---------";
                
    $testo AggiungiContenuto('elenco'$testo);
                
    $testo AggiungiContenuto('elenco'$testo);             
                echo 
    $testo;

                
    //oppure
                
    echo "--------- VERSIONE CON ARRAY ---------";
                
    $arraySegnaposti = array('elenco','elenco');
                echo 
    AggiungiContenuto($arraySegnaposti,$testo);                                       
            
    ?>
        </body>
    </html>
    Ho utilizzato due volte elenco, ma puoi dare ai segnaposto i nomi che ti pare.

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

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 © 2025 vBulletin Solutions, Inc. All rights reserved.