-
Problema strano...
Salve, grazie a ticket sono riuscito ad estrapolare le parole dopo il simbolo @ , ora però ho un problema.. Praticamente se scrivo: @zypp0 @zypp02, quando vado ad effettuare questo preg, dove per ognuna delle parole estratte vedo se esiste il nickname, ho il caso in cui zypp0 esiste e zypp02 no, però in zypp02, la parte 'zypp0' viene considerata nickname esistente e il 2 lasciato fuori. Ovvero in codici:
* Codici rimossi *
Comunque sia l' output della frase @zypp0 @zypp02 dovrebbe essere che @zypp0 viene messo ipertestuale, collegato alla pagina member.php, mentre zypp02 no, invece succede che zypp0 viene reso ipertestuale, mentre in zypp02, la parte 'zypp0' diventa ipertestuale e il 2 viene per così dire "lasciato fuori".
Cosa può causare ciò?
-
Prima di tutto ti consiglio vivamente di non eseguire query all'interno del foreach(), piuttosto utilizzare l'operatore IN() di MySQL nel campo username.
Prova una cosa simile:
Codice PHP:
preg_match_all('/(?<=@)(.+?)\b/s', $messaggio, $utenti_taggati);
$link_tag = $exist = array();
/*
Estrai solo i dati che ti servono (uid, username in questo caso).
Basta che li aggiungi, ma evita di estrarre tutto perché appesantisci
il lavoro per nulla.
*/
$res = mysql_query('SELECT DISTINCT uid, username
FROM users
WHERE username = IN (\'' . implode('\', \'', array_map('mysql_real_escape_string', $utenti_taggati)) . '\')';
while($row = mysql_fetch_assoc($res))
{
/*
Aggiungi all'array l'utente che esiste. È estratto dal DB,
quindi hai la certezza che sia presente.
*/
$exist[] = $row['username'];
$link_tag[] = '[url=' . $p . '/member.php?action=profile&uid=' . $row['uid'] . ']@' . $row['username'] .'[/url]';
}
/*
Qui hai tutti gli utenti taggati, ma NON esistenti,
mentre in $exist hai tutti quelli esistenti.
*/
$utenti_taggati = array_unique(array_merge($utenti_taggati, $exist));
Non testato perché non ho il tuo codice, ma credo che smanettandoci un po', riesca ad ottenere il risultato che vuoi.
:wink:
-
Ehm non ho capito molto bene, ti posto tutto il codice con commenti :S
* Codici rimossi *
----------
Una cosa..
Per ogni utente taggato ESISTENTE devo inserire i dati nella tabella tag, come faccio? Qual è l' array degli utenti taggati esistenti?
Comunque vengono generati vari errori, come ad esempio uno che risolve aggiungendo la parentesi tonda finale nella query, poi un altro relativo a mysql_real_escape_string che necessita di una stringa e non array e non accetta quella query per l' assoc..
COmunque ho capito il problema di tutto, è la cosa piu' logica ma ci stiamo scervellando per nulla.. O almeno io.. nello str_replace comunque vengono rimpiazziate tutte le parole nel primo 'slot' con quelle del secondo, sia che stanno in una parola o da qualunque parte, ma vengono sempre rimpiazzate, quindi non credo ci si possa far qualcosa..
Risolto con preg_replace.