Visualizzazione risultati 1 fino 3 di 3

Discussione: Problema strano...

  1. #1
    Guest

    Predefinito 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ò?
    Ultima modifica di mybeatnews : 25-09-2011 alle ore 17.15.12

  2. #2
    Guest

    Predefinito

    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.


  3. #3
    Guest

    Predefinito

    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.
    Ultima modifica di andreafallico : 02-10-2011 alle ore 16.02.55

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •