Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    217

    str_replace non funziona

    Devo sostituire in tutti i post di un forum la parola X con Y.

    Mi collego al database e alla tabella correttamente. Estraggo il post correttamente e lo metto in $message. Posso anche echarlo, viene ecato correttamente!
    Ma quando eseguo:
    codice:
    $message = str_replace("acqua", "fuoco", $message);
    Nulla succede! $message non viene modificato. Eppure la parola acqua c'è nel post, scritta esattamente così, senza altra punteggiatore prima o dopo. Viene visualizzata correttamente anche da phpMyAdmin.

    Qualcuno ha un'idea?

    Per completezza, onde escludere che sia la fase di update del db a fallire, ecco i codice con cui acquisisco dal db:
    codice:
    $query = "SELECT post_id, post_text FROM forumfanta_posts";
    $result = mysql_query($query, $db);
    poi nello script:
    codice:
    $oldid = $row['post_id'];
    $message = $row['post_text'];
    poi l'update:
    codice:
    $queryupdate = "UPDATE forumfanta_posts SET post_text = '$message' WHERE post_id = '$oldid'";
    mysql_query($queryupdate, $db);

  2. #2
    Se faccio una cosa del genere funziona perfettamente:

    Codice PHP:
    <?php
    $message 
    "aria, acqua, terra, fuoco";
    $message str_replace("acqua""fuoco"$message);
    echo 
    $message;
    ?>
    stampando:

    codice:
    aria, fuoco, terra, fuoco
    P.S.
    "echarlo" ed "ecato" non si possono leggere proprio
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    217
    E quindi? Faccio tutto giusto...

  4. #4
    Hai provato ad "ecare" $message subito dopo la sostituzione piuttosto che verificarlo solamente sul DB? Perchè così com'è il replace dovrebbe fuznionare correttamente.
    Magari hai problemi in fase di UPDATE sul DB per cui rimane il vecchio valore.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    217
    Hai ragione! Con un controllo post-str_replace vedo che $message è stato correttamente modificato.
    Quindi il problema dovrebbe essere nell'update, ma non capisco dove!

  6. #6
    Posta il codice.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    217
    Eccolo, grazie!

    codice:
    <?
    
    include("config.inc.php");
    
    $db = mysql_connect($db_host, $db_user, $db_password) or die ('Connessione HOST fallita: ' . mysql_error()); 
    mysql_select_db($db_name, $db) or die ('Selezione DB fallita: ' . mysql_error());
    
    $query = "SELECT post_id, post_text FROM forumfanta_posts";
    $result = mysql_query($query, $db);
    $i=0;
    
    while ($row = mysql_fetch_array($result)) {
            $oldid = $row['post_id'];
            $message = $row['post_text'];
        /* echo di controllo */
            echo "<font color = red>".$i." - ID: ".$oldid."=".$row['post_id']."</font> - Old: ".$message." | ";
            $message = str_replace("\[/COLOR\]", "\[/color\]", $message);
            $message = str_replace('[/SIZE]', '[/size]', $message);
        /* echo di controllo post-mod */
            echo "Messaggio new: ".$message."
    ";
        /* UPDATE */
    	$queryupdate = "UPDATE forumfanta_posts SET post_text = '$message' WHERE post_id = '$oldid'";
    	mysql_query($queryupdate, $db);
    	$i++;
    }
    
    echo "Concluso. Modificati ".$i." posts"; 
    
    ?>

  8. #8
    Ma il campo post_id è numerico o varchar perchè nel primo caso dovresti togliere gli apici nell'update.
    In ogni caso modifica così:

    Codice PHP:
    ...
    $queryupdate "UPDATE forumfanta_posts SET post_text = '$message' WHERE post_id = '$oldid'";
    mysql_query($queryupdate$db) or die ("Error: ".mysql_error());
    ... 
    e vedi se ti restituisce qualche messaggio di errore.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    217
    Originariamente inviato da satifal
    Ma il campo post_id è numerico o varchar perchè nel primo caso dovresti togliere gli apici nell'update.
    In ogni caso modifica così:

    Codice PHP:
    ...
    $queryupdate "UPDATE forumfanta_posts SET post_text = '$message' WHERE post_id = '$oldid'";
    mysql_query($queryupdate$db) or die ("Error: ".mysql_error());
    ... 
    e vedi se ti restituisce qualche messaggio di errore.
    Il campo post_id è mediumint(8). Comunque togliendo gli apici [ WHERE post_id = $oldid"; ] l'errore qui sotto non cambia.
    Inserendo il die, lo script si ferma praticamente subito, rispetto ai 1500 post che (non)processava prima. Ecco il mess:
    Error: You have an error in your SQL syntax; check the manual that corresponds to your Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '11: [url:3e06qyfy]http://www.megaupload.com/?d=GNJUD5CE[/url:3e06qyf' at line 1
    che penso sia in riferimento proprio a questa parte a metà del post:
    [...] Settembre '11: [url:3e06qyfy]http://www.megaupload.com/?d=GNJUD5CE[/url:3e06qyfy] Listone 1/9/'11: [...]

  10. #10
    E' il contenuto della variabile $message che da problemi. Ci sono gli apici e probabilmente altri caratteri speciali.

    Prova ad utilizzare la funzione addslashes()

    ES:
    Codice PHP:
    $queryupdate "UPDATE forumfanta_posts SET post_text = '".addslashes($message)."' WHERE post_id = $oldid"
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.