Page 1 sur 1

html dans une requete mysql

Posté : 11 mai 2009, 15:30
par hannao
bonjour à tous,

voilà je metrouve confronter à un problème dont je n'arrive pas à trouvé la solution.
Je dois lors d'une requête mysql lancer par un sript php insérer plusieurs données dans une table avnt que j'ajoute le html qui détermine le chemin vers l'image à placer sur la page j'ai une erreur :

( ! ) Parse error: syntax error, unexpected T_STRING in C:\wamp\www\testKwei\index.php on line 20

ce que je comprends c'es qu'il attend une chaine de caractère à cette endroit , non ?

voilà la requête et le code ph en question
<?php
	mysql_connect("localhost","root",""); // declaration de la connexion
    mysql_select_db("interieu");
	$ligne = 0;
	$handle = fopen("test.csv", "r");
	while (($data = fgetcsv($handle, 0, chr(9),'"')) !== FALSE) {
    $ligne++;
    $num = count($data);

    for ($c=0; $c < $num; $c++) {
      //echo 'Col ['.$ligne.', '.$c.'] = '.$data[$c].'<br />'; 
	  echo $data[$c].'<br />';
	  //$var2 = $data[2];
	  $var1 = substr($data[2], 0, 20);
	  echo $data[2];
	  
	  }
	$query = "INSERT INTO jos_content (`id`,`title`,`alias`,`title_alias`,`introtext`,`fulltext`,`state`,`sectionid`,`mask`,`catid`,`created`,`created_by`,`created_by_alias`,`modified`,`modified_by`,`checked_out`,`checked_out_time`,`publish_up`,`publish_down`) VALUES ('". 
	$data[0] ."','".$data[1]."','".$data[1]."',"'<p><img src="images/stories/images_petite/1-1.jpg" border="0" title="chez lui" /></p>'",'".$var1."','".$data[2]."',1,5,0,0,now(),62,'".idem."',now(),62,76392,now(),now(),'2010-10-10 00:00:00')";
	mysql_query($query);
	echo $query.'<br />';
 }
la strucure de la table jos_content
dans title_alias->méduimtext, utf8

Voilà si quelqu'un pouvais m'éclairer sur ce problème ce serais sympa
Ce que j'ai trouvé comme solution c'est de créer une varaible qui contient le chemin,

Mais j'aimerais savoir si il est possible de faire tout de même une requête avec des balise html incorporée.

Merci

Re: html dans une requete mysql

Posté : 12 mai 2009, 16:48
par sadeq
Cette erreur est due généralement et dans ton cas à des guillemets mal placées dans une chaîne.
Et c'est justement dans ce code, au niveau de la valeur HTML de l'image:
	$query = "INSERT INTO jos_content (`id`,`title`,`alias`,`title_alias`,`introtext`,`fulltext`,`state`,`sectionid`,`mask`,`catid`,`created`,`created_by`,`created_by_alias`,`modified`,`modified_by`,`checked_out`,`checked_out_time`,`publish_up`,`publish_down`) VALUES ('". 
	$data[0] ."','".$data[1]."','".$data[1]."',"'<p><img src="images/stories/images_petite/1-1.jpg" border="0" title="chez lui" /></p>'",'".$var1."','".$data[2]."',1,5,0,0,now(),62,'".idem."',now(),62,76392,now(),now(),'2010-10-10 00:00:00')";
Correction: Il faut supprimer les guillemets qui se délimitent la chaine contenant le code HTML de l'image, car elle est déjà contenue par défaut dans les guillemets principale qui commencent à partir de "INSERT ... et il faut échapper les guillemets internes qui apparaissent dans le code HTML de l'image, c'est à dire qu'il faut ajouter un anti-slash \ avant chaque guillemet " interne pour la considérer comme caractère et non délimiteur de texte PHP. Voici comment:
	$query = "INSERT INTO jos_content (`id`,`title`,`alias`,`title_alias`,`introtext`,`fulltext`,`state`,`sectionid`,`mask`,`catid`,`created`,`created_by`,`created_by_alias`,`modified`,`modified_by`,`checked_out`,`checked_out_time`,`publish_up`,`publish_down`) 
VALUES ('". $data[0] ."',
'".$data[1]."',
'".$data[1]."',
'<p><img src=\"images/stories/images_petite/1-1.jpg\" border=\"0\" title=\"chez lui\" /></p>',
'".$var1."',
'".$data[2]."',
1,
5,
0,
0,
now(),
62,
'".idem."',
now(),
62,
76392,
now(),
now(),
'2010-10-10 00:00:00')";
Autre remarque: C'est quoi le mot "idem" qui se trouve concaténé ? est-ce une variable, une constante ou quoi ?

Posté : 13 mai 2009, 12:17
par hannao
"idem" est justeun mot pour dire que c'est comme le 62 d'avant, si je comprends bien je n'ai pas besoin des '.' pour le faire entrer dans la base car c'est juste une chaine de caractères.
Est-ce bien ce que tu veux me dire ?
Merci pour ta réponse concernant la syntaxe de la requête.

Posté : 13 mai 2009, 13:34
par sadeq
Oui, si "idem" est juste un mot il faut enlever la concaténation '.' car cela se fait uniquement pour insérer des variables ou constante de PHP dans la chaine. Il faut donc écrire:
...
now(),
62,
'idem',
now(),
....

Posté : 13 mai 2009, 13:39
par Invité
merci pour toutes ces infis

Posté : 16 mai 2009, 21:32
par hannao
merci bien pour toutes ces infos et partage de connaissance.
le sujet est résolu pour moi Je ne sais plus comment le signalé sur le site.
Merci