Gestion apostrophe requete sql

Résolu/Fermé
per333 - 12 juil. 2010 à 10:25
 sophorya - 13 avril 2012 à 10:32
Bonjour,
Mon problème est que les informations saisies par les usagers dans mon formulaire web sont retransmis à une base de données sql. Cependant, s'ils entrent un apostrophe dans un des champs (ex. commentaire=L'horaire ), une erreur survient. car l'apostrophe stop la valeur.
Comment fait-on pour éviter ceci?

voici mon code :
validtrav1
<?php
include 'connect.php';
include 'variables.php';

//récupération de la variable d'URL,
//qui va nous permettre de savoir quel enregistrement modifier
$numdemande = $_GET["numdemande"] ;

//requête SQL:
$sql = "SELECT *
FROM demande, demandeur, etablissement, senior
WHERE demande.numdem=demandeur.numdem
AND demande.codeetab=etablissement.codeetab
AND demande.numsenior=senior.numsen
AND numdemande = '$numdemande'";




//exécution de la requête:
$requete = mysql_query($sql) ;

//affichage des données:
while( $row = mysql_fetch_assoc( $requete ) )
{
echo("<div align=\"center\"> Demande numero ".$row['numdemande']."<br> Date :".$row['datedemande']."<br> <br> Etablissement : ".$row['etab']." ".$row['nometab']." Téléphone : ".$row['teletab']." <br> ".$row['rueetab']." ".$row['cpetab']." ".$row['villeetab']." <br> Demandeur : ".$row['civilite']." ".$row['nomdem']." ".$row['prenomdem']." ".$row['fonctiondem']." <br>Adresse mail : ".$row['maildem']." <br>Telephone fixe : ".$row['telfixdem']." telephone mobile : ".$row['telmobiledem']." <br> Classe(s) : ".$row['classe']." nombre d'élèves : ".$row['eleveclasse']." <br> Choix du sujet :<br> 1 ".$row['sujet1']." <br> 2 ".$row['sujet2']." <br> 3 ".$row['sujet3']." <br> <br> Date et heure souhaitées : ".$row['dateheurepropo']." <br> <br>Senior : ".$row['nomsen']." ".$row['prenomsen']." <br>
<br>\n") ;






?>
</p>
<form name="validtrav1" action="validtrav2.php" method="POST">
<input type="hidden" name="numdemande" value=" <?php echo($numdemande) ;?>">
<p>Choix du junior
<select name="numjun" id="numjun">
<?php

$requete ="SELECT * FROM junior ";
$requete_exec= mysql_query($requete) or die(mysql_error());
echo '<option value="$numjun" selected></option>';
while($donnees = mysql_fetch_assoc($requete_exec))

//menu déroulant

$row1 = $_POST['row1'];

$sql = ("select * from junior");
$requete = mysql_query($sql);

while ($row1 = mysql_fetch_array($requete))
{
echo"<option value=$row1[0] selected='selected'> $row1[1] $row1[2] </option>";
}
?>
</select>

</p>
<p>Choix du sujet
<select name="numsuj" id="numsuj">
<?php

$requete ="SELECT * FROM sujet ";
$requete_exec= mysql_query($requete) or die(mysql_error());
echo '<option value="$numsuj" selected></option>';
while($donnees = mysql_fetch_assoc($requete_exec))

//menu déroulant

$row1 = $_POST['row1'];

$sql = ("select * from sujet");
$requete = mysql_query($sql);

while ($row1 = mysql_fetch_array($requete))
{
echo"<option value=$row1[0] selected='selected'> $row1[1] </option>";
}
?>

</select>
</p>
Date final
<input type="text" name="dateret" />
</label>
</p>
</p>
Heure final
<input type="text" name="heureret" />
</label>
</p>
</p>
Durée
<input type="text" name="dureeret" />
</label>
</p>
<br />
<br />
<label><br />
</label>
<p><?php
//requête SQL:
$sql = "SELECT *
FROM commentaire
WHERE numdemande = '$numdemande'
ORDER BY datecom" ;

//exécution de la requête:
$requete = mysql_query($sql) ;

//affichage des données:
while( $row = mysql_fetch_assoc( $requete ) )
{
echo("<div align=\"center\">".$row['datecom']." ".$row['destinatairecom']." ".$row['commentaire']." <br>\n") ;
}
?>
</p>
<p>Ajouter un commentaire : </p>
<p>
<label>Destinataire
<input type="text" name="destinatairecom" />
</label>
<label></label>
</p>
<p>
<label>Commentaire
<textarea name="commentaire"></textarea>
</label>
</p>
<p>Presentation terminé
<select name="termine" id="termine">
<option value="non">Non</option>
<option value="oui">Oui</option>
</select>
<label> </label>
</p>
<p>
<input type="submit" name="Submit" value="valider" />
</p>
<p> </p>
</form>
<?php
}//fin if
?>



Validtrav2 :
<?php
include 'connect.php';
include 'variables.php';


//création de la requête SQL:
$sql = "UPDATE demande, junior, sujet
SET dateret = '$date',
heureret = '$heureret',
duree = '$duree',
termine = '$termine',
numsujet = '$numsuj',
numjunior = '$numjun'
WHERE numdemande = '$numdemande'" ;

//exécution de la requête SQL:
$requete = mysql_query($sql) or die( mysql_error() ) ;


$sql="INSERT INTO commentaire(numcom, datecom, destinatairecom, commentaire, numdemande) VALUES('','$date','$destinatairecom', '$commentaire', '$numdemande')";

$requete=mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());



//affichage des résultats, pour savoir si la modification a marchée:
if($requete)
{
echo("Les informations ont etaient modifie") ;
}
else
{
echo("La modification à échouée") ;
}

?>



ma base de donnée SQL :



CREATE TABLE IF NOT EXISTS 'commentaire' (
'numcom' int(11) NOT NULL AUTO_INCREMENT,
'datecom' date NOT NULL,
'destinatairecom' varchar(20) NOT NULL,
'commentaire' varchar(135) NOT NULL,
'numdemande' int(11) NOT NULL,
PRIMARY KEY ('numcom')
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;CREATE TABLE IF NOT EXISTS 'demande' (
'numdemande' int(11) NOT NULL AUTO_INCREMENT,
'datedemande' date NOT NULL,
'classe' varchar(20) NOT NULL,
'eleveclasse' int(11) NOT NULL,
'dateheurepropo' varchar(50) NOT NULL,
'numdem' int(11) NOT NULL,
'codeetab' int(11) NOT NULL,
'sujet1' varchar(20) NOT NULL,
'sujet2' varchar(20) NOT NULL,
'sujet3' varchar(20) NOT NULL,
'etatdemande' varchar(5) NOT NULL DEFAULT 'non',
'datevalid' date NOT NULL,
'numsenior' int(11) NOT NULL,
'numjunior' int(11) NOT NULL,
'termine' varchar(10) NOT NULL,
'dateret' varchar(15) NOT NULL,
'heureret' varchar(10) NOT NULL,
'duree' varchar(10) NOT NULL,
'numsujet' int(11) NOT NULL,
PRIMARY KEY ('numdemande')
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=42 ;CREATE TABLE IF NOT EXISTS 'demandeur' (
'numdem' int(11) NOT NULL AUTO_INCREMENT,
'nomdem' varchar(20) NOT NULL,
'prenomdem' varchar(20) NOT NULL,
'fonctiondem' varchar(20) NOT NULL,
'maildem' varchar(20) NOT NULL,
'telfixdem' varchar(10) NOT NULL,
'telmobiledem' varchar(10) NOT NULL,
'civilite' varchar(5) NOT NULL,
'codeetab' int(11) NOT NULL,
PRIMARY KEY ('numdem')
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=45 ;CREATE TABLE IF NOT EXISTS 'etablissement' (
'codeetab' int(11) NOT NULL AUTO_INCREMENT,
'nometab' varchar(20) NOT NULL,
'rueetab' varchar(20) NOT NULL,
'cpetab' varchar(6) NOT NULL,
'villeetab' varchar(20) NOT NULL,
'teletab' varchar(12) NOT NULL,
'etab' varchar(20) NOT NULL,
PRIMARY KEY ('codeetab')
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=45 ;CREATE TABLE IF NOT EXISTS 'junior' (
'numjun' int(11) NOT NULL AUTO_INCREMENT,
'nomjun' varchar(20) NOT NULL,
'prenomjun' varchar(20) NOT NULL,
'ruejun' varchar(20) NOT NULL,
'cpjun' varchar(6) NOT NULL,
'villejun' varchar(20) NOT NULL,
'teljun' varchar(10) NOT NULL,
'mailjun' varchar(20) NOT NULL,
'responsablejun' varchar(10) NOT NULL,
'classejun' varchar(10) NOT NULL,
'ribjun' int(11) NOT NULL,
'passjun' varchar(10) NOT NULL,
'activejun' varchar(10) NOT NULL,
PRIMARY KEY ('numjun')
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;
CREATE TABLE IF NOT EXISTS 'senior' (
'numsen' int(11) NOT NULL AUTO_INCREMENT,
'nomsen' varchar(20) NOT NULL,
'prenomsen' varchar(20) NOT NULL,
'ruesen' varchar(20) NOT NULL,
'cpsen' varchar(6) NOT NULL,
'villesen' varchar(20) NOT NULL,
'telsen' varchar(10) NOT NULL,
'mailsen' varchar(20) NOT NULL,
'responsablesen' varchar(10) NOT NULL,
'ribsen' int(11) NOT NULL,
PRIMARY KEY ('numsen')
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;CREATE TABLE IF NOT EXISTS 'sujet' (
'numsuj' int(11) NOT NULL AUTO_INCREMENT,
'libsuj' varchar(20) NOT NULL,
'description' varchar(50) NOT NULL,
PRIMARY KEY ('numsuj')
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

Merci d'avance

3 réponses

- recherche des caractéres contenant des apostrophes :
select ---
from ---
where chaine like '%''%';

- remplacer les apostrophes par un espace dans un select
select baic_intitule,replace(baic_intitule,'''',' ') bain_num
from bx_bail
where baic_intitule like '%''%';

- Maj des apostrophes par un espace
update bx_bail set baic_intitule = replace(baic_intitule,'''',' ')
vwhere baic_intitule like '%''%';
2