- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- codice html via mysql - problema modifica codice
-
codice html via mysql - problema modifica codice
Buongiorno a tutti
Utilizzo uno script mysql php per inviare messaggi privati
all'interno del mio sito.Tramite una casella di testo in amministrazione (message.php vedi codice
pagine in basso) inserisco un messaggio (testo + link) che viene inserito
in mysql e dopo recapitato ai singoli utenti.
PROBLEMA: quando invio un messaggio l'utente che lo riceve
vede solo testo e non collegamenti e immagini html cliccabili
dunque non mi accetta il codice html anche se invio un
messaggio con puro codice html (esempio:
<a href="h ttp://w ww .miosito/countries.php">Countries</a> )
Arriva sempre solo codice di testo e mai codice html dunque non
arriva un messaggio con un collegamento cliccabile.Ho notato che quando i messaggi inviati dall'amministazione
vengono inseriti in mysql vengono modificati e dunque il codice
html risulta alterato e dunque perde le sue funzioni nel momento
in cui utente riceve il messaggio.esempio di messaggio salvato nel mysql (alterato da mysql)
(< A href=" h ttp ://google.it" > Google< /A> )Chiedo un aiuto, se potete spiegatemi come poter risolvere in
modo semplice, sono alle prime armi con mysql.Postatemi per favore una possibile soluzione al mio problema per
poter cosi inviare sempre tramite mysql messaggi con codice html
che risulta funzionante e i link cliccabili ai singoli utenti alla
ricezione del messaggio.Grazie mille.
codice pagina invio messaggi pannello amministratore (message.php)
<?php
require ('config.php');
$user=$_COOKIE["usNick"];$sql = "SELECT * FROM tb_users WHERE username='$user'";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);mysql_close($con);
if ($row['account'] !="premium"){
echo"
<p>Only Admin Can Send Messages To Members</p>
";
include ('footer.php');
exit();
}
?><script type="text/javascript">
/***********************************************
- Textarea Maxlength script- ? Dynamic Drive (w ww. dynamicdrive.com)
- This notice must stay intact for legal use.
- Visit h ttp://w ww.dynamicdrive.com/ for full source code
***********************************************/
function ismaxlength(obj){
var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : ""
if (obj.getAttribute && obj.value.length>mlength)
obj.value=obj.value.substring(0,mlength)
}</script>
<?
if (isset($_POST["sendto"])) {
if( strtolower($_POST['code'])!= strtolower($_SESSION['texto'])){
echo "SECURITY CODE ERROR... ";exit();
}
$sendfrom=$_COOKIE["usNick"];
$sendto=limpiar($_POST["sendto"]);
$comments=limpiar($_POST["comments"]);if ($sendto==""){echo "Error"; exit();}
if ($comments==""){echo "Error"; exit();}$eltiempo=time();
$lafecha=date("d-m-y H:i",$eltiempo);
require('config.php');
$query = "INSERT INTO tb_messenger (sendfrom, sendto, date, comments) VALUES('$sendfrom','$sendto','$lafecha','$comments')";
mysql_query($query) or die(mysql_error());
mysql_close($con);
echo "<br><br>Your Message Has Been Sent Correctly";?>
</font><?
exit();
}
?>Use the form below to contact a member (for admin only).
<br><br>
<div align="center"><div id="form">
<fieldset>
<legend> All Fields Required </legend><form method="POST" action="index.php?op=3">
<table width="400" border="0" align="center">
<tr>
<td width="150" align="left"><label>Member</label></td>
<td width="250" align="left"><select name="sendto" class="combo" tabindex="1">
<option value=""></option><?
require('config.php');
$sendfrom=$_COOKIE["usNick"];
$tabla = mysql_query("SELECT * FROM tb_users ORDER BY username ASC"); // selecciono todos los registros de la tabla usuarios, ordenado por nombre
mysql_close($con);
while ($row = mysql_fetch_array($tabla)) {echo "<option value='".$row["username"]."'>".$row["username"]."</option>
";
}
?></select></td>
</tr>
<tr>
<td width="150" align="left"><label>Comments</label></td>
<td width="250" align="left"><textarea name="comments" rows="20" maxlength="1000" onkeyup="return ismaxlength(this)" tabindex="2"></textarea></td>
</tr><tr>
<td width="150" align="left"> </td>
<td width="250" align="right"><input type="submit" value="Submit" class="submit" tabindex="3" />
</td>
</tr>
</table></form>
</fieldset>
</div></div>
codice pagina ricezione messaggi dell'utente (readmessage.php)
<?
session_start();
?><? include('header.php');?>
<? include('up_banner_468x60.php');?>
<?
require ('config.php');function limpiare($mensaje)
{$mensaje = htmlentities(stripslashes(trim($mensaje)));
$mensaje = str_replace("'"," ",$mensaje);
$mensaje = str_replace(";"," ",$mensaje);
$mensaje = str_replace("$"," ",$mensaje);
return $mensaje;}
$id=limpiare($_GET["id"]);
$lole=$_COOKIE["usNick"];
$sql = "SELECT * FROM tb_messenger where id='$id' and sendto='$lole'";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$query = "UPDATE tb_messenger SET status='read' where id='$id'"; mysql_query($query) or die(mysql_error());
mysql_close($con);
?>
<br>
<div align="center"><div id="form">
<fieldset>
<legend> Read Message </legend><form method="POST" action="replysms.php?to=<?= $row["sendfrom"] ?>">
<table width="400" border="0" align="center">
<tr>
<td width="150" align="left"><label>Date</label></td>
<td width="250" align="left"><? echo $row["date"]; ?></td>
</tr>
<tr>
<td width="150" align="left"><label>From</label></td>
<td width="250" align="left"><? echo $row["sendfrom"]; ?></td>
</tr>
<tr>
<td width="150" align="left"><label>Message</label></td>
<div style= width: 250px; height: 400px; <p><? echo $row["comments"]; ?></div>
</tr>
<tr>
<td width="150" align="left"> </td>
<td width="250" align="right"><input type="submit" value="Reply" class="submit" tabindex="4" />
</td>
</tr>
</table>
</form>
</fieldset>
</div></div><? include('down_banner_468x60.php');?>
<? include('footer.php'); ?>
struttura mysql parte di gestione dei messaggi inviati
--
-- Table structure for tabletb_messenger
CREATE TABLE IF NOT EXISTS
tb_messenger
(
id
int(11) NOT NULL auto_increment,
sendfrom
varchar(11) collate latin1_general_ci NOT NULL,
sendto
varchar(11) collate latin1_general_ci NOT NULL,
date
varchar(35) collate latin1_general_ci NOT NULL,
comments
varchar(150) collate latin1_general_ci NOT NULL,
status
varchar(11) collate latin1_general_ci NOT NULL default 'unread',
PRIMARY KEY (id
)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=22026 ;
-
Ho messo degli spazi nei domini perchè non li accetta in questo forum, vi prego aiutatmi per risolvere il problema
-
semplicemente perchè effettui htmlentities prima di inserirli nel database??
-
Sono alle prime armi con phpmyadmin
se mi spighi con degli esempio forse ti capisco.
fammi capire di cosa si tratta e come fare, grazie
ciao
-
cosa centra phpmyadmin??
$sendfrom=$_COOKIE["usNick"]; $sendto=limpiar($_POST["sendto"]); $comments=limpiar($_POST["comments"]); if ($sendto==""){echo "Error"; exit();} if ($comments==""){echo "Error"; exit();}
in questo pezzo di codice, invii alla funzione 'limpiar' come parametro il testo del messaggio, la funzione limpiar non esiste in php ,ma tu ne hai definita una 'limpiare' (con una 'e' in piu), quindi supponiamo che sia questa la funzione chiamata...
ora cosa fa quata funzione??
la funzione htmlentities parsa i caratteri html come < > & / ecc in modo che,appunto ,non si comportino come codice html ma come caratteri.
come fa questa funzione a parsarli? semplice, li sostituisce con caratteri di escape come > ...
quindi la stringa che infili nel db, una volta nella pagina web secondo te verrà interpretata come html dopo che ne hai parsato il codice??
-
Se c'è qualcuno che sa la soluzione che posti le righe modificate qui altrimenti non riesco proprio
lo script non l'ho fatto io dunque non so tecnicamente come funziona
spero che qualuno posso aiutarmi, grazie
-
Ciao guadagnaeuro e benvenuto nel Forum GT
una volta estratto il dato dal Db prova a processarlo così per visualizzarlo:
[PHP]echo html_entity_decode($testopvt);[/PHP]
-
@Samyorn said:
Ciao guadagnaeuro e benvenuto nel Forum GT
una volta estratto il dato dal Db prova a processarlo così per visualizzarlo:
[php]echo html_entity_decode($testopvt);[/php];)Ciao sam
ho provato la tua funzione ma il codice lo vedo giusto ma non è cliccabile, non è html
CODICE ORIGINALE INVIATO AL MYSQL VIA WEB
<a href="sito(punto)it">sito< a>CODICE MEMORIZZATO NEL MYSQL
< a href=" sito(punto)it" > sito< a>CODICE OTTENUTO CON echo html_entity_decode($testopvt);
< a href=" sito(punto)it" > sito< a>Ancora non è cliccabile ci sono degli spazi che non lo rendono HTML, come posso risolvere?
Coma mai non diventa come il codice originario inviato?
Grazie a chi mi aiuta, se potete postate degli esempio o ancora meglio le parti gia modificate
C'è uno spazio prima dell http che mette da solo il mysql e non so il motivo
come potreui risolvere?
N-B. (punto) l'ho messo io altrimenti non accetta il .
-
guardando meglio il codice salvato su Db effettivamente manca qualcosa
< dovrebbe diventare < e non < e così per gli altri
poi vedo che non c'è proprio lo slash
il problema è la funzione limpiare che difatti sostituisce ; con degli spazipuoi provare a salvare i dati parsandoli con
[php] $testopvt= addslashes(htmlentities($testopvt, ENT_QUOTES));[/php] e quando li recuperi
[php]echo stripslashes(html_entity_decode($testopvt));[/php]
elimina la riga
[PHP] $mensaje = str_replace(";"," ",$mensaje);[/PHP]
e dovrebbe andare
-
Ciao samyorn
volevo dirti che ho risolto semplicemente cancellano la funzione limpiar che mi alterava i dati e dunque alterava il passaggio nel mysql.
Sono arrivato grazie alla tua spiegazione dunque anziche correggere i problemi che produce questa funziona limpiar l'ho cancellata e cosi nel mysql arrivano codici html senza alcuna alterazione dunque perfettamente funzionanti.
grazie ancora per il suggeriento.
Sono nuovo nel php e ancora non lo conosco, in ogni caso mi hai permesso di trovare qeusta soluzione, grazie mille.
buona notte
-
@guadagnaeuro said:
.....e cosi nel mysql arrivano codici html senza alcuna alterazione dunque perfettamente funzionanti.
Fai attenzione che questa non è cosa buona...rischi gravi SQL injection facendo così
Ti consiglio di fare come ti ho suggerito al precendete post
-
Ciao samyorn
ho provato col tuo medoto ma non funziona, appaiono i link cn gli stessi errori di priva, col solito spazio prima del link che invalida il codice html.
Se puoi suggeriscimi un'altro modo che funzioni, col tuo modo non mi va proprio.
mi spieghi cosa sono gli jniection ?
-
Hai tolto questa riga?
[php] $mensaje = str_replace(";"," ",$mensaje); [/php]o meglio, togli la funzione e utilizza questi:
Per l'inserimento nel Db
[php] $testopvt= addslashes(htmlentities($testopvt, ENT_QUOTES)); [/php]per visualizzarli:
[php]echo stripslashes(html_entity_decode($testopvt)); [/php]