Pagina 3 di 4 PrimoPrimo 1234 UltimoUltimo
Visualizzazione risultati 61 fino 90 di 105

Discussione: [php] parole cercate di colore diverso

  1. #61
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Tu vuoi che se uno scrive "cia" ti trova tutti gli articoli che contengono "cia"?
    Vediamo se ho capito!
    Per esempio se in un articolo n°1 contiene la parola "ciao" e se in un articolo n°2 contiene "ciarpame", tu vuoi che nei risultati ti mostra sia l'articolo n°1 che il n°2?

  2. #62
    Guest

    Predefinito

    si proprio cosi
    tipo scrivi
    ba
    ti trova le parole che sono inserite come
    balena barca
    e sottolinea la parola ba...

    E stampasse il numero di record trovati
    Record Trovati: 3
    Ultima modifica di zappi : 15-10-2009 alle ore 18.11.22

  3. #63
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Per fare una ricerca non rigorosa devi sostituire questo:
    Codice PHP:
    //Ricerca rigorosa
    $query = mysql_query("SELECT *, MATCH(testo) AGAINST('+$parola' IN BOOLEAN MODE) as score FROM tabella WHERE MATCH(testo) AGAINST('+$parola' IN BOOLEAN MODE) ORDER BY score DESC");
    con questo:
    Codice PHP:
    $query = "SELECT * FROM tabella WHERE testo LIKE '%$parola%' ";
    $record = mysql_query($query);
    Però me lo potevi dire prima che ti serviva una ricerca non rigorosa.

    Per stampare il numero di record trovati:
    Codice PHP:
    $query = "SELECT * FROM tabella WHERE testo LIKE '%$parola%' ";
    $record = mysql_query($query);
    $nr = @mysql_num_rows($record);
    Ultima modifica di andreafallico : 16-10-2009 alle ore 21.52.58

  4. #64
    Guest

    Predefinito

    funziona per meta...
    http://zappi.altervista.org/cerca.php?parola=ci+tu
    cosi non funziona...^^

  5. #65
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Se per esempio scrivi "ci+tu", puoi fare che spezzi la stringa, cioè "ci" e "tu", e poi per ogni parola fai la ricerca nel db.

  6. #66
    Guest

    Predefinito

    spezza la stringa in che senso...

  7. #67
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Per esempio scrivi "ci tu"
    Codice PHP:
    $parola = mysql_real_escape_string($_GET["parola"]);
    $array = array();
    $tok = strtok($parola, " ");
    while(
    $tok !== false){
    array_push($array, $tok);
    $tok = strtok(" ");
    }
    cosi avrai $parola="ci tu" e $array[0]="ci" e $array[1]="tu"
    e fai la ricerca nel db prima con $array[0] e poi con $array[1].

  8. #68
    Guest

    Predefinito

    [OT]fai controlli (htmlspecialchars()) perchè hai un XSS, inutile così ma se ci caschi ti bucano il sito[/OT]

  9. #69
    Guest

    Predefinito

    ma io non stampo niente che non e nel db...
    di preciso di quale xss è...^^

  10. #70
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    E' qua:

    Codice:
    echo "<div class=\"titolo_cerca\">Risultati ricerca: " .$parola. "</div><br><br>\n\n\n";
    echo "<table width=\"200\" border=\"0\" align=\"center\">";
    Comunque l'hai capito come devi fare?

  11. #71
    Guest

    Predefinito

    Citazione Originalmente inviato da zappi Visualizza messaggio
    ma io non stampo niente che non e nel db...
    di preciso di quale xss è...^^
    Se hai aree con login possono rubarti il cookie e collegarsi come se fossi tu. Fai una ricerca su queste XSS (Cross site scripting) e capirai.

  12. #72
    Guest

    Predefinito

    rubarti il cookie
    ma in che modo rubano i cookie se non sanno le pass...
    se io stampassi quello che viene scritto dal utente si
    ma se non lo faccio non credo....xDxD

    il tasto edit con ce ^^
    ecco il codice...

    ma ci sono cose che non vanno...
    la prima se apro la pagina cosi mi compaiono tutti i messaggi nella tabella
    Codice PHP:
    <?php
    $parola
    = mysql_real_escape_string($_GET["parola"]);

    if(isset(
    $parola)){
    $mysql = @mysql_connect('localhost', 'zappi', '');

    if(
    $mysql == FALSE)
    exit();
    @
    mysql_select_db('my_zappi', $mysql);
    $query = mysql_query("SELECT * FROM tabella WHERE testo LIKE '%$parola%' ");
    $numero_risultati = mysql_num_rows($query);

    $parola = mysql_real_escape_string($_GET["parola"]);
    $array = array();
    $tok = strtok($parola, " ");
    while(
    $tok !== false){
    array_push($array, $tok);
    $tok = strtok(" ");
    }

    echo
    "<div class=\"titolo_cerca\">Risultati ricerca: " .htmlspecialchars($parola). "</div><br><br>\n";
    echo
    "<div class=\"titolo_post\">tabella</div>\n";
    echo
    "<table width=\"600\" border=\"0\" align=\"center\">";
    echo
    $numero_risultati;

    while(
    $cerca = mysql_fetch_array($query)){
    foreach(
    $array as $word){
    $colore = generacolore();
    $cerca["testo"] = str_replace($word, "<span style=\"background: {$colore}\">{$word}</span>", $cerca["testo"] );
    $cerca["testo"] = preg_replace("/\[code\](.*?)\[\/code\]/is", "", $cerca["testo"]);
    $cerca["testo"] = preg_replace("/\[youtube\](.*?)\[\/youtube\]/is", "", $cerca["testo"]);
    }
    echo
    "
    <tr>
    <td class=\"titolo_post\">\n"
    .$cerca["titolo"]. "\n</td>
    </tr>
    <tr>
    <td>Postato in [Site] da il 06/09/2009</td>
    </tr>
    <tr>
    <td class=\"testo\">\n"
    .$cerca["testo"]."\n</td>
    </tr>\n"
    ;
    }}


    echo
    "
    </table>"
    ;

    function
    generacolore(){
    return
    '#'.dechex(rand(0, 16777215));
    }
    ?>
    Ultima modifica di darkwolf : 16-10-2009 alle ore 23.24.47 Motivo: Unione dei due post (il tasto edit con ce?) :|

  13. #73
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Ecco la soluzione:
    Codice PHP:
    <?php
    $parola_inp
    = (!empty($_GET['parola'])) ? trim($_GET['parola']) : '';
    $parola = mysql_real_escape_string($parola_inp);
    if(!empty(
    $parola)){
    $mysql = @mysql_connect('localhost', 'zappi', '');
    if(
    $mysql == FALSE)
    exit();
    @
    mysql_select_db('my_zappi', $mysql);
    $array = array();
    $str = "SELECT * FROM tabella WHERE ";
    $tok = strtok($parola, " ");
    while(
    $tok !== false){
    array_push($array, $tok);
    $str .= "testo LIKE '%$tok%'";
    $tok = strtok(" ");
    if(
    $tok !== false)
    $str .= " || ";
    }
    $query = mysql_query($str);
    $numero_risultati = mysql_num_rows($query);
    while(
    $cerca = mysql_fetch_array($query)){
    foreach(
    $array as $word){
    $colore = generacolore();
    $cerca["testo"] = preg_replace("/\[code\](.*?)\[\/code\]/is", "", $cerca["testo"]);
    $cerca["testo"] = preg_replace("/\[youtube\](.*?)\[\/youtube\]/is", "", $cerca["testo"]);
    $cerca["testo"] = str_replace($word, "<span style=\"background: {$colore}\">{$word}</span>", $cerca["testo"] );
    }
    echo
    "<div class=\"titolo_cerca\">Risultati ricerca: " .htmlentities($parola, ENT_QUOTES). "</div><br><br>\n";
    echo
    "<div class=\"titolo_post\">tabella $numero_risultati</div>\n";
    echo
    "<table width=\"600\" border=\"0\" align=\"center\">";
    echo
    "<tr>
    <td class=\"titolo_post\">\n"
    .$cerca["titolo"]. "\n</td>
    </tr>
    <tr>
    <td>Postato in [Site] da il 06/09/2009</td>
    </tr>
    <tr>
    <td class=\"testo\">\n"
    .$cerca["testo"]."\n</td>
    </tr>\n"
    ;
    }
    echo
    "</table>";
    }
    function
    generacolore(){
    return
    '#'.dechex(rand(0, 16777215));
    }
    ?>

  14. #74
    Guest

    Predefinito

    Mi sono permesso di pulire un pò il codice, almeno rimango in allenamento

    Ho aggiunto la gestione degli errori in caso di mancata connessione, esecuzione query.
    Codice PHP:
    <?php

    $parola_inp
    = trim($_GET['parola']);

    $parola = mysql_real_escape_string($parola_inp);

    if(!empty(
    $parola))
    {
    if(
    $mysql = mysql_connect('localhost', 'zappi', ''))
    {
    if(!
    mysql_select_db('my_zappi', $mysql)))
    {
    die(
    'Errore: ' . mysql_error());
    }
    }
    else
    {
    die(
    'Errore: ' . mysql_error());
    }

    $array = array();
    $str = 'SELECT * FROM tabella WHERE ';
    $tok = strtok($parola, '');
    while(
    $tok !== false)
    {
    array_push($array, $tok);

    $str .= 'testo LIKE \'%' . $tok . '%\'';
    $tok = strtok(' ');
    if(
    $tok !== false)
    {
    $str .= ' || ';
    }
    }

    if(!(
    $query = mysql_query($str)))
    {
    die(
    'Errore nella query: ' . mysql_error());
    }

    $numero_risultati = mysql_num_rows($query);

    while(
    $cerca = mysql_fetch_array($query))
    {
    foreach(
    $array as $word)
    {
    $colore = generacolore();
    $find = array(
    '/\[code\](.*?)\[\/code\]/is',
    '/\[youtube\](.*?)\[\/youtube\]/is',
    );

    $cerca["testo"] = preg_replace($find, '', $cerca['testo']);
    $cerca["testo"] = str_replace($word, '<span style="background-color: #' . dechex(rand(0, 16777215)) . ';">' . $word . '</span>', $cerca['testo']);
    }
    echo
    '<div class="titolo_cerca">Risultati ricerca: ' . htmlentities($parola, ENT_QUOTES) . '</div><br /><br />' . "\n";
    echo
    '<div class="titolo_post">Tabella ' . $numero_risultati . '</div>' . "\n";
    echo
    '<table width="600" border="0" align="center">' . "\n";
    echo
    '<tr><td class="titolo_post">' . "\n" . $cerca['titolo'] . "\n" . '</td></tr>';
    echo
    '<tr><td>Postato in [Site] da il 06/09/2009</td></tr>';
    echo
    '<tr><td class="testo">' . "\n" . $cerca['testo'] . "\n" . '</td></tr>' . "\n";
    echo
    '</table>';
    }
    }

    ?>

  15. #75
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Mi sono permesso di pulire un pò il codice, almeno rimango in allenamento

    Ho aggiunto la gestione degli errori in caso di mancata connessione, esecuzione query.
    Codice PHP:
    <?php

    $parola_inp
    = trim($_GET['parola']);

    $parola = mysql_real_escape_string($parola_inp);

    if(!empty(
    $parola))
    {
    if(
    $mysql = mysql_connect('localhost', 'zappi', ''))
    {
    if(!
    mysql_select_db('my_zappi', $mysql)))
    {
    die(
    'Errore: ' . mysql_error());
    }
    }
    else
    {
    die(
    'Errore: ' . mysql_error());
    }

    $array = array();
    $str = 'SELECT * FROM tabella WHERE ';
    $tok = strtok($parola, '');
    while(
    $tok !== false)
    {
    array_push($array, $tok);

    $str .= 'testo LIKE \'%' . $tok . '%\'';
    $tok = strtok(' ');
    if(
    $tok !== false)
    {
    $str .= ' || ';
    }
    }

    if(!(
    $query = mysql_query($str)))
    {
    die(
    'Errore nella query: ' . mysql_error());
    }

    $numero_risultati = mysql_num_rows($query);

    while(
    $cerca = mysql_fetch_array($query))
    {
    foreach(
    $array as $word)
    {
    $colore = generacolore();
    $find = array(
    '/\[code\](.*?)\[\/code\]/is',
    '/\[youtube\](.*?)\[\/youtube\]/is',
    );

    $cerca["testo"] = preg_replace($find, '', $cerca['testo']);
    $cerca["testo"] = str_replace($word, '<span style="background-color: #' . dechex(rand(0, 16777215)) . ';">' . $word . '</span>', $cerca['testo']);
    }
    echo
    '<div class="titolo_cerca">Risultati ricerca: ' . htmlentities($parola, ENT_QUOTES) . '</div><br /><br />' . "\n";
    echo
    '<div class="titolo_post">Tabella ' . $numero_risultati . '</div>' . "\n";
    echo
    '<table width="600" border="0" align="center">' . "\n";
    echo
    '<tr><td class="titolo_post">' . "\n" . $cerca['titolo'] . "\n" . '</td></tr>';
    echo
    '<tr><td>Postato in [Site] da il 06/09/2009</td></tr>';
    echo
    '<tr><td class="testo">' . "\n" . $cerca['testo'] . "\n" . '</td></tr>' . "\n";
    echo
    '</table>';
    }
    }

    ?>
    Nel ripulire hai sbagliato a scrivere questo:
    Codice PHP:
    $tok = strtok($parola, '');
    invece di questo:
    Codice PHP:
    $tok = strtok($parola, ' ');
    lo script non avrebbe mai funzionato.
    Poi quelle parentesi nei if con una solo istruzione le odio.
    Ultima modifica di andreafallico : 17-10-2009 alle ore 23.23.30

  16. #76
    Guest

    Predefinito

    Le odi, ma sono utili, altrimenti cosa ne sai per cosa lo script non viene eseguito?
    Puoi omettere le graffe se c'è una riga, ma io pdr abitudine le lascio, nel caso voglia modificare in futuro e rende il codice molto più leggibile (a mio parere).

  17. #77
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    L'odio era per le parentesi degli if con una solo istruzione.

  18. #78
    Guest

    Predefinito

    @bicchedu
    lo provato ma ci sono errori nel codice...xDxD
    @andrea
    guarda cosa succede
    http://zappi.altervista.org/cerca.ph...tutti+google+a
    ma perchè!!!^^

    ti posto il codice
    Codice PHP:
    <?php
    $parola_inp
    = (!empty($_GET['key'])) ? trim($_GET['key']) : '';
    $parola = mysql_real_escape_string($parola_inp);
    if(!empty(
    $parola)){
    $mysql = @mysql_connect('localhost', 'zappi', '');
    if(
    $mysql == FALSE)
    exit();
    @
    mysql_select_db('my_zappi', $mysql);
    $array = array();
    $str = "SELECT * FROM tabella WHERE ";
    $tok = strtok($parola, " ");
    while(
    $tok !== false){
    array_push($array, $tok);
    $str .= "testo LIKE '%$tok%'";
    $tok = strtok(" ");
    if(
    $tok !== false)
    $str .= " || ";
    }


    $query = mysql_query($str);
    $numero_risultati = mysql_num_rows($query);
    echo
    "<div class=\"titolo_cerca\">Risultati ricerca: " .htmlentities($parola, ENT_QUOTES). "</div><br><br>\n";
    echo
    "<div class=\"titolo_post\">tabella $numero_risultati</div>\n";
    echo
    "<table width=\"600\" border=\"0\" align=\"center\">";

    while(
    $cerca = mysql_fetch_array($query)){
    foreach(
    $array as $word){
    $colore = generacolore();
    $cerca["testo"] = preg_replace("/\[code\](.*?)\[\/code\]/is", "", $cerca["testo"]);
    $cerca["testo"] = preg_replace("/\[youtube\](.*?)\[\/youtube\]/is", "", $cerca["testo"]);
    $cerca["testo"] = str_replace($word, "<span style=\"background: {$colore}\">{$word}</span>", $cerca["testo"] );
    }

    echo
    "<tr>
    <td class=\"titolo_post\">\n"
    .$cerca["titolo"]. "\n</td>
    </tr>
    <tr>
    <td>Postato in [Site] da il 06/09/2009</td>
    </tr>
    <tr>
    <td class=\"testo\">\n"
    .$cerca["testo"]."\n</td>
    </tr>\n"
    ;
    }}

    echo
    "</table>";

    function
    generacolore(){
    return
    '#'.dechex(rand(0, 16777215));
    }
    ?>

  19. #79
    Guest

    Predefinito

    Stesso discorso di sempre! Perchè cavolo togli l'indentazione dal codice??? Se non dici quali werrori ci sono come faccio a correggerli?

    In ogni caso è giusto, perchè trasforma TUTTE le a, quindi in <span> c'è una a cambia pure quella...

  20. #80
    Guest

    Predefinito

    @bicchedu
    ce una parentesi in piu
    se non sbaglio qui
    Codice PHP:
    if(!mysql_select_db('my_zappi', $mysql)))
    la funzione
    Codice PHP:
    $colore = generacolore();
    da errore perche non e usata

    e poi non funziona correttamente
    perchè entra anche lui nel codice...^^



    il problema e quello non dovrebbe entrare nel codice.....

  21. #81
    Guest

    Predefinito

    Ho cancellato la funzione perchè non ha senso usarla dato che è una riga di codice che si può benissimo usare nello str_replace, occupi memoria per nulla!

    "Entra dentro il codice" perchè te l'ho detto. Se tu cerchi la lettera a ein un post hai <span> è ovvio che fa il replace anche di quelle lettere dentro ai tag.
    Prova a cambia lo str_replace così:
    Codice PHP:
    str_replace($word, '<span style="background-color: #' . dechex(rand(0, 16777215)) . ';">' . $word . '</span>', strip_tags($cerca['testo']));
    Poi cancella la variabile $colore con la chiamata alla funzione.

  22. #82
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Il problema già te l'ho spiegato qui.
    Se inserisci strip_tags() e per esempio scrivi "ciao a" nel testo ti colora solo "a".

  23. #83
    Guest

    Predefinito

    Se non va può passarlo allora prima dello str_replace no?

  24. #84
    Guest

    Predefinito

    questo e il codice che ho usato....
    sembra funzionare
    grande biccheddu^^
    Codice PHP:
    <?php
    $parola
    = mysql_real_escape_string(trim($_GET['key']));

    if(!empty(
    $parola)){
    if(
    $mysql = mysql_connect('localhost', 'zappi', '')){
    if(!
    mysql_select_db('my_zappi', $mysql)){
    die(
    'Errore: ' .mysql_error());
    }}else{
    die(
    'Errore: ' .mysql_error());
    }

    $array = array();
    $str = 'SELECT * FROM blog WHERE ';
    $tok = strtok($parola, ' ');

    while(
    $tok !== false){
    array_push($array, $tok);
    $str .= 'testo LIKE \'%' .$tok. '%\'';
    $tok = strtok(' ');
    if(
    $tok !== false){
    $str .= ' || ';
    }}

    if(!(
    $query = mysql_query($str))){
    die(
    'Errore nella query: ' .mysql_error());
    }

    $numero_risultati = mysql_num_rows($query);
    echo
    '<div class="titolo_cerca">Risultati ricerca: ' .htmlentities($parola, ENT_QUOTES). '</div><br>' ."\n";
    echo
    '<div class="titolo_post">Tabella ' .$numero_risultati. '</div>' ."\n";
    echo
    '<table width="600" border="0" align="center">' ."\n";

    while(
    $cerca = mysql_fetch_array($query)){
    foreach(
    $array as $word){
    $find = array(
    '/\[b\](.*)\[\/b\]/',
    '/\[i\](.*)\[\/i\]/',
    '/\[u\](.*)\[\/u\]/',
    '/\[s\](.*)\[\/s\]/',
    '/\[h1\](.*)\[\/h1\]/',

    '/(\[url=)(.+)(\])(.+)(\[\/url\])/',
    '/\[img\](.*?)\[\/img\]/',
    '/(\[font=)(.+)(\])(.*?)(\[\/font\])/',
    '/(\[color=)(.+)(\])(.*?)(\[\/color\])/',
    '#\[code\](.*?)\[\/code\]#e',
    '/\[youtube\](.*)\[\/youtube\]/'
    );

    $cerca["testo"] = preg_replace($find, '', $cerca['testo']);
    $cerca["testo"] = str_replace($word, '<span style="background-color: #' .dechex(rand(0, 16777215)). ';">' .$word. '</span>', strip_tags($cerca['testo']));
    }


    echo
    '<tr>' ."\n". '<td class="titolo_post">' ."\n". $cerca['titolo'] ."\n". '</td>' ."\n". '</tr>';
    echo
    '<tr>' ."\n". '<td>' ."\n". $cerca['data'] ."\n". '</td>' ."\n". '</tr>';
    echo
    '<tr>' ."\n". '<td class="testo">' ."\n". $cerca['testo'] ."\n". '</td>' ."\n". '</tr>' ."\n";
    }
    echo
    '</table>';
    }
    ?>
    ma ci sono cose che non fanno...
    http://zappi.altervista.org/cerca.php?key=ciao+a
    1)dove ce titolo
    contiene dei codici che sono nel array
    e possibile eliminaro perche non contiene
    nessuna parte di testo..

    http://zappi.altervista.org/cerca.php?key=ciao+tutti
    2)non sottolinea ciao perchè
    ho provato ma non funziona

  25. #85
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

  26. #86
    Guest

    Predefinito

    Porva ad usare istr_replace().

    Allora scusa, tratta il testo come un array usando explode(' ', $cerca_testo) e ti semplifichi la vita...

  27. #87
    Guest

    Predefinito

    stai parlando di questa parte giusto o no

    Codice PHP:
    $tok = strtok($parola, ' ');

    while(
    $tok !== false){
    array_push($array, $tok);
    $str .= 'testo LIKE \'%' .$tok. '%\'';
    $tok = strtok(' ');
    if(
    $tok !== false){
    $str .= ' || ';
    }}

  28. #88
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    @zappi:
    Anche nel sito che hai indicato ha lo stesso problema, guarda qui.

  29. #89
    Guest

    Predefinito

    si lo so...
    io non lo avevo messo per non fare pubblicità...^^

    secondo te come posso fare
    il codice da me usato per ora e questo
    http://forum.it.altervista.org/php-m...tml#post693364

  30. #90
    Guest

    Predefinito

    Potresti fare una cosa simile:
    Codice PHP:
    $tok = explode(' ', $parola);
    $cerca['testo'] = explode(' ', $cerca['testo']);

    str_replace($tok, '<span style="background: #' . dechex(rand(0, 16777215)) . ';">' . $tok . '</a>', implode(' ', $cerca['testo']));
    E' probabile che non funzioni proprio il codice che ti ho scritto, ma secondo me ti complichi meno la vita.

Pagina 3 di 4 PrimoPrimo 1234 UltimoUltimo

Regole di scrittura

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