Comparaison de chaine de caractère

hilias - 16 janv. 2013 à 18:27
 hilias - 17 janv. 2013 à 10:38
bonjour,
voila j'expose mon problème dans l'espoir d'avoir une réponse de votre part.
je suis professeur de physique et je compte faire des devoirs en ligne sauf que j'ai quelques problèmes de codage qui m'énerve :
quand les élèves envoient leurs réponses je les traite par comparaison :donc un simple if qui compare par exemple la réponse proposé et la bonne réponse sauf que :dans le cas où les réponses contient des caractères comme è,é ... ça ne marche pas ,voila un exemple de mon code :
if ($X12=="monoxyde de carbone" ) {$qu12=1;} else{$qu12=0;};
if (similar_text($X13,"dioxygène")=='8') {$qu13=0.5;} else{$qu13=0;};
if ($X14=="carbone") {$qu14=0.5;} else{$qu14=0;};

j'ai essayé plusieurs fonctions mais la seul qui marche à peu prés c'est similar_text .mais elle ne détecte pas le è car elle envoie 8 ou lieu de 9 dans le cas de dioxygène.
donc merci de m'éclairer car j'ai raté qlq chose...
merci d'avance

2 réponses

sylvain64520 Messages postés 130 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 7 juin 2013
17 janv. 2013 à 09:14
Bonjour,

Tu peux utiliser la fonction suivante :
str_replace($search,$replace,$subject);


Tu te crées une fonction qui remplace tous les caractères spéciaux :
function ma_fonction($str){
    $str = str_replace("é","e",$str);
    $str = str_replace("è","e",$str);
    $str = str_replace("ç","c",$str);
    ...
    return $str;
}


Au moment de comparer, tu appeles ta fonction :
similar_text(ma_fonction($X13),ma_fonction("dioxygène"));
0
rebonjour sylvain,
merci pour ta réponse mais dans le cas ou l'élève répond par dioxygéne au lieu de dioxygène alors c'est pas bon ...mais la je me suis aprçu qu'il y a un autre problème (si tu peux m'aider ).quand je remplie et j'envoie que qlq champs le if marche mais quand je remplie tous les champs alors le if ne marche marche qlqs fois .on dirait qu'il y une sorte d’interaction ...
voila le code de mon fichier php.merci d'avance
<?php

/* Création d'une fonction - utilisée dans la récupération des variables - qui teste la configuration get_magic_quotes_gpc du serveur.
Si oui, supprime avec la fonction stripslashes les antislashes "" insérés dans les chaines de caractère des variables gpc (GET, POST, COOKIE) */
function Verif_magicquotes ($chaine)
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);

return $chaine;
}

// Initialisation du message de réponse



// Si le formulaire est envoyé


/* Récupération des variables issues du formulaire
Teste l'existence les données post en vérifiant qu'elles existent, qu'elles sont non vides et non composées uniquement d'espaces.
(Ce dernier point est facultatif et l'on pourrait se passer d'utiliser la fonction trim())
En cas de succès, on applique notre fonction Verif_magicquotes pour (éventuellement) nettoyer la variable */
$nom = (isset($_POST['nom']) && trim($_POST['nom']) != '')? Verif_magicquotes($_POST['nom']) : null;
$prenom = (isset($_POST['prenom']) && trim($_POST['prenom']) != '')? Verif_magicquotes($_POST['prenom']) : null;
$classe = $_POST['classe'];
// Si $pseudo et $pass différents de null
// if(isset($nom,$prenom))

/* Connexion au serveur : dans cet exemple, en local sur le serveur d'évaluation
A MODIFIER avec vos valeurs */
$hostname = "ftpperso.free.fr";
$database = "dchiraa2006";
$username = "dchiraa2006";
$password = "ilias2006";

$connection = mysql_connect($hostname, $username, $password) or die(mysql_error());

// Connexion à la base
mysql_select_db($database, $connection);

// Indique à mySql de travailler en UTF-8 (par défaut mySql risque de travailler au standard ISO-8859-1)
mysql_query("SET NAMES 'utf8'");


/* récupération des variables */
$X1= $_POST['T1'];
$X2= $_POST['T2'];
$X3= $_POST['T3'];
$X4= $_POST['T4'];
$X5= $_POST['T5'];
$X6= $_POST['T6'];
$X7= $_POST['T7'];
$X8= $_POST['T8'];
$X9= $_POST['T9'];
$X10= $_POST['T10'];
$X11= $_POST['T11'];
$X12= $_POST['T12'];
$X13= $_POST['T13'];
$X14= $_POST['T14'];
$X15= $_POST['T15'];
$X16= $_POST['T16'];
$X17= $_POST['T17'];
$X18= $_POST['T18'];
$X19= $_POST['T19'];
$X20= $_POST['T20'];
$X21= $_POST['T21'];

$X22= $_POST['T22'];
$X23= $_POST['T23'];
$X24= $_POST['T24'];
$X25= $_POST['T25'];
$X26= $_POST['T26'];
$X27= $_POST['T27'];
$X28= $_POST['T28'];
$X29= $_POST['T29'];
$X30= $_POST['T30'];
echo similar_text("dioxyde de carbone",$X4);


if(similar_text("eau de chaux",$X1) =='12') {$qu1=0.5;} else{$qu1=0;};echo $qu1;echo'--';
if($X2=="sulfate de cuivre anhydre") {$qu2=0.5;} else{$qu2=0;};echo $qu2;echo'--';
if($X3=="butane") {$qu3=0.5;} else{$qu3=0;};echo $qu3;echo'--';
if(similar_text("dioxyde de carbone",$X4)=='18') {$qu4=0.5;} else{$qu4=0;};echo $qu4;echo'--';
if( similar_text($X5,"l/'eau")=='5') {$qu5=0.5;} else{$qu5=0;};echo $qu5;echo'--';
if($X6=="oui") {$qu6=0.5;} else{$qu6=0;};echo $qu6;echo'--';
if($X7=="butane") {$qu7=0.25;} else{$qu7=0;};echo $qu7;echo'--';
if(similar_text($X8,"dioxygène")=='8') {$qu8=0.25;} else{$qu8=0;}; echo $qu8;echo'--';
if(similar_text("dioxyde de carbone",$X9)=='17') {$qu9=0.25;} else{$qu9=0;};echo $qu9;echo'--';
if(similar_text($X10,"l/'eau")=='5') {$qu10=0.25;} else{$qu10=0;};echo $qu10;echo'--';
$question1 = $qu1+$qu2+$qu3+$qu4+$qu5+$qu6+$qu7+$qu8+$qu9+$qu10;echo $question1;
if($X11=="butane") {$qu1=0.25;} else{$qu1=0;};
if($X12=="comburant") {$qu2=0.25;} else{$qu2=0;};
if(similar_text ($X13, "incomplète ")== '9' ) {$qu3=0.5;} else{$qu3=0;};
if($X14=="monoxyde de carbone") {$qu4=0.5;} else{$qu4=0;};
if(similar_text($X15,"dioxygène")=='8') {$qu5=0.5;} else{$qu5=0;};
if($X16=="faux") {$qu6=0.5;} else{$qu6=0;};
if($X17=="vrai") {$qu7=0.5;} else{$qu7=0;};
if($X18=="vrai") {$qu8=0.5;} else{$qu8=0;};
if($X19=="vrai") {$qu9=0.5;} else{$qu9=0;};
if($X20=="faux") {$qu10=0.5;} else{$qu10=0;};

if($X21=="faux") {$qu1=0.5;} else{$qu1=0;};
if($X22=="faux") {$qu2=0.5;} else{$qu2=0;};
if($X23=="faux") {$qu3=0.5;} else{$qu3=0;};
if($X24=="vrai") {$qu4=0.5;} else{$qu4=0;};
if($X25=="faux") {$qu5=0.5;} else{$qu5=0;};
if($X26=="3000000") {$qu6=0.5;} else{$qu6=0;};
if($X27=="3000") {$qu7=0.5;} else{$qu7=0;};
if($X28=="15000") {$qu8=0.5;} else{$qu8=0;};
if($X29=="2500") {$qu9=0.5;} else{$qu9=0;};









$point=$qu11+$qu12+$qu13+$qu14+$qu15+$qu16+$qu17+$qu18+$qu19+$qu20+$qu21+$qu22+$qu23+$qu24+$qu25+$qu26+$qu27+$qu28+$qu29;


$requete="INSERT INTO devoirchimie4b (nom_eleve,prenom_eleve,q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12,q13,q14,q15,q16,q17,q18,q19,q20,q21,q22,q23,q24,q25,q26,q27,q28,q29,classe,point) VALUES ('$nom','$prenom','$X1','$X2','$X3','$X4','$X5','$X6','$X7','$X8','$X9','$X10','$X11','$X12','$X13','$X14','$X15','$X16','$X17','$X18','$X19','$X20','$X21','$X22','$X23','$X24','$X25','$X26','$X27','$X28','$X29','$classe','$point')";
$resultat1=mysql_db_query($bdd,$requete) or die ('Insertion dans la base de données du site '.$Titresite.' impossible '.$requete.' '.mysql_error());
echo'la note sur 13 est :';echo $point;


mysql_close($connexion);
?>
0
Rejoignez-nous