Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - Sistema di tag twitter like
Forum - PHP - Sistema di tag twitter like

Avatar
riddick (Normal User)
Rookie


Messaggi: 37
Iscritto: 17/06/2011

Segnala al moderatore
Postato alle 21:41
Venerdì, 22/06/2012
Salve a tutti, in pratica ho questo problema, riesco a parsare i testi e a individuare quello che mi serve ovvero il nome preceduto da #, tipo #nomecognome, solo che alcune volte mi prende e converte questi tag in link e altre volte no. Il fatto strano è che, siccome ho un sistema di notifiche quando si tagga una persona, la notifica ti tag arriva, solo che non mi sostituisce il #nomecognome con il relativo link al profilo. Qui il codice e per qualsiasi cosa se non mi sono spiegato ve la dico:

Codice sorgente - presumibilmente Php

  1. public function GetTag ($text) {
  2.         $matches = array();
  3.           $replacements = array();
  4.           preg_match_all('/#([^s]+)/', $text, $matches);
  5.          
  6.         $this->DBConnect();
  7.         $sql = mysql_query("SELECT * FROM users");
  8.         while ($rows = mysql_fetch_array($sql)) {
  9.             for ($j = 0, $c = count($matches[1]); $j < $c; $j++) {
  10.                 $str = strtolower(str_replace(' ', '', $this->GetNameSurname($rows['id'])));
  11.                 if ($str == $matches[1][$j]) {
  12.                     $replacements[$j] = "<a href='profile.php?user=".$rows['id']."'>".$this->GetNameSurname($rows['id'])."</a>";
  13.                 } else {
  14.                     $replacements[$j] = $matches[1][$j];
  15.                 }
  16.             }
  17.         }
  18.         for ($j = 0, $c = count($matches[1]); $j < $c; $j++)
  19.             $text = str_replace($matches[1][$j], $replacements[$j], $text);
  20.  
  21.           return $text;
  22.          
  23.     }


PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 22:23
Venerdì, 22/06/2012
Mm, probabilmente l'errore e' qui:

Codice sorgente - presumibilmente PHP

  1. if ($str == $matches[1][$j]) {



Non dovrebbe essere:

Codice sorgente - presumibilmente PHP

  1. if ($str == strtolower($matches[1][$j])) {



?

Ma ti consiglierei di riscrivere il codice da zero cambiando preg_match_all con questa: http://www.php.net/manual/en/function.preg-replace-callbac ...


Il mio blog: https://piero.dev
PM Quote
Avatar
riddick (Normal User)
Rookie


Messaggi: 37
Iscritto: 17/06/2011

Segnala al moderatore
Postato alle 22:31
Venerdì, 22/06/2012
Ti ringrazio della risposta, appena sono sull'altro pc provo, e nel caso riscrivo il codice come da te consigliato! Farò sapere come è andata

PM Quote
Avatar
riddick (Normal User)
Rookie


Messaggi: 37
Iscritto: 17/06/2011

Segnala al moderatore
Postato alle 10:51
Sabato, 23/06/2012
Allora, la modifica suggerita mi era utile se uno scriveva il nome con lettere differenti dal minuscolo e fin qui tutto ok, però il problema principale persiste, facendo un var_dump($replacements) si vede che viene creato un array un elemento giusto, ovvero quando trova l'utente e quindi aggiunge il tag <a>, e altri elementi composti dalla stringa così com'è. Il mio dubbio è che, o non cicla bene il db, però nell'array lo trova l'utente e aggiunge il tag, o, più probabile, sbaglio qualcosa nell'ultimo for, cioè dove vado a sostituire realmente la stringa, solo che non riesco ad individuarlo questo errore.

PM Quote