Visualizzazione risultati 1 fino 17 di 17

Discussione: [PHP] script modifica topic

  1. #1
    araim non è connesso Utente attivo
    Data registrazione
    26-06-2004
    Messaggi
    275

    Predefinito [PHP] script modifica topic

    Ciao a tutti, in questi giorni sto dando di matto a seguito di uno script fatto da me per la modifica dei topic del forum che sto programmando... A volte la modifica ha successo, altre volte invece la modifica non va e si blocca.


    Script che esegue la modifica. Ho notato che quando va in ERRORE, lo fa soltanto quando modifico un topic di risposta perché va nella modifica del THREAD che ha il titolo piuttosto che nella modifica della risposta, che il titolo in realtà non lo ha.

    modulo che riceve i dati e modifica il topic
    Codice PHP:
    $messaggio=$_POST['risposta'];
    $titolo=$_POST['titolo'];
    $anonimo=$_POST['anonimo'];
    $pos=$_GET['pos'];

    if(
    $edit<>'' && $userconnect<>'' && $messaggio<>'') {

    $row=mysql_query("SELECT * FROM t_bac_topic WHERE id_topic='$edit'");
    $topic=mysql_fetch_array($row);

    if(
    $topic[id_origine]<>'') { $id="$topic[id_origine]"; } else { $id="$edit"; }

    $data=date('d/m/Y H:i');
    $razza=$utente['razza'].substr($utente['sesso'],0,1);

    $storico="$storico<br /><hr />$topic[messaggio]<br/>modificato da $userconnect il $data";

    $titolo=eregi_replace("è","&egrave;","$titolo");
    $titolo=eregi_replace("é","&eacute;","$titolo");
    $titolo=eregi_replace("à","&agrave;","$titolo");
    $titolo=eregi_replace("ù","&ugrave;","$titolo");
    $titolo=eregi_replace("ì","&igrave;","$titolo");

    $titolo=eregi_replace("'","&lsquo;","$titolo"); // SCRIPT PER IL CAMBIO DI APOSTROFO
    $titolo=eregi_replace("‘","&lsquo;","$titolo"); // SCRIPT PER IL CAMBIO DI APOSTROFO

    $titolo=eregi_replace("<","&lt;","$titolo");
    $titolo=eregi_replace(">","&gt;","$titolo");

    $messaggio=eregi_replace("è","&egrave;","$messaggio");
    $messaggio=eregi_replace("é","&eacute;","$messaggio");
    $messaggio=eregi_replace("à","&agrave;","$messaggio");
    $messaggio=eregi_replace("ù","&ugrave;","$messaggio");
    $messaggio=eregi_replace("ì","&igrave;","$messaggio");
    $messaggio=eregi_replace("'","&lsquo;","$messaggio"); // SCRIPT PER IL CAMBIO DI APOSTROFO
    $messaggio=eregi_replace("‘","&lsquo;","$messaggio"); // SCRIPT PER IL CAMBIO DI APOSTROFO
    $messaggio=eregi_replace("<","&lt;","$messaggio");
    $messaggio=eregi_replace(">","&gt;","$messaggio");

    $messaggio=str_replace("[G]","<b>","$messaggio");
    $messaggio=str_replace("[/G]","</b>","$messaggio");
    $messaggio=str_replace("[C]","<em>","$messaggio");
    $messaggio=str_replace("[/C]","</em>","$messaggio");
    $messaggio=str_replace("[S]","<u>","$messaggio");
    $messaggio=str_replace("[/S]","</u>","$messaggio");

    $messaggio=eregi_replace("\n","<br/>","$messaggio");

    if(
    $topic[id_origine]<>'') {
    $row="UPDATE t_bac_topic SET titolo='$titolo ', messaggio='$messaggio', storico_mess='$storico' WHERE id_topic='$edit' ";
    $mod=mysql_query($row) or die('thread non modificato : ERRORE');
    } else {
    $row="UPDATE t_bac_topic SET messaggio='$messaggio', storico_mess='$storico' WHERE id_topic='$edit' ";
    $mod=mysql_query($row) or die('risposta non modificata : ERRORE');
    }

    echo
    "<script>window.alert('messaggio modificato con successo');</script>";
    }


    modulo che apre il topic di modifica ed invia i dati dopo averli modificati
    Codice PHP:
    <?php

    $id
    =$_GET['id'];

    $row_=mysql_query("SELECT * FROM t_bac_topic WHERE id_topic='$id'");
    $topic=mysql_fetch_array($row_);

    $sql=mysql_query("SELECT * FROM t_bac_forum WHERE id_forum='$topic[id_forum]'");
    $forum=mysql_fetch_array($sql);

    $testo=eregi_replace("<br/>","\n","$topic[messaggio]");
    $testo=eregi_replace("<br />","\n","$testo");

    $testo=eregi_replace("'","&lsquo;","$testo");

    $testo=eregi_replace("<b>","[G]","$testo");
    $testo=eregi_replace("</b>","[/G]","$testo");

    $testo=eregi_replace("<em>","[C]","$testo");
    $testo=eregi_replace("</em>","[/C]","$testo");

    $testo=eregi_replace("<u>","[S]","$testo");
    $testo=eregi_replace("</u>","[/S]","$testo");

    ?>

    <div id="bordipagina">

    <div style="width: auto; text-align: center; font-size: 15px; "> <b>-| Bacheca: <?php echo"$forum[forum]"; ?> |-</b> </div>

    <div style="float: left; width: 99%; height: auto; text-align: center;">

    <form action="topic.php?edit=<?php echo"$id"; ?>" method="post" target="mainFrame" id="scrivi">
    <?php if($topic[id_origine]<>'') { } else {?>
    <p><input name="titolo" type="text" value="<?php echo"$topic[titolo]"; ?>" size="40" maxlength="250" style=" width: 250px;" id="titolo" /></p> <?php } ?>

    <div style="margin: 0 auto;" align="center"><textarea name="risposta" cols="70" rows="15" id="risposta"><?php echo"$testo"; ?></textarea></div>
    <p> <input name="scrivi" type="submit" value="modifica" style="width: 100px;"/></p>
    </form>
    </div>

    </div>

  2. #2
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Non saprei, ma credo che è un'errore, in questa if:

    Codice PHP:
    if($topic[id_origine]<>'') { $id="$topic[id_origine]"; } else { $id="$edit";)
    Come mai hai messo $topic[id_origine], lo stesso anche nell' else, tra apici, cosi non prende il valore dei campi, cosa che credo te vuoi fare, ma hai dichiarato semplicemente una stringa con valore $topic[id_origine] e $edit, dovresti levare quelle apici.

    Non saprei se sia quello l'errore, non avendo visto tutto il codice, ma mi sono soffermato su quello.
    Ultima modifica di sevenjeak : 16-05-2011 alle ore 09.57.38

    Sevenjeak
    Software developer and much more

  3. #3
    araim non è connesso Utente attivo
    Data registrazione
    26-06-2004
    Messaggi
    275

    Predefinito

    In pratica: topic iniziale e poi le risposte. Le risposte non le legge sempre come il topic di risposta, in alcuni casi li interpreta come topic iniziale. E non capisco perché. Provo a fare la tua modifica e vediamo che accade.

    ADD
    Ho appena scoperto che questo "bug" lo ha solo con il primo messaggio di risposta, dal secondo in poi invece la modifica la permette. GRRR!!!
    Da cosa può essere dipeso questo problema??
    Ultima modifica di araim : 16-05-2011 alle ore 11.13.42

  4. #4
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Strano,

    Hai provato a verificare che, dopo l'inserimento della seconda risposta i dati nel database vengono inseriti correttamente?

    O forse il problema si trova nella pagina che invia le risposte?
    Ultima modifica di sevenjeak : 16-05-2011 alle ore 15.56.44

    Sevenjeak
    Software developer and much more

  5. #5
    araim non è connesso Utente attivo
    Data registrazione
    26-06-2004
    Messaggi
    275

    Predefinito

    Codice PHP:
    $row="UPDATE t_bac_topic SET messaggio='$messaggio', storico_mess='$storico' WHERE id_topic='$edit' ";
    $mod=mysql_query($row) or die('risposta non modificata : ERRORE');
    $id="$topic[id_origine]";
    si può stampare l'errore piuttosto che un avviso??

  6. #6
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Araim ha ragione, non ci avevo pensato prima, metti all'interno degli or die(), al posto di una semplice stringa, la funzione mysql_error(), in questo modo di stampa direttamente l'errore mysql riscontrato, ma da quello che hai scritto te non viene eseguito l'or die, o sbaglio?
    Ultima modifica di sevenjeak : 18-05-2011 alle ore 08.35.14

    Sevenjeak
    Software developer and much more

  7. #7
    araim non è connesso Utente attivo
    Data registrazione
    26-06-2004
    Messaggi
    275

    Predefinito

    no no, esegue or die () ... quindi ottimo consiglio il mysql_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 'altro."

    quindi mi sta dando per errore la presenza dell'apostrofo ... cosa per altro "CORRETTA"

    Codice PHP:
    $titolo=eregi_replace("'","&lsquo;","$titolo"); // SCRIPT PER IL CAMBIO DI APOSTROFO
    $titolo=eregi_replace("‘","&lsquo;","$titolo"); // SCRIPT PER IL CAMBIO DI APOSTROFO
    come posso correggere questa cosa??
    Ultima modifica di araim : 18-05-2011 alle ore 14.48.25

  8. #8
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Hai mai sentito parlare di mysql_real_escape_string?
    Codice PHP:
    $titolo = mysql_real_escape_string($titolo);
    È una delle cose essenziali per inserire i dati in una query ( fa l'escape degli apici/virgolette ), soprattutto per evitare qualche attacco di sql injection.
    Ultima modifica di javascripter : 18-05-2011 alle ore 16.42.15

  9. #9
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    @javascripter: Non ricordavo l'esistenza di quella funzione.

    Cmq, te prima di salvare i dati trasformi tutti i caratteri speciali nei loro valori esadecimali, se non sono esadecimale scusatemi per l'errore, ma esistono numerose funzione in php che fanno questo, ad esempio htmlspacialchars(), htmlentities() e quella consigliata da javascripter, se ricordo bene, anche quella serve a questo scopo.

    P.S.: Intendevo consigliarti queste funzione già dal mio primo post, ma non credevo fosse quello il problema, e ancora stento a crederci.

    Sevenjeak
    Software developer and much more

  10. #10
    araim non è connesso Utente attivo
    Data registrazione
    26-06-2004
    Messaggi
    275

    Predefinito

    stento a crederlo anche io avendo fatto quella piccola string replace.

  11. #11
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Bhe.. per toglierti il dubbio basta provare, hai provato ad usare una delle funzione postate da me o quella postata da javascripter, funziona?

    Sevenjeak
    Software developer and much more

  12. #12
    araim non è connesso Utente attivo
    Data registrazione
    26-06-2004
    Messaggi
    275

    Predefinito

    non funzionano nessuna delle soluzioni dette ragazzi... l'errore è sempre questo

    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 'altro...


    Codice PHP:
    $messaggio=$_POST['risposta'];
    $titolo=$_POST['titolo'];
    $anonimo=$_POST['anonimo'];
    $pos=$_GET['pos'];

    if(
    $edit<>'' && $userconnect<>'' && $messaggio<>'') {

    $row=mysql_query("SELECT * FROM t_bac_topic WHERE id_topic='$edit'");
    $topic=mysql_fetch_array($row);

    $data=date('d/m/Y H:i');
    $razza=$utente['razza'].substr($utente['sesso'],0,1);

    $storico="$storico<br /><hr>$topic[messaggio]<br/>modificato da $userconnect il $data<hr>";

    $titolo=htmlspecialchars("$titolo");

    $titolo=eregi_replace("è","&egrave;","$titolo");
    $titolo=eregi_replace("é","&eacute;","$titolo");
    $titolo=eregi_replace("à","&agrave;","$titolo");
    $titolo=eregi_replace("ù","&ugrave;","$titolo");
    $titolo=eregi_replace("ì","&igrave;","$titolo");

    $titolo=eregi_replace("'","&lsquo;","$titolo"); // SCRIPT PER IL CAMBIO DI APOSTROFO
    $titolo=eregi_replace("‘","&lsquo;","$titolo"); // SCRIPT PER IL CAMBIO DI APOSTROFO

    $titolo=eregi_replace("<","&lt;","$titolo");
    $titolo=eregi_replace(">","&gt;","$titolo");

    $messaggio=htmlspecialchars("$messaggio");


    $messaggio=eregi_replace("è","&egrave;","$messaggio");
    $messaggio=eregi_replace("é","&eacute;","$messaggio");
    $messaggio=eregi_replace("à","&agrave;","$messaggio");
    $messaggio=eregi_replace("ù","&ugrave;","$messaggio");
    $messaggio=eregi_replace("ì","&igrave;","$messaggio");
    $messaggio=eregi_replace("'","&lsquo;","$messaggio"); // SCRIPT PER IL CAMBIO DI APOSTROFO
    $messaggio=eregi_replace("‘","&lsquo;","$messaggio"); // SCRIPT PER IL CAMBIO DI APOSTROFO
    $messaggio=eregi_replace("<","&lt;","$messaggio");
    $messaggio=eregi_replace(">","&gt;","$messaggio");

    $messaggio=str_replace("[G]","<b>","$messaggio");
    $messaggio=str_replace("[/G]","</b>","$messaggio");
    $messaggio=str_replace("[C]","<em>","$messaggio");
    $messaggio=str_replace("[/C]","</em>","$messaggio");
    $messaggio=str_replace("[S]","<u>","$messaggio");
    $messaggio=str_replace("[/S]","</u>","$messaggio");

    $messaggio=str_replace("[LINEA]","<hr>","$messaggio");

    $messaggio=str_replace("[CENTRO]","<div style=\"text-align: center; font-size: 14px;\">","$messaggio");
    $messaggio=str_replace("[/CENTRO]","</div>","$messaggio");

    $messaggio=str_replace("[DESTRA]","<div style=\"text-align: right; font-size: 14px;\">","$messaggio");
    $messaggio=str_replace("[/DESTRA]","</div>","$messaggio");

    $messaggio=eregi_replace("\n","<br/>","$messaggio");

    if(
    $topic[id_origine]<>'') {
    $row="UPDATE t_bac_topic SET messaggio='$messaggio', storico_mess='$storico' WHERE id_topic='$edit' ";
    $mod=mysql_query($row) or die(mysql_error());
    $id="$topic[id_origine]";

    } else {
    $row="UPDATE t_bac_topic SET titolo='$titolo', messaggio='$messaggio', storico_mess='$storico' WHERE id_topic='$edit' ";
    $mod=mysql_query($row) or die(mysql_error());
    $id="$edit";

    }

    echo
    "<script>window.alert('messaggio modificato con successo ( $id | $topic[id_origine] | $edit )'); window.open('./topic.php?id=".$id."','mainFrame');</script>";
    }

  13. #13
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Più che altro, invece di adottare tutti quelli eragi_replace(), ed invece di utilizzare nel codice la funzione htmlspecialcars() ti consiglierei di utilizzare la funzione htmlspecialchar() o quella consigliata da javascripter, nel momento in qui salvi i dadi nel db, almeno una volta fatto questo, senza utilizzare tutte queste funzioni, potresti recuperare i dati normalmente, senza l'utilizzo di alcuna funzione, cosa che ti semplifica la scrittura del codice, da quello che penso io, ma l'asciamo perdere questo, e passiamo all'errore che ti viene restituito.

    Per l'errore non saprei che dire, hai provato semplicemente a far stampare le due query prima di eseguirle, ed a vedere se ti li stampa correttamente, visto che l'errore dice che c'è proprio un'errore di sintassi sql?
    Ultima modifica di sevenjeak : 19-05-2011 alle ore 11.16.18

    Sevenjeak
    Software developer and much more

  14. #14
    araim non è connesso Utente attivo
    Data registrazione
    26-06-2004
    Messaggi
    275

    Predefinito

    Citazione Originalmente inviato da sevenjeak Visualizza messaggio
    Più che altro, invece di adottare tutti quelli eragi_replace(), ed invece di utilizzare nel codice la funzione htmlspecialcars() ti consiglierei di utilizzare la funzione htmlspecialchar() o quella consigliata da javascripter, nel momento in qui salvi i dadi nel db, almeno una volta fatto questo, senza utilizzare tutte queste funzioni, potresti recuperare i dati normalmente, senza l'utilizzo di alcuna funzione, cosa che ti semplifica la scrittura del codice, da quello che penso io, ma l'asciamo perdere questo, e passiamo all'errore che ti viene restituito.

    Per l'errore non saprei che dire, hai provato semplicemente a far stampare le due query prima di eseguirle, ed a vedere se ti li stampa correttamente, visto che l'errore dice che c'è proprio un'errore di sintassi sql?
    Se scrivo htmlspecialchar() senza la S non riconosce la funzione o_ò
    ora provo a stampare le due query e vediamo cosa mi dice in proposito. Fermo restando che l'errore lo pone solo in presenza di ACCENTI, in messaggi privi di accenti non lo riporta eseguendo il tutto normalmente.

    ADD
    ecco per dirti, htmlspecialchar() come dici tu, da errore di funzione non definita...


    ADD 2

    Stampando la QUERY ho questo risultato qui.

    --------------------------------------
    UPDATE t_bac_topic SET messaggio='tutto quello che può servire per gestire la land, idee spunti, come fare pubblicità e quant‘altro.

    oggi per esempio ho comprato il dominio CENSURO', storico_mess='
    tutto quello che può servire per gestire la land, idee spunti, come fare pubblicità e quant'altro.

    oggi per esempio ho comprato il dominio CENSURO
    modificato da araim il 19/05/2011 12:47
    ' WHERE id_topic='375'

    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 'altro.

    oggi per esempio ho comprato il dominio CENSURO
    --------------------------------------
    Ultima modifica di araim : 19-05-2011 alle ore 12.49.24

  15. #15
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    htmlspecialchar() di da errore perchè non esiste, ho sbagliato io a scrivere, volevo scrivere htmlspecialchars(), con la s finale.

    Mi sembra strano che il problema te li dia sui caratteri speciali, prova a impostare cosi l'ultima if:

    Codice PHP:
    if($topic[id_origine]<>'') {
    $row="UPDATE t_bac_topic SET messaggio=\"$messaggio\", storico_mess=\"$storico\" WHERE id_topic=\"$edit\" ";
    $mod=mysql_query($row) or die(mysql_error());
    $id="$topic[id_origine]";

    } else {
    $row="UPDATE t_bac_topic SET titolo='$titolo', messaggio='$messaggio', storico_mess=\"$storico\" WHERE id_topic=\"$edit\"";
    $mod=mysql_query($row) or die(mysql_error());
    $id="$edit";

    }
    Ho utilizzato il carattere \ per dire alla stringa, che il carattere successivo non sta ad indicando il carattere di fine stringa o un carattere speciale, ma almeno credo, che non di dovrebbe dare problemi con il carattere ', cosa che mi pare al quando strana, dato che utilizzi li funzioni per modificarli, magari provando anche a togliere tutti quei eragi_replace().
    Ultima modifica di sevenjeak : 19-05-2011 alle ore 13.55.18

    Sevenjeak
    Software developer and much more

  16. #16
    araim non è connesso Utente attivo
    Data registrazione
    26-06-2004
    Messaggi
    275

    Predefinito

    Citazione Originalmente inviato da sevenjeak Visualizza messaggio
    Ho utilizzato il carattere \ per dire alla stringa, che il carattere successivo non sta ad indicando il carattere di fine stringa o un carattere speciale, ma almeno credo, che non di dovrebbe dare problemi con il carattere ', cosa che mi pare al quando strana, dato che utilizzi li funzioni per modificarli, magari provando anche a togliere tutti quei eragi_replace().
    Con la \ funziona ora ... ç_ç voglio fare una strage

  17. #17
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Evidentemente per errore considerava il carattere ' come fine stringa, ma stano visto che lo modifiche con htmlspecialchars(), cmq io ti consiglio di utilizzare sempre il carattere / nella query.

    Sevenjeak
    Software developer and much more

Regole di scrittura

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