8796 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'ai un site de vente de véhicule qui possède une base de donnée. Dans ma table j'ai plusieurs champ dont Description. Se champ description est de type "longtext". Le problème est en faite lorsque je remplis mon formulaire d'ajout de véhicule à vendre, tout fonctionne parfaitement. La description s'ajoute à ma base de donnée. Le problème est lorsque j'écris un long texte dans ma description. D'un coup plus rien ne s'ajoute à ma base de donnée. Je n'ai aucune idée d'où le problème peu venir.

ma requête est celle-ci :


if($_FILES['Photo']['erreur']==0)
		{
		copy( $_FILES['Photo']['tmp_name'] , '../telecharger/'.$_POST['Courriel'].'/'.$_FILES['Photo']['name'] );
		copy( $_FILES['Photo1']['tmp_name'] , '../telecharger/'.$_POST['Courriel'].'/'.$_FILES['Photo1']['name'] );
		copy( $_FILES['Photo2']['tmp_name'] , '../telecharger/'.$_POST['Courriel'].'/'.$_FILES['Photo2']['name'] );
		copy( $_FILES['Photo3']['tmp_name'] , '../telecharger/'.$_POST['Courriel'].'/'.$_FILES['Photo3']['name'] );
		}

  if($_FILES['Photo']['erreur']==0)
		{
		$Prenom= $_POST['Prenom'];
	
		$Nom= $_POST['Nom'];
	
		$Courriel= $_POST['Courriel'];
	
		$Telephone= $_POST['Telephone'];
	
		$Titre= $_POST['Titre'];
	
		$Prix= $_POST['Prix'];
	
		$Annee= $_POST['Annee'];
	
		$Kilometrage=$_POST['Kilometrage'];
	
		$Lieu = $_POST['Lieu'];
	
		$Couleurexterieur = $_POST['Couleurexterieur'];
	
		$Couleurinterieur= $_POST['Couleurinterieur'];
	
		$Transmission= $_POST['Transmission'];
	
		$Motricite= $_POST['Motricite'];
	
		$Airclimatise=$_POST['Airclimatise'];
		
		$categorie=$_POST['categorie'];
	
		$Description=$_POST['Description'];
		
		$Photo=$_FILES['Photo']['name'];
		
		$Photo1=$_FILES['Photo1']['name'];
		
		$Photo2=$_FILES['Photo2']['name'];
		
		$Photo3=$_FILES['Photo3']['name'];
		
		
	
	
	$requete = "INSERT INTO annonce (Prenom, Nom, Courriel, Telephone, Titre, Prix, Annee, Kilometrage, Lieu, Couleurexterieur, Couleurinterieur, Transmission, Motricite, Airclimatise, categorie, Description, Photo, Photo1, Photo2, Photo3, Date) VALUES ('".$Prenom."', '".$Nom."', '".$Courriel."', '".$Telephone."', '".$Titre."', '".$Prix."', '".$Annee."', '".$Kilometrage."', '".$Lieu."', '".$Couleurexterieur."', '".$Couleurinterieur."', '".$Transmission."', '".$Motricite."', '".$Airclimatise."','".$categorie."', '".$Description."', '".$Photo."', '".$Photo1."', '".$Photo2."', '".$Photo3."', NOW())";
	
	
	$resultat=mysql_query($requete);
	$voiture=mysql_fetch_array($resultat);


Si quelqu'un à une idée, s'il vous plaît aidez moi Smiley smile
Modifié par alexandcote (27 Sep 2010 - 03:19)
Salut

C'est trop fort « longtext »
Il a une capacité de stockage de 2^32 -1 : c'est 4 milliards 300 millions de caractères ou 4Go

Une description ne demande pas autant de capacité de stockage.

Avec « text » c'est 2^16 -1 : et peut contenir au maximum 65535 caractères. . Et encore très rentable pour une description.

documentation MySQL sur les colonnes text et autre - Intéressant et en fr.
espace requis - Intéressant aussi.

Vérifie ce point important et aussi comprendre la distinction entre une taille variable et une taille fixe. Dans ton cas j'imagine que la taille doit être variable.

++
Merci pour la réponse et j'espère que tu vas bien Smiley smile ,

J'ai effectivement modifié le type de mon champ description pour TEXT qui est amplement!

Mais ceci ne règle toujours pas mon problème. J'ai effectivement besoin d'un taille variable, mais comment puis-je donner cette attribut à se champ? En indiquant rien dans Valeur ?

Merci
En lisant bien j'ai compris le phénomène de taille variable et taille fixe. TEXT est bien un type de champ variable de se que j'ai lu. Mais ceci ne règle pas mon problème. C'est comme si ma requête n'était pas capable de modifier se champ là ou d'ajouté des informations dans se champ.

Merci Smiley smile
Allo

Vérifie ton code à ce moment là : j'ai remarquer que tu utilise sois des majuscules ou des minuscules pour tes variables ou les valeurs de l'attribut name dans ton formulaire.

Si j'ai une suggestion à te faire c'est sur ce point.
Tu peut tout écrire en minuscule - les noms de variables et les valeurs issues de ton formulaire. C'est beaucoup plus pratique et plus rapide à écrire.

Dans ton script je vois que « catégorie » est minuscule à la première lettre et les autres sont en majuscule à la première lettre.

C'est sensible à des erreurs et difficile à repérer. Prend toujours cette habitude d'adopter un seul format mais ne mélange pas les deux formats. Moi j'ai opter pour les minuscules.

Une simple ligne de code en PHP peut faire le travail de mettre la première lettre en majuscule avec la fonction ucwords ( ). uc veut dire « uppercase » et words veut dire « mots ».

C'est pour un meilleur confort en développement. Si erreur il y a, je sais que je n'aurai pas à vérifier sur ce point.

Pour ce qui est du reste : eh bien je n'ai pas vérifier ton script. Mais surtout ne pas oublié mysql_real_escape_string qui protège contre les injections mySQL.

PS: en effet ne met pas de valeur à « text ». Ainsi tu ne fixe pas la taille. J'imagine que chacune de tes descriptions seront variables aussi. On optimise le programme en quelque sorte.

Vérifie aussi en phpAdmin pour voir si mysql ne transmet pas d'erreur. Tout est marquer en top page de phpAdmin, la partie jaune et rouge, si il y a.

++
Modifié par zardoz (27 Sep 2010 - 01:13)
Salut Zardoz,

J'ai eu un manque lorsque j'ai crée ma base de donnée, c'est pour cette raison que j'ai mis un categorie en Minuscule. Je suis entièrement d'accord que ceci amène a plusieurs faute lors de la création et je ne referai pas cette sorte d'erreur à l'avenir, j'ai eu plusieurs bug à cause de cette valeurs. Mais j'ai tout vérifier et tout est correct, lorsque je met plus qu'environ 160 caractère, la requête ne s'ajoute pas à la base de donnée. C'est très étrange comme problème.

Je ne sais pas si quelqu'un à déjà eu se genre de problème auparavant, mais je n'y comprend rien.

Merci
Allo

Oui en effet c'est surtout au niveau de notre mémoire lorsque nous adoptons différents formats concernant les uppercase ou lowercase à la première lettre. Ça ralenti considérablement le travail, surtout que tu as plusieurs colonnes, sans compter les noms de variables et les valeurs de l'attribut name, qui souvent sont sur différents fichiers.

Pour ce qui est du reste : non je ne peux pas t'aider. Pourquoi ça bloque à 160 caractères, j'ignore vraiment. Je n'ai jamais eu ce genre de problème. Désolé.

Je me sert de « text » pour des articles et je n'ai pas ce problème.

++
Salut Zardoz et Merci pour ton aide, c'est toujours très apprécier !:),

J'ai enfin trouvé mon erreur. J'ai faite plusieurs test pour enfin découvrir que se n'ai pas une limite de caractère qui me bloque mais bien l'insertion de ( ' ) dans ma description. Je comprend le bug que lorsque j'ai exemple la phrase :

J'ai une voiture rouge

l'apostrophe termine l'insertion dans le requête puisque tout chaine de caractère doit être encadrer de ' '. J'ai réparer mon problème avec un code qui trouve tout ( ' ) dans ma description et les remplace par ( \' ). Je peux faire se genre de manipulation avec :

$Description=str_replace ( "'", "\'",$Description); 


Tout fonctionne super bien Smiley smile

J'avais une dernière question tu ma parler de mysql_real_escape_string, ou dois-je introduire ceci? C'est pour une question de sécurité ?

Merci Smiley smile
Modifié par alexandcote (27 Sep 2010 - 02:38)
Salutation

C'est exacte oui : mysql_real_escape_string - Heyoan en a souvent fait mention dans tes topic's.

Tu as réparer et tant mieux : donc ton texte s'affiche au complet peut importe le nombre de caractères - c'est bien. C'est l'expérience qui fait le reste. Smiley cligne

++
Salut,

J'ai été revoir mes ancien post et j'ai trouver lorsque Heyoan m'explique. J'ai une petite dernière question, puis-je appliquer mysql_real_escape_string à une valeur FILE ?

ex:

mysql_real_escape_string($_FILES['Photo']['name'])


Merci Smiley smile

P.S si je comprend bien mysql_real_escape_string protège contre les insertions de code MySQL dans ma variable, donc je ne serais pas supposé être obliger en mettre pour le champ Photo? À moins que le malfaiteur renomme sa photo comme une fonction ?
Modifié par alexandcote (27 Sep 2010 - 03:18)
Salutation

Oui : mysql_real_escape_string concerne aussi la sécurité. Les injections MySQL.
J'avoue que c'est assez complexe mais l'article sur les injections est intéressant.

Tu as vécu ton problème en entrée « insert ». Le programme s'arrêtait au premier quote rencontré. Dû au fait que tu n'avais pas d'échappement « \' ». Tu as donc réparer avec str_replace ( ).

Pour répondre à ta question mysql_real_escape_string s'utilise partout où il y a du texte comme valeur.

Mais selon l'article les injections ne concerne pas seulement la sécurité ou le piratage. Dans cet article on parle des fonctions mysql_real_escape_string - addslashes ( ) - str_replace ( ) et autres dont le but est l'échappement des quotes, comme faisant partie des actions sécuritaires.

Ce que j'ai appris c'est que ces fonctions joueront un rôle important.

Dans mon cas j'ai vécu un affichage « select » d'articles avec des « \ » Donc en sortie.
C'était dû à la configuration du serveur. Le magic_quotes_gpc ( ) était activé. Pour garder une compatibilité avec PHP 3 ET 4. Le magic_quotes_gpc ( ) a été désactivé à l'aide d'une autre fonction stripslashes ( ), via une fonction utilisateur. Tout est rentré dans l'ordre.

PS : J'ai repris mon message dans son intégralité car je me trouvais trop confu à la relecture.

++
Modifié par zardoz (27 Sep 2010 - 17:03)