Modifica funzione da eregi() a preg_match() e problema visualizzazione info al passaggio mouse su file messaggi

di Anonimizzato28358 il
9 risposte
Buongiorno volevo il vostro aiuto per modificare una piccola parte di codice contenuto in una pagina php. Prima dell'aggiornamento della versione di php la funzione eregi() funzionava ora ovviamente non più [ho modificato tale funzione in preg_match()] ma senza successo, forse bisogna modificare altro codice ma non saprei dove mettere mano...
C'è però anche un altro problema, prima sul file messaggi, passando con il mouse sopra al nick, data e ora, compariva la città, l'altezza s.l.m e provincia, ora compaiono solo due parentesi senza nulla dentro. Come mai?
Ovviamente mi dimentico di qualche cosa, potete vedere se la sintassi è scritta corretta o manca qualcosa? grazie
<html>
<head>
<title>Messaggi degli utenti</title>
<?php
include("config1.php");
echo "<meta http-equiv=\"refresh\" content=\"$time_refresh\">";
?>
</head>
<body bgcolor="white">
<?php
//Creo l'array dove inserirò le informazioni
$rows_utenti_info = array();
//Leggo il file utenti
$rows_utenti=file($file_reg);
foreach($rows_utenti AS $v) 
  { 
   $tmp = explode('|', $v);
  $rows_utenti_info[$tmp[0]]['citta'] = $tmp[6];
    $rows_utenti_info[$tmp[0]]['provincia'] = $tmp[5];
} 
 
if (!(file_exists($file_mess))) {
    $fpw = fopen($file_mess,"w"); fclose($fpw);
}

$rows_file=file($file_mess);
$rows_file_ord=array_reverse($rows_file);
$count=count($rows_file_ord);
for ($i=0;($i<$count && $i<$num_messag);$i++)
{
    $dati_utente=explode("|",$rows_file_ord[$i]);
    $nick=$dati_utente[0];
    preg_match("\[(.*)\] \[(.*)\] (.*)", $nick, $regnick); 
    $nick_orig=$regnick[3];
    $msg=$dati_utente[1];
    $nick=stripslashes($nick);
    $msg=stripslashes($msg);
    $nick = str_replace('[em1]','<img src="emoticons/em1.gif">',$nick);
    $msg = str_replace('[em1]','<img src="emoticons/em1.gif">',$msg);
    for ($x=1;$x<57;$x++)
    {
        $img="em".$x;
        $img2="[".$img."]";
        $path="<img src=\"emoticons/$img.gif\">";
        $msg = str_replace("$img2","$path",$msg);
    }
    for ($x=1;$x<57;$x++)
    {
        $img="em".$x;
        $img2="[".$img."]";
        $path="<img src=\"emoticons/$img.gif\">";
        $nick = str_replace("$img2","$path",$nick);
    }
    
if(preg_match("http://([^<>[:space:]]+)", $msg, $regs))
$msg = str_replace('http://'.$regs[1], '<a href="http://'.$regs[1].'" target="_blank">link</a>', $msg);

if(preg_match("https://([^<>[:space:]]+)", $msg, $regs))
$msg = str_replace('https://'.$regs[1], '<a href="https://'.$regs[1].'" target="_blank">link</a>', $msg);

    echo "<b><font face=\"verdana\" size=\"2\" color=\"#000000\"><a title=\"".$rows_utenti_info[$nick_orig]['provincia']." (".$rows_utenti_info[$nick_orig]['citta'].")\">$nick</a></font>: </b>"."<font face=\"verdana\" size=\"2\">".$msg."</font><br>";
}
?>
</body> </html>

9 Risposte

  • Ciao grazie, guarda meglio che mi aiuti anche per il resto perchè non conosco il codice, la chat l'avevo trovata pronta in un sito.
    Solo che scaricando per il sito il forum phpbb aggiornato ho dovuto passare alla nuova versione 7 di php e purtroppo la chat ha perso queste funzioni probabilmente essendo scritte con un php più vecchio...
    Fatto sta che ciò che mi dici di fare è puro arabo per me e non saprei davvero dove mettere mano, spero che mi darai un aiuto.
    Grazie in anticipo
  • preg_match("/\[(.*)\] \[(.*)\] (.*)/", $nick, $regnick);
    dovresti usare var_dump($regnick); per leggere con i tuoi occhi se la ricerca ha avuto successo una volta verificato elimini il var_dump.
    Mi dispiace mancano pezzi di codice e impiegherei molto tempo per capire il funzionamento.
  • Grazie hormus, ho inserito / ti posto qui dove:
    preg_match("/\[(.*)\] \[(.*)\] (.*)/", $nick, $regnick); 
    if(preg_match("/http://([^<>[:space:]]+)/", $msg, $regs))
    $msg = str_replace('http://'.$regs[1], '<a href="http://'.$regs[1].'" target="_blank">link</a>', $msg);
    
    if(preg_match("/https://([^<>[:space:]]+)/", $msg, $regs))
    $msg = str_replace('https://'.$regs[1], '<a href="https://'.$regs[1].'" target="_blank">link</a>', $msg);
    purtroppo nella pagina messaggi se un utente scrive un link questo rimane per intero, invece prima al posto di tutto l'indirizzo per esteso appariva solo la parola link cliccabile.
    se mi aiuti cerchiamo di risolvere questo primo problema, poi passiamo all'altro, grazie in anticipo
  • Se usi un delimitatori presente nel criterio di ricerca i delimitatori vanno con l'escape blackslash altrimenti usa # questo come delimitatore.
    Dopo la modifica cosa mostra var_dump con il terzo parametro preg_match? ($regnick, $regs prima dell'inizio della prossima regex).
  • Hormus ha scritto:


    Se usi un delimitatori presente nel criterio di ricerca i delimitatori vanno con l'escape blackslash altrimenti usa # questo come delimitatore.
    Dopo la modifica cosa mostra var_dump con il terzo parametro preg_match? ($regnick, $regs prima dell'inizio della prossima regex).
    non ci caspisco niente di quei termini
  • Sostituisci / iniziale finale con #.
    Primo preg_match
    var_dump($regnick);
    Secondo preg_match
    var_dump($regs);
    Terzo preg_match
    var_dump($regs);
  • Ecco fatto (e ci voleva tanto mi son detto?) alla fine ho risolto tutto sostituendo / con # e tutto è ripreso a andare... certo che però anche io avevo letto che ci andava /
    Tutto a posto, ti ringrazio davvero molto Hormus,si sono risolti entrambi i problemi in un colpo solo, non ci credo ancora...
    Grazie!
  • Si hai letto bene ma puoi usare caratteri iniziali finali diversi e non devono apparire dentro preg_match il primo parametro si chiama regex.
Devi accedere o registrarti per scrivere nel forum
9 risposte