Pourquoi sa coince ? Haa sa m'en bouche un coin !

ViPHP
AB
ViPHP | 5818 Messages

08 janv. 2010, 21:47

Il n'y a pas que l'esthétisme qui est en cause, il y a aussi la facilité de lecture pour les visiteurs et l'optimisation pour le référencement, entre autre.
A part ça, essaies de faire afficher simplement une image avec un nom de fichier comportant des espaces et des accents dans un message de ce forum, peut-être tu comprendras mieux.

ViPHP
ViPHP | 5462 Messages

09 janv. 2010, 00:21

Il n'y a pas que l'esthétisme qui est en cause, il y a aussi la facilité de lecture pour les visiteurs et l'optimisation pour le référencement, entre autre.
A part ça, essaies de faire afficher simplement une image avec un nom de fichier comportant des espaces et des accents dans un message de ce forum, peut-être tu comprendras mieux.
justement y'a pas que les accents , y'a tout les autre carateres aussi, en gros ca qu'on cherche a faire, c'est du simple et lisible pour tout le monde (a peu pret), et ecrivable (ca se dit pas) par tous aussi
donc le minium requis : l' ASCII
je peu tres bien mettre un caratere japonnais dans un nom de fichier, mais je vais pas m'amuser a tous les mettres dans ton str_replace

ViPHP
AB
ViPHP | 5818 Messages

09 janv. 2010, 06:29

justement y'a pas que les accents , y'a tout les autre carateres aussi, en gros ca qu'on cherche a faire, c'est du simple et lisible pour tout le monde (a peu pret), et ecrivable (ca se dit pas) par tous aussi
donc le minium requis : l' ASCII
je peu tres bien mettre un caratere japonnais dans un nom de fichier, mais je vais pas m'amuser a tous les mettres dans ton str_replace
J'ai lu nul part que thekingkong destinait son site à un public japonais...

Et donc concrètement selon ton système - lequel ? - il se passe quoi si un visiteur tente de télécharger un fichier image avec un nom qui comporte des caractères accentués, des espaces ou des caractères spéciaux ?

ViPHP
ViPHP | 5462 Messages

09 janv. 2010, 14:59

justement y'a pas que les accents , y'a tout les autre carateres aussi, en gros ca qu'on cherche a faire, c'est du simple et lisible pour tout le monde (a peu pret), et ecrivable (ca se dit pas) par tous aussi
donc le minium requis : l' ASCII
je peu tres bien mettre un caratere japonnais dans un nom de fichier, mais je vais pas m'amuser a tous les mettres dans ton str_replace
J'ai lu nul part que thekingkong destinait son site à un public japonais...

Et donc concrètement selon ton système - lequel ? - il se passe quoi si un visiteur tente de télécharger un fichier image avec un nom qui comporte des caractères accentués, des espaces ou des caractères spéciaux ?
le caratere japonnais etant un exmple, et n'importe qui peu faire un caractère japonnais 映画、音楽,

par dessus tout ca, c'est soit un coup de url_encode, soit une conversion ascii moins les carateres non autoriser dans le nom d'un fichier (et les caratere qu'on veux en moins genre l'espace, un slash....)

en resumer url_encode ou iconv + preg

Eléphanteau du PHP | 16 Messages

09 janv. 2010, 21:29

Bonjour, salut à tous desolé pour mon absence j'était cloué au lit.
Je suis desoler de vous avoir laisse avec un petit bout de code seulement. pardonner moi l'equipe :oops: .

Voila le code pour ce qu'il veulent m'aider.


modif_ann.php

Code : Tout sélectionner

<?php session_start(); if (!session_is_registered(id_user)) { header("location:index.php"); } include ("config_ann.php"); include ("$include/header.inc"); echo "$del_sup_chapo<br>"; if (!isset($HTTP_GET_VARS[min])) $min=0; $id_user=$HTTP_SESSION_VARS[id_user]; //on compte le nombre d'annonces passées par l'utilisateur $query="select count(*) from $table_annonces where id_user='$id_user'"; $succes=mysql_query($query); $count=mysql_fetch_array($succes); $count=$count[0]; // les petites bornes pour le chiffrage des annonces dans le titre $inf=$min+1; if (($min+$max)>=$count) { $sup=$count; } else { $sup=$min+$max; } // soyons courtois et informatifs echo "<span class='texte_maigre'>Vous avez </span>"; echo "<span class='lienblanc'>$count</span>"; echo "<span class='texte_maigre'> annonce(s) en ligne - "; echo "annonce(s) </span>"; echo "<span class='lienblanc'>$inf</span>"; echo "<span class='texte_maigre'> &agrave; </span>"; echo "<span class='lienblanc'>$sup</span>\n"; // date du jour en timestamp $date=time(); // on extrait les annonces en question $query = "select * from $table_annonces where id_user='$id_user' order by id desc limit $min,$max"; $result = mysql_query($query); while ($i=mysql_fetch_array($result)) { $id=$i[id]; $tel=$i[tel]; $tel_2=$i[tel_2]; $text=stripslashes($i[text]); $id_cat_sel=$i[id_cat]; //récup de la catégorie; l'erreur est humaine ! $img=$i[img]; // on affiche tout ça dans un formulaire echo "<form method='POST' action='ann_del_modif.php?'.SID name='modif' enctype='multipart/form-data'>\n"; echo "<table width='550' cellspacing='0' cellpadding='2' border='0' bgcolor='$color_bordure'>\n"; echo "<tr><td>\n"; echo "<table width='100%' cellspacing='0' cellpadding='2' border='0'>\n"; echo "<tr bgcolor='$color'><td align='right'>\n"; echo "<input type='hidden' name='id' value='".$id."'>\n"; echo "<input type='hidden' name='date' value='".$date."'>\n"; echo "<span class='texte_gras'>tel</span>\n"; echo "</td><td>\n"; echo "<input type='text' name='tel' size='20' value='".$tel."'>\n"; echo "</td></tr>\n"; echo "<tr bgcolor='$color_alt'><td align='right'>\n"; echo "<span class='texte_gras'>tel 2</span>\n"; echo "</td><td>"; echo "<input type='text' name='tel_2' size='20' value='".$tel_2."'>\n"; echo "</td></tr>\n"; echo "<tr bgcolor='$color'><td align='right'>\n"; echo "<span class='texte_gras'>catégorie</span>\n"; echo "</td><td>\n"; echo "<select name='id_cat'>\n"; $query_list="select * from $table_cat order by id_cat"; $list=mysql_query($query_list); while($e=mysql_fetch_array($list)) { $categorie=$e[categorie]; $id_cat=$e[id_cat]; echo "<option value='"; echo $id_cat."'"; if ($id_cat==$id_cat_sel) echo "selected"; echo ">"; echo $categorie; echo "</option>\n"; } echo "</select>\n"; echo "</td></tr>\n"; echo "<tr bgcolor='$color_alt'><td align='right' valign='top'>\n"; echo "<span class='texte_gras'>annonce</span>\n"; echo "</td><td>\n"; echo "<textarea name='text' rows='5' cols='30' wrap='VIRTUAL'>".$text."</textarea>\n"; echo "</td></tr>\n"; if ($img!="") { echo "<tr bgcolor='$color'><td>&nbsp</td><td>"; echo "<input type='hidden' name='img' value='img/$img'>\n"; echo "<img src='img/".$img."'>"; echo "</td></tr><tr bgcolor='$color'><td class='texte_gras'align='right'>image</td>"; echo "<td>"; echo "<input type='file' name='file'>"; echo "</td></tr>"; } else { echo "<tr bgcolor='$color'><td span class='texte_gras' align='right'>\n"; echo "image\n"; echo "</td><td class='texte_maigre'>\n"; echo "<input type='file' name='file'>"; echo "</td></tr>"; } echo "<tr bgcolor='$color_alt'><td>\n"; echo "&nbsp;\n"; echo "</td><td class='texte_maigre'>\n"; echo "<input type='submit' name='action' value='modifier'>\n"; echo "&nbsp;:::&nbsp;"; echo "<input type='submit' name='action' value='supprimer'>\n"; echo "</td></tr>\n"; echo "</table>\n"; echo "</td></tr>\n"; echo "</table><br>\n"; echo "</form>"; } // un poil de navigation si nécessaire if ($min>0) { echo "<A "; echo "HREF='modif_ann.php?min=".($min-$max)."&".SID."'"; echo " class='lienblanc'>Page précedente</A>&nbsp; &nbsp; \n"; } // lien vers la page suivante si nécessaire if (($min+$max)<$count) { echo "<A "; echo "HREF='modif_ann.php?min=".($min+$max)."&".SID."'"; echo " class='lienblanc'>Page suivante</A>\n"; } echo "<br><a href='users_choice.php?'.SID class='lienblanc'>retour au choix utilisateurs</a>"; include ("$include/footer.inc"); ?>
Ann_form.php

Code : Tout sélectionner

session_start(); include ("$include/header.inc"); if ($HTTP_SESSION_VARS[id_user]!="") //récup données utilisateur si logué { $query="select * from $table_user where id_user='$HTTP_SESSION_VARS[id_user]'"; $res=mysql_query($query); $var=mysql_fetch_object ($res); $nom=$var->nom; $prenom=$var->prenom; $mail=$var->mail; } $date=time(); if ($HTTP_SESSION_VARS[id_user]!="") { $envoi_page="users_choice.php?".SID; } else { $envoi_page="index.php?".SID; } ?> <script language="JavaScript" src="js/verif_form.js"> </script> <?php echo $mess_requis; ?> <form action="<?php echo $envoi_page; ?>" method="post" enctype="multipart/form-data" name="annonce"> <table width="600" border="0" cellspacing="0" cellpadding="2" bgcolor="<?php echo $color_bordure; ?>" align="center"> <tr> <td> <table width="100%" border="0" cellspacing="0" cellpadding="4" bgcolor="<?php echo $color; ?>" align="center"> <tr> <td width="30%" align="right" class="texte_gras"> <input type="hidden" name="id_user" value="<?php echo $id_user; ?>"> <input type="hidden" name="date" value="<?php echo $date; ?>"> nom ou pseudo <span class="texte_gras_rouge">&reg;</span></td> <td valign="top"> <input type="text" name="nom" size="25" maxlength="25" value="<?php echo $nom; ?>"> </td> </tr> <tr bgcolor="<?php echo $color_alt; ?>"> <td width="30%" align="right" class="texte_gras">pr&eacute;nom </td> <td valign="top"> <input type="text" name="prenom" size="25" maxlength="25" value="<?php echo $prenom ?>"> </td> </tr> <tr> <td width="30%" align="right" class="texte_gras">mail <span class="texte_gras_rouge">&reg;</span></td> <td valign="top"> <input type="text" name="mail" size="30" maxlength="30" value="<?php echo $mail; ?>"> </td> </tr> <tr bgcolor="<?php echo $color_alt; ?>"> <td width="30%" align="right" class="texte_gras">t&eacute;l</td> <td valign="top"> <input type="text" name="tel" size="20" maxlength="20" value="<?php echo $tel; ?>"> </td> </tr> <tr> <td width="30%" align="right" class="texte_gras">t&eacute;l 2</td> <td valign="top"> <input type="text" name="tel_2" size="20" maxlength="20" value="<?php echo $tel_2; ?>"> </td> </tr> <tr bgcolor="<?php echo $color_alt; ?>"> <td width="30%" align="right" class="texte_gras">cat&eacute;gorie</td> <td valign="top"> <select name="id_cat"> <?php $query="select * from $table_cat order by id_cat"; $result=mysql_query($query); while($i=mysql_fetch_array($result)) { $categorie=$i[categorie]; $id_cat=$i[id_cat]; echo "<option value=\"".$id_cat."\">".$categorie."</option>\n"; } ?> </select> </td> </tr> <tr> <td width="30%" align="right" valign="top" class="texte_gras">texte de l'annonce <span class="texte_gras_rouge">&reg;</span></td> <td valign="top"> <textarea name="text" cols="30" rows="5" wrap="VIRTUAL"><?php echo $text; ?></textarea> </td> </tr> <tr bgcolor="<?php echo $color_alt; ?>"> <td align="right" valign="center" class="texte_gras">image<br><span class="texte_gras_rouge">(jpg ou gif, 50 ko maxi)</span></td> <td valign="center"><input type="file" name="file"></td> </tr> <tr> <td width="30%" align="right">&nbsp;</td> <td class="texte_maigre"> <input type="submit" name="action" value="Envoyer" onClick="MM_validateForm('nom','','R','mail','','RisEmail','text','','R');return document.MM_returnValue"> </td> </tr> </table> </td> </tr> </table> </form> <?php if ($HTTP_SESSION_VARS[id_user]!="") { echo "<a href='users_choice.php?'.SID class='lienblanc'>retour au choix utilisateurs</a><br>"; } else { echo "<br><a href='index.php?' class='lienblanc'>retour &agrave; l'accueil des petites annonces</a><br>"; } include("$include/footer.inc"); ?>
ann_del_modif.php

Code : Tout sélectionner

session_start(); if (!session_is_registered(id_user)) header("location:index.php"); include ("config_ann.php"); $id=$HTTP_POST_VARS[id]; $img_origine=$HTTP_POST_VARS[img]; $doss="img/"; $pref="small_"; // d'abord, détruire, c'est tjrs plus facile !! if ($HTTP_POST_VARS[action]=="supprimer") { if ($img_origine != "") { unlink ($doss.$img_origine); if (file_exists($doss.$pref.$img_origine)) unlink ($doss.$pref.$img_origine); } $query="delete from $table_annonces where id='$id'"; $succes=mysql_query($query); if ($succes) { header("location:users_choice.php?mess=supp&".SID); } } // modifier l'annonce elseif ($HTTP_POST_VARS[action]=="modifier") { // le fichier joint $file_name=virer_accents($file_name); //nettoyage du nom de fichier $file_name=ereg_replace(" ","_",$file_name); $file_name=ereg_replace("'","",$file_name); //$file_name=addslashes($file_name); $img=ereg_replace(" ","_",$file_name); $img=ereg_replace("'","",$file_name); $id_cat=$HTTP_POST_VARS[id_cat]; $tel=trim($HTTP_POST_VARS[tel]); $tel_2=trim($HTTP_POST_VARS[tel_2]); $date=$HTTP_POST_VARS[date]; $text=strip_tags(addslashes(trim($HTTP_POST_VARS[text]))); if ($img == "") { $query="UPDATE $table_annonces"; $query.=" SET id_cat='$id_cat', tel='$tel', tel_2='$tel_2', date='$date', text='$text'"; $query.=" WHERE id='$id'"; $succes=mysql_query($query); if (($succes)) { header ("location:users_choice.php?mess=modif&".SID); } } elseif ($img != "") { if ($img_origine != "") unlink ($doss.$img_origine); if (file_exists($doss.$pref.$img_origine)) unlink ($doss.$pref.$img_origine); // vérification du type et du poids de l'image ou de l'existence d'une image identique if (file_exists($doss.$img)) { header ("location:users_choice.php?mess=memeimg&".SID); } if (($file_type!="image/jpeg") OR ($file_type!="image/pjpeg"))//vérif du type de l'image { header ("location:users_choice.php?mess=type&".SID); } elseif ($file_size>51200)//vérif du poids de l'image { header ("location:users_choice.php?mess=poids&".SID); } else { $file_name=virer_accents($file_name); //nettoyage du nom de fichier $query="UPDATE $table_annonces"; $query.=" SET id_cat='$id_cat', tel='$tel', tel_2='$tel_2', date='$date', text='$text', img='$img'"; $query.=" WHERE id='$id'"; $succes=mysql_query($query); } if (copy($file, "$dest/$file_name") and ($succes)) { header ("location:users_choice.php?mess=modif&".SID); } } } ?>
merci a tous :lol:
Je déteste mais alors je déteste les jeux vidéo sauf quelque un. On s'en fiche je sait mais vous avez tous une signature alors moi aussi Hé Ho la! :p

ViPHP
AB
ViPHP | 5818 Messages

09 janv. 2010, 22:29

justement y'a pas que les accents , y'a tout les autre carateres aussi, en gros ca qu'on cherche a faire, c'est du simple et lisible pour tout le monde (a peu pret), et ecrivable (ca se dit pas) par tous aussi
donc le minium requis : l' ASCII
je peu tres bien mettre un caratere japonnais dans un nom de fichier, mais je vais pas m'amuser a tous les mettres dans ton str_replace
J'ai lu nul part que thekingkong destinait son site à un public japonais...

Et donc concrètement selon ton système - lequel ? - il se passe quoi si un visiteur tente de télécharger un fichier image avec un nom qui comporte des caractères accentués, des espaces ou des caractères spéciaux ?
le caratere japonnais etant un exmple, et n'importe qui peu faire un caractère japonnais 映画、音楽,

par dessus tout ca, c'est soit un coup de url_encode, soit une conversion ascii moins les carateres non autoriser dans le nom d'un fichier (et les caratere qu'on veux en moins genre l'espace, un slash....)

en resumer url_encode ou iconv + preg
Ah on avance un peu puisque quelques post plus haut tu ne voyais pas de raison de remplacer les caractères accentués dans un fichier image.

1/ N'importe qui peut faire un caractère japonais, mais il est très peu probable que n'importe quel visiteur français ait un fichier image comportant un caractère japonais.

2/ On oublie url_encode dans ce cas particulier car on veut un fichier image lisible et accessible.

3/ Reste donc ta proposition d'utiliser iconv. Et proposer à un débutant d'utiliser iconv pour convertir les caractères accentués est pour le moins inadapté car c'est une usine à problème :

- D'une part pour faire des tests en local cela risque fort de retourner des résultats erronés.

- D'autre part, même sur le serveur distant cela risque de ne pas fonctionner correctement cf ce post. Donc il est conseiller d'utiliser préalablement setlocale, et setlocale fonctionnera plus ou moins bien suivant la configuration du serveur #-o

Niveau portabilité d'un script, on a déjà vu beaucoup mieux :roll:

Et puis l'avantage d'utiliser un srt_replace est que tu peux faire d'autres remplacements par la même occasion. Et même si tu ne couvre pas toutes les possibilités, tu auras fait l'essentiel et le preg qui suivra fera le reste du ménage. Ce qui reviendra presque au même que iconv mais avec des possibilités en plus et surtout sans avoir à se soucier de la configuration du serveur (chose essentielle pour la portabilité ou quand on donne des conseils sans savoir si la personne a la main sur le serveur ou non :wink: )


@thekingkong

Ah oui ton script est vieux effectivement car cela fait déjà longtemps qu'on utilise plus la syntaxe $HTTP_... (déprécié)
Donc déjà avec ton éditeur favori tu peux remplacer

$HTTP_GET_VARS par $_GET
$HTTP_SESSION_VARS par $_SESSION
$HTTP_POST_VARS par $_POST


Ensuite j'ai un doute sur le bien fondé d'utiliser utf-8 dans la bdd.

Je ne connais pas tous les éléments, mais si tu dois à un moment donné faire un include d'un fichier iso dans ton fichier utf-8, ou faire afficher des éléments de ta bdd codée en utf-8 dans un fichier iso, tu auras des problèmes.

Généralement quand on code en utf-8 on le fait dès le début sinon c'est risqué ou alors ça demande pas mal de travail pour convertir l'ensemble des scripts et finalement ce n'est généralement indispensable que si tu destine ton site à un public étranger avec des langues non latines.

Donc mon opinion est : codé en utf-8 est une bonne habitude pour les nouveaux scripts. Par contre pour les anciens (ou ceux inclus dans d'anciens scripts), la mise à jour ne doit se faire que si nécessaire.

ViPHP
ViPHP | 5462 Messages

10 janv. 2010, 00:36

Et même si tu ne couvre pas toutes les possibilités
c'est bien de le reconnaitre enfin, je suis curieux de voir ta liste de caractère a remplacer. :D

ViPHP
AB
ViPHP | 5818 Messages

10 janv. 2010, 06:57

Et même si tu ne couvre pas toutes les possibilités
c'est bien de le reconnaitre enfin, je suis curieux de voir ta liste de caractère a remplacer. :D
Je te laisse réfléchir; iconv n'est pas une fonction "magique" :wink:

ViPHP
ViPHP | 5462 Messages

10 janv. 2010, 19:53

Et même si tu ne couvre pas toutes les possibilités
c'est bien de le reconnaitre enfin, je suis curieux de voir ta liste de caractère a remplacer. :D
Je te laisse réfléchir; iconv n'est pas une fonction "magique" :wink:
:mrgreen: c'est un peu facile..., mais bon c'est ton droit

ViPHP
AB
ViPHP | 5818 Messages

11 janv. 2010, 01:29

:mrgreen: c'est un peu facile..., mais bon c'est ton droit
Encore une fois on s'en fou totalement d'avoir une liste non exhaustive puisqu'il s'agit simplement d'avoir un nom de fichier image valide et qu'un preg fera le reste du ménage à la suite.

As-tu de réels problèmes de compréhension ou est-ce le fait de t'être planté dans la compatibilité de str_replace avec l'utf-8 qui t'a fait devenir revanchard au point de pourrir ce topic avec des interventions suivantes sans intérêt pour le sujet traité et pour le moins loufoques du genre "faudrait deja savoir l'intérêt de supprimer les accents, parce que moi j'en vois aucun" etc.

Je pencherais plutôt pour la deuxième hypothèse puisque tes interventions sont bien plus pertinentes dans les autres sujets, à se demander si c'est la même personne :)

Keep cool, l'erreur est humaine, et comme on dit il n'y a que ceux qui ne font rien qui ne se trompent jamais 8-)

Aller juste entre nous, t'aurais pas un caractère un peu "cabochard" ? :wink:

Ou alors si ce n'est pas ça, montres nous plutôt où est le danger dans ce cas précis, de faire un remplacement de caractères avec un srt_replace() suivi d'un preg; on aura au moins appris quelque chose.