Sondage PHP aide

nathan
Invité n'ayant pas de compte PHPfrance

27 avr. 2019, 15:21

Bonjour,
j'ai un problème dans le fonctionnement de mon sondage. Je pense que le problème viens de l'écriture masi je bloque dessus. Pouvez vous m'aider.
fichier : sondage.txt
1,1

sondage.html
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8"/>
<link rel="stylesheet" media="screen" href="mon_style.css"/>
<meta name="author" content="Lucas Jurain et Nathan Minon"/>
<link rel="icon" type="image/ico" href="favicon.ico"/>
<title>La Securite Routiere</title>
</head>
<body>
<section>
<p>Avez vous le permis de conduire ? </p>
<form action="sondage.php" method="post">
<input type="radio" name="reponse" value="0" checked="checked"/>Oui<br/>
<input type="radio" name="reponse" value="1"/>Non<br/>
<input type="submit" value="Voter" name="envoi"/>
</form>
<a href="exploitation.php">Voir les resultats</a>
</section>
</body>
</html>

sondage.php
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8"/>
<link rel="stylesheet" media="screen" href="mon_style.css"/>
<meta name="author" content="Lucas Jurain et Nathan Minon"/>
<link rel="icon" type="image/ico" href="favicon.ico"/>
<title>La Securite Routiere</title>
</head>
<body>
<header>
<h1><em>La Securite Routiere</em></h1>
<img src="https://yt3.ggpht.com/a-/AAuE7mDL-G4oaS ... ff-rj-k-no" width="200" />
</header>
<section>
<?php
// C'est vide si l'internaute n'a pas voté.
if (empty($_POST["envoi"]) && empty($vote) && empty($_POST["reponse"])){
echo "<input type='submit' name='envoi' value='Voter'/>";
}
else {
echo "Merci pour votre vote.";
if (isset($_POST["envoi"]) && isset($_POST["reponse"]) && empty($vote)){
$rep=$_POST["reponse"];
$fichier="sondage.txt";
// Ouverture en mode lecture-écriture

$pointeur=fopen($fichier,"r+");
$sondage=fread($pointeur,filesize($fichier));
$sondage=explode(",",$sondage);
// réponse contient 0 ou 1
$sondage[$rep]++;
//reconstruction de la chaîne
$sondage=$sondage[0].",".$sondage[1];
rewind($pointeur);
fputs($pointeur,$sondage);
fclose($pointeur);
}
}
?>
</form>
<a href="exploitation.php">Voir les résultats</a>
</section>
</body>
</html>

exploitation.php
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8"/>
<link rel="stylesheet" media="screen" href="mon_style.css"/>
<meta name="author" content="Lucas Jurain et Nathan Minon"/>
<link rel="icon" type="image/ico" href="favicon.ico"/>
<title>La Securite Routiere</title>
</head>
<body>
<header>
<h1><em>La Securite Routiere</em></h1>
<img src="https://yt3.ggpht.com/a-/AAuE7mDL-G4oaS ... ff-rj-k-no" width="200" />
</header>
<section>
<?php
$fichier="sondage.txt";
//Lecture seule

$pointeur=fopen($fichier,"r");
$sondage=fread($pointeur,filesize($fichier));
fclose($pointeur);
$sondage=explode(",",$sondage);

$sondage=file($fichier);
//total des votes
$total=$sondage[0]+$sondage[1];
//longueur max de la barre du "graphique"
$longueur=100;
//partie OUI
$oui=$sondage[0]*$longueur/$total;
$non=$sondage[1]*$longueur/$total;
// Nous allons nous servir d'un tableau pour afficher les barres du "graphique"
// Il faut donc arrondir le résultat pour l'attribut width
$oui=round($oui);
$non=round($non);
echo "oui : $oui non: $non total : $total";
?>
<!-- bordure à zéro et un TD pour espacer sinon c'est pas beau //-->
<table border="0"><tr>
<!-- Il faut un espace pour que la longueur s'adapte et qu'on voie le résultat //-->
<td>Oui&nbsp;</td><td>&nbsp;</td><td width="<?php echo $oui; ?>" bgcolor="red">&nbsp;</td>
</table>
<table border="0"><tr>
<td>Non</td><td>&nbsp;</td><td width="<?php echo $non; ?>" bgcolor="blue">&nbsp;</td>
</table>
</section>
</body>
</html>

Merci beaucoup de votre aide.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

27 avr. 2019, 20:34

Quel est le problème ?
Quand tout le reste a échoué, lisez le mode d'emploi...

nathan
Invité n'ayant pas de compte PHPfrance

27 avr. 2019, 21:28

quand je rentre un vote, les messages d'erreurs suivant s'affichent :
Notice: Undefined offset: 1 in F:\CMI INFO\root\www\TP final\exploitation.php on line 40

Notice: Undefined offset: 1 in F:\CMI INFO\root\www\TP final\exploitation.php on line 45

De plus quoi que je vote le résultat est le même :
Oui : 100 Non : 0
Cela n'évolue pas. Pourtant le total des votes est le bon.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

27 avr. 2019, 23:23

Et donc, quelle est la ligne 40 ? Quelle est la ligne 45 ?
Que comprends-tu de ces messages d'erreur ?

Il faut que tu avances davantage dans ton debug pour qu'on puisse t'aider efficacement, on ne va pas le faire à ta place, on va juste te mettre sur la voie ou te débloquer si tu bloques.
Utilises la fonction var_dump($var) pour voir le contenu de tes variables dans ton code et vérifier que tout se passe comme prévu dans l'exécution
http://php.net/var_dump
Quand tout le reste a échoué, lisez le mode d'emploi...

nathan
Invité n'ayant pas de compte PHPfrance

28 avr. 2019, 00:06

Oui pardon j'ai oublié de vous indiquer à quoi cela correspondais :
ligne 40 : $total=$sondage[0]+$sondage[1];
ligne 45 : $non=$sondage[1]*$longueur/$total;

Dans mon fichier .txt j'ai bien mis 1,1 comme valeur pour éviter que l'on divise par 0

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

28 avr. 2019, 00:30

On avance...
Que comprends-tu de ces messages d'erreur ?
Quand tout le reste a échoué, lisez le mode d'emploi...

nathan
Invité n'ayant pas de compte PHPfrance

28 avr. 2019, 09:44

je ne comprend justement pas trop ce message d'erreur : "Undefined offset"
J'ai regardé sur internet mais c'est dans un contexte différend à chaque fois.
Une variable pas définie ? Problème d'écriture qui bloque la lecture ? Ou il n'arrive pas à accéder à ce que je lui demande ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

28 avr. 2019, 09:57

"Undefined offset 1", cela veut dire en PHP que tu essayes d'accéder à un élément qui n'existe pas dans un tableau, et PHP te rappelle l'élément dans le tableau que tu cherches à obtenir en l’occurrence "1"

En clair, vu les lignes de codes concernées, cela veut dire que $sondage[1] n'existe pas => Il n'y a pas d'élément "1" dans le tableau $sondage.

Tu peux faire un var_dump($sondage); pour voir ce que contient cette variable et ensuite avancer dans ton debugage.
Quand tout le reste a échoué, lisez le mode d'emploi...

nathan
Invité n'ayant pas de compte PHPfrance

28 avr. 2019, 12:04

J'obtient le message suivant :
array(1) { [0]=> string(3) "4,4"
array c'est le tableau
string la chaine de caractère
[0] c'est la case correspondant à "Oui" et 4.4 sont les valeurs de mon fichier .txt
Cela veut dire que les valeurs ne vont que dans Oui ?

nathan
Invité n'ayant pas de compte PHPfrance

28 avr. 2019, 12:25

D'accord sondage[1] n'existe pas c'est pour cela que aucun vote Non n'est comptabilisés.
Il faut attribué la deuxième valeur du fichier .txt à sondage[1], mais je ne comprend pas ou dans mon code cela ne se fais pas .
Merci de votre aide

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

28 avr. 2019, 12:27

Il faut attribué la deuxième valeur du fichier .txt à sondage[1], mais je ne comprend pas ou dans mon code cela ne se fais pas.
Où dans ton code est définie la valeur de la variable $sondage ?
Vérifie à ce niveau là en faisant un var_dump() avant et après les traitements que tu fais dessus pour comprendre le fonctionnement
Quand tout le reste a échoué, lisez le mode d'emploi...

nathan
Invité n'ayant pas de compte PHPfrance

28 avr. 2019, 15:58

$fichier="sondage.txt";
$pointeur=fopen($fichier,"r");
$sondage=fread($pointeur,filesize($fichier));
$sondage=explode(",",$sondage);
$sondage=file($fichier);

J'ai sauté quelques étapes de mon code. C'est un problème d'écriture dans mon .txt ?