|
|
|
|
Bonjour à tous,
Je vous demande de l'aide pour un problème de syntaxe en PHP.
Supposons :
$_POST['couleur']=="bleu"
Maintenant je veux l'utiliser entre ' ' :
ex :
On utilise alors
'.$_POST['couleur'].'
à ce que j'ai cru comprendre. non ?
Mais pour les " " ?
"$_POST['couleur']" m'affiche le nom de la variable :s
Merci de votre aide.
Les guillemets simples n'inteprètent pas une chaine, elle prennent mot à mot ce qu'elles trouves à l'intérieur.
$machin ='truc ' . $_POST['couleur'] . ' machin'; Ou encore: $machin ="truc " . $_POST['couleur'] . " machin"; Note que la deuxième solution consomme discrètement plus de ressources car php va perdre du temps à chercher des variables à interpéter entre les guillemets doubles. Autre solution aussi, pour mettre un tableau carrement dans des guillemets doubles, on utilise les accolades: $machin ="truc {$_POST['couleur']} machin";
Lis ça, ça vaut le coup: http://fr3.php.net/manual/fr/language.types.string.php |
J'ai toujours un problème. En fait en PHP je voudrais effectuer la requête suivante (MySQL) :
<?php
INSERT INTO table(champs1,champs2) VALUES ('valeur1','valeur2');
?>
Le problème c'est que mes valeurs sont des $_POST['blabla'] Comment écrire le $_POST['valeur'] entre ' ' ? J'ai essayé - '"$_POST['valeur']"' -'.$_POST['valeur1'].' En vain.... Merci d'avance ! |
Pas de problème de conscience.
|
BJR
# # Structure de la table `essai` # CREATE TABLE `essai` ( `fld_int` int(11) NOT NULL default '0', `fld_date` date NOT NULL default '0000-00-00', `fld_time` time NOT NULL default '00:00:00', `fld_datetime` datetime NOT NULL default '0000-00-00 00:00:00', `fld_text` varchar(100) NOT NULL default '' ) TYPE=MyISAM; Un ex de code pour générer des insert into : <html>
<body>
<html>
<body>
<?php
function sql_insert($table,$fields,$protect=false)
{
$protector = ($protect) ? '`' : ''; // Accent grave : ALT 96
$name_separator = $protector.', '.$protector;
$delimiter = "'"; // Apostrophe
$value_separator = $delimiter.', '.$delimiter;
// Ajoute les slashs aux valeurs si nécessaire
foreach($fields as $key => $value)
{
$fields[$key]=addslashes($value);
}
$sql = 'INSERT INTO '.$protector.$table.$protector;
$sql .= ' ('.$protector.implode($name_separator, array_keys($fields)).$protector.')';
$sql .= ' VALUES ('.$delimiter.implode($value_separator, $fields).$delimiter.')';
return $sql;
}
$now=time(); // Retourne la date & l'heure actuelle : TIMESTAMP
// Simule le passage de paramètres via méthode POST
$_POST['int']=10;
$_POST['time']=date('H:i:s',$now); // Format pour MySQL : HH:MM:SS
$_POST['date']=date('Y-m-d',$now); // Format pour MySQL : YYYY-MM-DD
$_POST['datetime']=date('Y-m-d H:i:s',$now); // Format pour MySQL : YYYY-MM-DD HH:MM:SS
// Texte à enregister : "C:\> Aujourd'hui : YYYY-MM-DD HH:MM:SS"
$_POST['text']='C:\\> Aujourd\'hui :'.date('Y-m-d H:i:s',$now);
$fields = array();
$fields['fld_int']=$_POST['int'];
$fields['fld_time']=$_POST['time'];
$fields['fld_date']=$_POST['date'];
$fields['fld_datetime']=$_POST['datetime'];
$fields['fld_text']=$_POST['text'];
$sql = sql_insert("ESSAI",$fields,true);
echo $sql;
?>
</body>
</html>
La fct sql_insert() retourne une chaîne contenant la requête sql insert MySQL string sql_insert( string table, array fields, [bool protect = false] ) table : nom de la table MySQL fields : tableau associatif contenant les champs sous la forme champ => valeur protect : indique si le nom des champs et la table doivent être protégés (délimités) par un accent grave. (facultatif) Faudrait amèliorer pour les type SET, ENUM etc mais c'est l'idée PhP
|
Re
INSERT INTO table(champ) VALUES ('$_POST['valeur']');
provoque une erreur car le parser PHP ne parvient à identifier correctement ta variable $_POST['valeur'] Par contre si tu écris : $valeur="Le PHP est génial";
$phrase="INSERT INTO table(champ) VALUES ('$valeur')";
Là ca fontionne car le parser parvient à isoler correctement la variable $valeur comme l'a écrit Kilian tu peux faire mysql_query("INSERT INTO table(champ) VALUES ('{$_POST['valeur']}'");
mais personnellement je trouve ca incompréhensible ! Je ne sais jamais si PHP remplace les valeurs des variables à l'intérieur des chaînes entres apostrophes ou entres guillemets. (surtout lorqu'on a pas pratiqué de PHP depuis un certain temps) De plus il faut également se souvenir que les accolades {} ne font pas parti de la chaine mais permettent d'indiquer EXPLICITEMENT au parser PHP où commence et où se termine la variable ... Pourquoi faire simple quand on peut faire compliquer ? Certe c'est puissant on peut faire des constructions du style : $langage="PHP";
$valeur="Le $langage est génial";
$phrase="INSERT INTO table(champ) VALUES ('$valeur')";
Ouais bof, bof ... Dans ton ex je préfère et de loin écrire : $sql="INSERT INTO table(champ) VALUES (".$_POST['valeur'].")";
mysql_query($sql);
C'est clair, explicit, sans ambiguïté Mais c'est affaire de goût PhP |