8792 sujets

Développement web côté serveur, CMS

Bonjour tout le monde.

Je débute en Php et j'ai installer un livre d'or sur mon site mais malheureusement il y a un problème quand je l'inclu dans ma page Smiley ohwell

Pourtant quand je vais à la page du livre d'or tout ce passe bien.

J'ai aussi un problème au niveau de l'encodage je pensais avoir tout fait comme il fallait mais apparement non car le livre d'or ne prend pas en compte les accents Smiley decu .

Si quelqu'un peut m'aider merci d'avance, j'ai rechercher une réponse à mon problème ici et sur google mais sans succès alors je demande aux pros Smiley confused

EDIT : J'en est oublier de donner les liens Smiley lol

Page ou le livre est inclu

Le livre
Modifié par Shinjitsu-Gensou (01 May 2007 - 15:06)
Salut,

J'ai un peu regardé, essayé divers type d'encodage sur mon navigateur pour faire apparaitre les accents.

rien, j'etais un peu surpris quand j'ai vu que les "accents" n'existaient pas.

En effet ton code source contient des entités qui correspondent aux zigouigoui qui apparaissent. moralité quelquesoit l'encodage aucune chance de voir autre chose.

pour moi il y a 3 pistes sur lesquels investiguer:

- ton editeur de texte ( verifie s'il dans quel encodage il enrengistre les données)
- ta base de données. du coté de l'encodage dans lequel il conserve les données mais aussi dans celui qu'il utilise pour les envoyer.
- le traitement que tu appliques au contenu de ton texte avant de l'enregistré.

dsl de pas pouvoir en dire plus Smiley confused
Modifié par CPascal (29 Apr 2007 - 20:26)
J'utilise dreamweaver et il enregistre en UTF-8 et pour la base de donnée je ne m'y connais pas trop Smiley confused et pour le traitement appliquer au contenu c'est à dire?
Re,

qu'utilise-tu comme base de données? edit: MySQL je viens de m'en rendre compte t'as une erreur de ce type ds ton premier lien^^
fin edit

Il serait interessant d'aller voir dedans sous quel forme sont les accents.verifie en local eventuellement, mais aussi et surtout sur le serveur qui heberge ton site. il peut y avoir des différences.

Si tes accents s'affichent bien quand tu regardes dans la base avec un logiciel comme phpmyadmin si c'est MySQL il faudra chercher dans ta maniere d'afficher tes données. Sinon c dans la maniere d'enrengistrer qu'il y a un schmurk.. Smiley biggol

Sinon pour les traitements je pensais a quelquechose qui explique la presence d'entités. Si c'est toi qui a codé ton livre d'or ça doit être vite vu. fais tu une conversion de format avec des expressions régulieres, une fonction php?

( pensée ) htmlentities ne donnerait pas un truc pareil? ( c'est une question , moi et la mémoire^^ Smiley langue ). edit: apres verif ca pourrait etre une piste fin edit

enfin bref y a surement quelquechose qui transforme tes accents en entités.

pascal
Modifié par CPascal (29 Apr 2007 - 21:25)
Bon,

alors 2 points

1/ d'abord ton pb proviens peut être du reglage de tes bases la premiere page qui nous donne des info sur l'interclassage nous dis latin1_general_ci c'est donc un pb puisque tu travailles avec dream configurer en UTF-8.
Il faudrait que ta base soit elle aussi en UTF-8 . ce que tu peux changer via phpmyadmin:

sur la page de ta base il doit y avoir un onglet opérations. et dans cette onglet quelquepart on te propose de modifier l'interclassage de tes tables. choisi de passer en UTF-8 general.

Ce n'est pas forcément la panaçée avec MySQL d'autre réglages peuvent etre mal positionné mais déjà là ta base encode pas bien

2/ Tes liens nous envoient de la pub. et encore une fois de la pas trés cool, genre installer machin ca va vous permettre d'aller sur des sites adultes. même si c'est de la pub aleatoire de ton hebergeur merci de nous eviter ce genre de bidule.

Je te signale qu'il existe une fonctionnalité "joindre une image" quand on post pour un contenu image statique.

Pascal
Modifié par CPascal (29 Apr 2007 - 23:30)
J'ai beau tout mettre en UTF-8 General (j'ai essayer aussi en unicode) j'ai toujours le même problème, et pour ce qui est des liens ce sont lesquels? Parce que mon hébergeur c'est free et normalement il n'y a pas de problème de ce genre (je n'ai jamais vu ça sur mon site Smiley ohwell ) et je n'ai pas mit ce genre de lien donc normalement ils ne devrait pas être là, et je sais qu'il y a une fonction pour joindre une image mais les images étant plutot lourde je pensé que ça serait mieux de mettre un lien Smiley smile
bonjour,

On vois quand même sur tes nouveaux essais un truc significatif. les é passent quand tu les mets dans le champs pseudo.

Si tu as bien tous mis en UTF-8 c signe que pour MySQL c'est bon et que la config en sortie est bonne aussi.

Reste que tu as surement un pb de traitement du champ texte. Comme t'as un truc qui gere les smiley ca viens peut etre de là ou alors ( ce que je suspecte ) il y a un pb dans les fonctions qui te protege des injections de code.

maintenant c'est du debugage PHP si tu veux regler ce pb a mon avis.
n'oublie pas que la fonction die() est ta meilleure amie dans ce genre de cas.
Essai de voir déjà la tête de la chaine de la requete avant passage a la BDD. et puis remonte les etapes jusqu'a identifié l'endroit où c'est plus bon et juste avant c bon.

Pascal

P.S : rien a redire au liens vers ton site. je ralais pour les 2 derniers mis dans le forum.
Merci de me répondre aussi rapidement et de m'aider Smiley confused et comme je l'ai dit plus tot je ne suis pas doué en php Smiley confused mais il y a des parties de codes qui me semble bizarre

a écrit :

while ($voir = mysql_fetch_array ($chercher))
{
$time = date('d-m-y', $voir['date']);
$pseudo = $voir['pseudo'];

/* LES BBCODE ENVOYES */
$avant = array ('8)',
';)',
':coeur:',
':coeur2:',
':colere:',
':desole:',
':fatigue:',
':D',
'oO',
':gne:',
':S',
':heu:',
':?',
':p',
':malade:',
':X',
':O',
':\'(',
':rrr:',
':)',

'', '',
'[url=|', '|]', '[/url]',
' Smiley center ', '[/center]',
'', '',
'', '',
'[u]', '[/u]',


);

/* CE QUI REMPLACERA LES BBCODES */
$apres = array ('<img src="smileys/classe.jpg" alt="" />',
'<img src="smileys/clein.jpg" alt="" />',
'<img src="smileys/coeur.jpg" alt="" />',
'<img src="smileys/coeur2.jpg" alt="" />',
'<img src="smileys/colore.jpg" alt="" />',
'<img src="smileys/desole.jpg" alt="" />',
'<img src="smileys/fatigue.jpg" alt="" />',
'<img src="smileys/g_sourire.jpg" alt="" />',
'<img src="smileys/oO.jpg" alt="" />',
'<img src="smileys/gne.jpg" alt="" />',
'<img src="smileys/heu.jpg" alt="" />',
'<img src="smileys/heu2.jpg" alt="" />',
'<img src="smileys/heu3.jpg" alt="" />',
'<img src="smileys/langue.jpg" alt="" />',
'<img src="smileys/malade.jpg" alt="" />',
'<img src="smileys/na.jpg" alt="" />',
'<img src="smileys/oh.jpg" alt="" />',
'<img src="smileys/pleurer.jpg" alt="" />',
'<img src="smileys/rrr.jpg" alt="" />',
'<img src="smileys/sourire.jpg" alt="" />',

'<img src="', '" alt="img" />',
'<a href="', '">', '</a>',
'<center>', '</center>',
'<span id="gras">', '</span>',
'<span id="italique">', '</span>',
'<span id="souligne">', '</span>',

);

$txt = $voir['message'];
$message = str_replace($avant, $apres, $txt);
?>
<center>
<div class="livre">
<div class="pseu"><? echo $pseudo ; ?></div>
<div class="date"><? echo $time ; ?></div>
<div class="mess"><? echo $message ; ?></div>
</div>
</center>
<?
}
?>
<center><br /><a href="#">Remonter</a><br /><br /></center>
<!-- FORMULAIRE D'ENVOIE DE MESSAGE -->
<form name="formulaire" action="NewLivreDor.php" method="post">
<input type="hidden" name="date" value="<? echo time() ; ?>" /><center>
<table width="559" border="1" cellspacing="0">
<tr>
<td width="104"><div id="pseudo">Pseudo : </div></td>
<td width="380">
<center>
<input name="pseudo" type="text" class="pseudo" size="50" />
</center>
</td>
</tr>
<tr>
<td width="104"></td>
<td>
<center>
<input class="form2" onclick="addText('Url de votre image');return(false)" type="button" value="Img" />&nbsp;

<input class="lien" onclick="addText('Texte du lien image');return(false)" type="button" value="Lien" />&nbsp;

<input class="form2" onclick="addText(' Smiley center Texte à centrer[/center]');return(false)" type="button" value="Centrer" />&nbsp;

<input class="gras" onclick="addText('Texte en gras');return(false)" type="button" value="Gras" />&nbsp;

<input class="ital" onclick="addText('Texte en italique');return(false)" type="button" value="Italique" />&nbsp;

<input class="souligne" onclick="addText('[u]Texte souligné[/u]');return(false)" type="button" value="Souligner" />
</center>
</td>
</tr>
<tr>
<td><table width="104" border="0" cellspacing="3">
<tr>
<td width="19"><img onclick="addText(' 8) ');return(false)" alt="" src="smileys/classe.jpg" width="19" height="19" /></td>
<td width="19"><img onclick="addText(' Smiley cligne ');return(false)" alt="" src="smileys/clein.jpg" width="19" height="19" /></td>
<td width="19"><img onclick="addText(' :coeur: ');return(false)" alt="" src="smileys/coeur.jpg" width="19" height="19" /></td>
<td width="19"><img onclick="addText(' :coeur2: ');return(false)" alt="" src="smileys/coeur2.jpg" width="19" height="19" /></td>
</tr>
<tr>
<td><img onclick="addText(' :colere: ');return(false)" alt="" src="smileys/colere.jpg" width="19" height="19" /></td>
<td><img onclick="addText(' :desole: ');return(false)" alt="" src="smileys/desole.jpg" width="19" height="19" /></td>
<td><img onclick="addText(' :fatigue: ');return(false)" alt="" src="smileys/fatigue.jpg" width="19" height="19" /></td>
<td><img onclick="addText(' Smiley lol ');return(false)" alt="" src="smileys/g_sourire.jpg" width="19" height="19" /></td>
</tr>
<tr>
<td><img onclick="addText(' :gne: ');return(false)" alt="" src="smileys/gne.jpg" width="19" height="19" /></td>
<td><img onclick="addText(' :S ');return(false)" alt="" src="smileys/heu.jpg" width="19" height="19" /></td>
<td><img onclick="addText(' :heu: ');return(false)" alt="" src="smileys/heu2.jpg" width="19" height="19" /></td>
<td><img onclick="addText(' oO ');return(false)" alt="" src="smileys/oO.jpg" width="19" height="19" /></td>
</tr>
<tr>
<td><img onclick="addText(' :? ');return(false)" alt="" src="smileys/heu3.jpg" width="19" height="19" /></td>
<td><img onclick="addText(' Smiley langue ');return(false)" alt="" src="smileys/langue.jpg" width="19" height="19" /></td>
<td><img onclick="addText(' :malade: ');return(false)" alt="" src="smileys/malade.jpg" width="19" height="19" /></td>
<td><img onclick="addText(' :X ');return(false)" alt="" src="smileys/na.jpg" width="19" height="19" /></td>
</tr>
<tr>
<td><img onclick="addText(' :O ');return(false)" alt="" src="smileys/oh.jpg" width="19" height="19" /></td>
<td><img onclick="addText(' :\'( ');return(false)" alt="" src="smileys/pleurer.jpg" width="19" height="19" /></td>
<td><img onclick="addText(' :rrr: ');return(false)" alt="" src="smileys/rrr.jpg" width="19" height="19" /></td>
<td><img onclick="addText(' Smiley smile ');return(false)" alt="" src="smileys/sourire.jpg" width="19" height="19" /></td>
</tr>
</table></td>
<td valign="top">
<center>
<textarea cols="70" rows="9" name="message" class="message"></textarea>
</center>
</td>
</tr>
<tr>
<td colspan="2"><center><input type="reset" class="envoyer" value="Supprimer" />&nbsp;&nbsp;&nbsp;<input type="submit" class="envoyer" value="Envoyer" /></center></td>
</tr>
</table>
</center>
</form>
<? if ($page != 1)
{
echo '<div class="lien_page"><a>Page : </a>';
for ($i = 1; $i <= $NombrePage; $i++)
{
echo '<a href="NewLivreDor.php?page='.$i.'"> '.$i.' </a>';
}
echo '<br /><br /></div>';
}
else {}
?>


<a id="ajouter" class="ajouter"></a>



<? if (isset ($_POST['pseudo']) AND isset ($_POST['message']))
{
if ( $_POST['pseudo'] != NULL AND $_POST['message'] != NULL)
{

$date = $_POST['date'];
$pseudo = $_POST['pseudo'];
$message = nl2br(htmlentities($_POST['message']));

$inserer = mysql_query ("INSERT INTO livre VALUES ('', '$date', '$pseudo', '$message')");
echo "<script>document.location.href=\"NewLivreDor.php\";</script>";
}

else { echo "<center>Remplissez tous les champs</center>"; }
}
else
{}

mysql_close();
?>


les <?
{ ?> me semble bizarre mais pour le reste je n'y connais rien Smiley bawling il va falloir que j'apprenne rapidement le SQL et le Php Smiley confused

et pour ce qui est de la fonction die () j'ai fait une petite recherche sur le net mais je n'ai pas réussi à l'insérer dans la page, ça me donne un message d'erreur à chaque fois
Re,

Je pense avoir la solution a ton pb.

mais d'abord quelques bases importantes:
- lol les symboles <? et ?> ne sont pas si bizarres que ça.
ce sont des symboles qui marque l'entrée et la sortie dans php.
toujours est-il que <? n'est pas conseillé.
la bonne habitude étant d'écrire <?php. par contre ?> reste ?>.

- inserer un die ce fait toujours dans la partie php. il produit une erreur? c peut etre bien normal. die ( "meurs" en français ) sert a interrompre le processus pour afficher un message d'erreur personnaliser.
ainsi en inserant au bon endroit

 
 die($_POST['message']."          ".$message);


tu aurais pu voir que le probleme venait de la ligne


$message = nl2br(htmlentities($_POST['message']));


que je te propose de remplacer par


$message = nl2br(htmlentities($_POST['message'],ENT_COMPAT , 'utf-8')); 
 


ce qui devrait régler ton probleme.

comme quoi j'avais pas tord dans un post precedent je t'en avais déjà parler

a consulter http://fr.php.net/htmlentities

Enfin je trouve que htmlentities ( surtout aprés ce que je viens de lire dans la doc sur ENT_COMPAT ) c'est un peu leger comme ça tous seul pour te protéger des problémes d'injection de code. non?

Je suis pas encore au point tous a fait la-dessus donc je te dirais pas il faut faire ceci cela pour etre a l'abri. mais je pense que tu devras y réflechir.
Modifié par CPascal (30 Apr 2007 - 13:34)
Merci beaucoup ça règle le problème d'encodage et merci pour le lien je chercher ce genre de lien c'est pas facile de trouver des bonnes explications sur le net Smiley ohwell il faut vraiment bien chercher.

Il ne me reste plus que le problème d'include, vu que les messages ne s'affiche toujours pas quand j'inclue la page, mais j'ai une piste je crois que ça vient de cette partie là :

$chercher = mysql_query ("SELECT * FROM livre WHERE date!='xx' ORDER BY id DESC LIMIT $PremierMessage,$MessagesParPage");


Je fait une recherche de mon côté et dès que j'ai du nouveau je reviens pour te prévenir
J'ai eu le même genre de pb quand j'ai du recreer l'equivalent de cette ligne chez moi pour tester le die.

j'avais d'abord ecris

$chercher = mysql_query("SELECT * FROM Livre");

=> erreur

j'ai alors changé en:

require("Connections/bidule.php");
mysql_select_db($database_bidule, $bidule);
$chercher = mysql_query("SELECT * FROM livre",$bidule);

ou donc je selectionnais la base de données bidule creer pour l'occasion
Modifié par CPascal (30 Apr 2007 - 15:22)
Merci mais j'ai essayé comme cela :

require("http://sql.free.fr/");
mysql_select_db($faustxv, $livre);
$chercher = mysql_query ("SELECT * FROM livre WHERE date!='xx' ORDER BY id DESC LIMIT $PremierMessage,$MessagesParPage");

Mais ça ne marche pas Smiley confus il y a une partie que je n'ai pas du comprendre désolé
Re,

aprés avoir fait mysql_select_db($faustxv, $livre); faut réutiliser $livre

$chercher = mysql_query ("SELECT * FROM livre WHERE date!='xx' ORDER BY id DESC LIMIT $PremierMessage,$MessagesParPage",$livre);


mon require me permet d'importer des variables defini ailleurs ( car y a mes propres mot de passe Smiley langue ) et où j'ai fait un mysql_pconnect dont le resultat etait $bidule.

dans $faustvx y doit y avoir le nom de ta base "faustvx".

Sinon c'est peut-être un autre pb. ton pb interviens quand tu fais un include("NewLivreDor.php");?

Cette page contient telle des balises <html> <body> <head>? car dans une page tous ça ne doit pas apparaitre 2 fois.
oui j'ai des balise html, body ect... mais maintenant avec le nouveau code j'ai une erreur à la ligne 82 :

require("http://faustxv.free.fr/config.php");
mysql_select_db($faustxv, $livre);
$chercher = mysql_query ("SELECT * FROM livre WHERE date!='xx' ORDER BY id DESC LIMIT $PremierMessage,$MessagesParPage,$livre");

while ($voir = mysql_fetch_array ($chercher))
{
$time = date('d-m-y', $voir['date']);
$pseudo = $voir['pseudo'];


à partir de while Smiley bawling je doit vraiment être nul Smiley bawling
Je me cite:
$chercher = mysql_query ("SELECT * FROM livre WHERE date!='xx' ORDER BY id DESC LIMIT $PremierMessage,$MessagesParPage[b]",$livre[/b]);



regarde bien t'as pas mis la même chose.

aprés on pourra voir si c'est autre chose Lol.

et oui j'ai vu ton source.. bouh y a plein de balises en double. je t'echange 3 carte panini de albator n°3 contre une ken le survivant n°108 ok? Smiley langue
Modifié par CPascal (30 Apr 2007 - 17:25)
ah oui je mettais tromper désolé Smiley confused et j'ai rechanger la ligne et j'ai refait ma page sans les balise mais ça fait sortir le livre d'or du tableau etc... et le problème perciste Smiley decu et il continu de me dire que l'erreur vient d'ici :

	while ($voir = mysql_fetch_array ($chercher)) 	
		{ 
		$time = date('d-m-y', $voir['date']);
		$pseudo = $voir['pseudo']; 


EDIT : Vu qu'a chaque fois qu'on régles un problème un autre survient je préfére laisser tomber ce livre d'or, j'ai optée pour une Cbox à la place et tout fonctionne comme il faut, désolé pour le dérangement et encore merci
Modifié par Shinjitsu-Gensou (01 May 2007 - 14:26)