Delete php warning and secure SQL
This commit is contained in:
parent
b427472bbf
commit
7d5c2a6fb8
161
studs.php
161
studs.php
@ -51,23 +51,23 @@ include_once('fonctions.php');
|
||||
$numsondage = false;
|
||||
|
||||
//On récupère le numéro de sondage par le lien web.
|
||||
if(isset($_GET["sondage"])) {
|
||||
if(issetAndNoEmpty('sondage', $_GET) === true) {
|
||||
$numsondage = $_GET["sondage"];
|
||||
$_SESSION["numsondage"] = $numsondage;
|
||||
}
|
||||
|
||||
if(isset($_POST["sondage"])) {
|
||||
if(issetAndNoEmpty('sondage') === true) {
|
||||
$numsondage = $_POST["sondage"];
|
||||
$_SESSION["numsondage"] = $numsondage;
|
||||
} elseif(isset($_COOKIE["sondage"])) {
|
||||
} elseif(issetAndNoEmpty('sondage', $_COOKIE) === true) {
|
||||
$numsondage = $_COOKIE["sondage"];
|
||||
} elseif(isset($_SESSION["numsondage"])) {
|
||||
} elseif(issetAndNoEmpty('numsondage', $_SESSION) === true) {
|
||||
$numsondage = $_SESSION["numsondage"];
|
||||
}
|
||||
|
||||
if ($numsondage) {
|
||||
if ($numsondage !== false) {
|
||||
$dsondage = get_sondage_from_id($numsondage);
|
||||
if(!$dsondage) {
|
||||
if($dsondage === false) {
|
||||
$err |= NO_POLL;
|
||||
}
|
||||
} else {
|
||||
@ -75,12 +75,12 @@ if ($numsondage) {
|
||||
}
|
||||
|
||||
//output a CSV and die()
|
||||
if(isset($_GET['export']) && $Sondage) {
|
||||
if(issetAndNoEmpty('export', $_GET) && $dsondage !== false) {
|
||||
if($_GET['export'] == 'csv') {
|
||||
require_once('exportcsv.php');
|
||||
}
|
||||
|
||||
if($_GET['export'] == 'ics' && $Sondage->is_date) {
|
||||
if($_GET['export'] == 'ics' && $dsondage->is_date) {
|
||||
require_once('exportics.php');
|
||||
}
|
||||
|
||||
@ -88,28 +88,36 @@ if(isset($_GET['export']) && $Sondage) {
|
||||
}
|
||||
|
||||
// quand on ajoute un commentaire utilisateur
|
||||
if(isset($_POST['ajoutcomment'])) {
|
||||
if (isset($_SERVER['REMOTE_USER'])) {
|
||||
$comment_user = $_SESSION['nom'];
|
||||
} elseif(isset($_POST["commentuser"]) && ! empty($_POST["commentuser"])) {
|
||||
$comment_user = $connect->qstr(strip_tags($_POST["commentuser"]));
|
||||
if(isset($_POST['ajoutcomment']) || isset($_POST['ajoutcomment_x'])) {
|
||||
if (isset($_SESSION['nom'])) {
|
||||
// Si le nom vient de la session, on le de-htmlentities
|
||||
$comment_user = html_entity_decode($_SESSION['nom'], ENT_QUOTES, 'UTF-8');
|
||||
} elseif(issetAndNoEmpty('commentuser')) {
|
||||
$comment_user = $_POST["commentuser"];
|
||||
} elseif(isset($_POST["commentuser"])) {
|
||||
$err |= COMMENT_USER_EMPTY;
|
||||
} else {
|
||||
$comment_user = _('anonyme');
|
||||
}
|
||||
|
||||
if(empty($_POST["comment"])) {
|
||||
if(issetAndNoEmpty('comment') === false) {
|
||||
$err |= COMMENT_EMPTY;
|
||||
}
|
||||
|
||||
if (isset($_POST["comment"]) && !is_error(COMMENT_EMPTY) && !is_error(NO_POLL) && !is_error(COMMENT_USER_EMPTY)) {
|
||||
if( ! $connect->Execute('INSERT INTO comments ' .
|
||||
'(id_sondage, comment, usercomment) VALUES ("'.
|
||||
$numsondage . '","'.
|
||||
$connect->qstr(strip_tags($_POST['comment'])).
|
||||
'","' .
|
||||
$comment_user .'")') ) {
|
||||
// protection contre les XSS : htmlentities
|
||||
$comment = htmlentities($_POST['comment'], ENT_QUOTES, 'UTF-8');
|
||||
$comment_user = htmlentities($comment_user, ENT_QUOTES, 'UTF-8');
|
||||
|
||||
$sql = 'INSERT INTO comments (id_sondage, comment, usercomment) VALUES ('.
|
||||
$connect->Param('id_sondage').','.
|
||||
$connect->Param('comment').','.
|
||||
$connect->Param('comment_user').')';
|
||||
|
||||
$sql = $connect->Prepare($sql);
|
||||
$comments = $connect->Execute($sql, array($numsondage, $comment, $comment_user));
|
||||
|
||||
if ($comments === false) {
|
||||
$err |= COMMENT_INSERT_FAILED;
|
||||
}
|
||||
}
|
||||
@ -117,15 +125,19 @@ if(isset($_POST['ajoutcomment'])) {
|
||||
|
||||
|
||||
// Action quand on clique le bouton participer
|
||||
$user_studs=$connect->Execute("SELECT * FROM user_studs WHERE id_sondage='$numsondage' ORDER BY id_users");
|
||||
$sql = 'SELECT * FROM user_studs WHERE id_sondage='.$connect->Param('numsondage').' ORDER BY id_users';
|
||||
$sql = $connect->Prepare($sql);
|
||||
$user_studs = $connect->Execute($sql, array($numsondage));
|
||||
|
||||
$nbcolonnes = substr_count($dsondage->sujet, ',') + 1;
|
||||
if (!is_error(NO_POLL) && isset($_POST["boutonp"])) {
|
||||
if (!is_error(NO_POLL) && (isset($_POST["boutonp"]) || isset($_POST["boutonp_x"]))) {
|
||||
//Si le nom est bien entré
|
||||
if (! isset($_POST["nom"]) || empty($_POST['nom'])) {
|
||||
if (issetAndNoEmpty('nom') === false) {
|
||||
$err |= NAME_EMPTY;
|
||||
}
|
||||
|
||||
if(!is_error(NAME_EMPTY) && (!isset($_SERVER['REMOTE_USER']) || $_POST["nom"] == $_SESSION["nom"])) {
|
||||
$nouveauchoix = '';
|
||||
for ($i=0;$i<$nbcolonnes;$i++) {
|
||||
// Si la checkbox est enclenchée alors la valeur est 1
|
||||
if (isset($_POST["choix$i"]) && $_POST["choix$i"] == '1') {
|
||||
@ -135,20 +147,28 @@ if (!is_error(NO_POLL) && isset($_POST["boutonp"])) {
|
||||
}
|
||||
}
|
||||
|
||||
$nom=substr($_POST["nom"],0,64);
|
||||
|
||||
// protection contre les XSS : htmlentities
|
||||
$nom = htmlentities($nom, ENT_QUOTES, 'UTF-8');
|
||||
|
||||
while($user = $user_studs->FetchNextObject(false)) {
|
||||
if ($_POST["nom"]==$user->nom) {
|
||||
if ($nom == $user->nom) {
|
||||
$err |= NAME_TAKEN;
|
||||
}
|
||||
}
|
||||
|
||||
// Ecriture des choix de l'utilisateur dans la base
|
||||
if (!is_error(NAME_TAKEN) && !is_error(NAME_EMPTY)) {
|
||||
// TODO: throw error
|
||||
$nom=substr($_POST["nom"],0,64);
|
||||
$connect->Execute('INSERT INTO user_studs (nom,id_sondage,reponses) VALUES ("' .
|
||||
$nom . '","' .
|
||||
$numsondage . '","' .
|
||||
$nouveauchoix . '")');
|
||||
|
||||
$sql = 'INSERT INTO user_studs (nom,id_sondage,reponses) VALUES ('.
|
||||
$connect->Param('nom').', '.
|
||||
$connect->Param('numsondage').', '.
|
||||
$connect->Param('nouveauchoix').')';
|
||||
$sql = $connect->Prepare($sql);
|
||||
|
||||
// Todo : Il faudrait lever une erreur en cas d'erreur d'insertion
|
||||
$connect->Execute($sql, array($nom, $numsondage, $nouveauchoix));
|
||||
|
||||
if ($dsondage->mailsonde || /* compatibility for non boolean DB */ $dsondage->mailsonde=="yes" || $dsondage->mailsonde=="true") {
|
||||
$headers="From: ".NOMAPPLICATION." <".ADRESSEMAILADMIN.">\r\nContent-Type: text/plain; charset=\"UTF-8\"\nContent-Transfer-Encoding: 8bit";
|
||||
@ -156,7 +176,7 @@ if (!is_error(NO_POLL) && isset($_POST["boutonp"])) {
|
||||
"[".NOMAPPLICATION."] "._("Poll's participation")." : $dsondage->titre",
|
||||
"\"$nom\" ".
|
||||
_("has filled a line.\nYou can find your poll at the link") . " :\n\n".
|
||||
get_server_name()."/studs.php?sondage=$numsondage \n\n" .
|
||||
getUrlSondage($numsondage)." \n\n" .
|
||||
_("Thanks for your confidence.") . "\n". NOMAPPLICATION,
|
||||
$headers);
|
||||
}
|
||||
@ -234,6 +254,7 @@ echo '</div>'."\n";
|
||||
|
||||
echo '<form name="formulaire" action="studs.php"'.'#bas" method="POST" onkeypress="javascript:process_keypress(event)">'."\n";
|
||||
echo '<input type="hidden" name="sondage" value="' . $numsondage . '"/>';
|
||||
// Todo : add CSRF protection
|
||||
echo '<div class="cadre"> '."\n";
|
||||
echo _("If you want to vote in this poll, you have to give your name, choose the values that fit best for you<br>(without paying attention to the choices of the other voters) and validate with the plus button at the end of the line.") ."\n";
|
||||
echo '<br><br>'."\n";
|
||||
@ -253,7 +274,7 @@ for ($i=0;$i<$nblignes;$i++) {
|
||||
}
|
||||
|
||||
//test pour voir si une ligne est a modifier
|
||||
if ($_POST['validermodifier'.$i.'_x']) {
|
||||
if (isset($_POST['validermodifier'.$i]) || isset($_POST['validermodifier'.$i.'_x'])) {
|
||||
$modifier = $i;
|
||||
$testmodifier = true;
|
||||
}
|
||||
@ -261,6 +282,7 @@ for ($i=0;$i<$nblignes;$i++) {
|
||||
|
||||
//si le test est valide alors on affiche des checkbox pour entrer de nouvelles valeurs
|
||||
if ($testmodifier) {
|
||||
$nouveauchoix = '';
|
||||
for ($i=0;$i<$nbcolonnes;$i++) {
|
||||
//recuperation des nouveaux choix de l'utilisateur
|
||||
if (isset($_POST["choix$i"]) && $_POST["choix$i"] == 1) {
|
||||
@ -274,10 +296,13 @@ if ($testmodifier) {
|
||||
while ($data = $user_studs->FetchNextObject(false) ) {
|
||||
//mise a jour des données de l'utilisateur dans la base SQL
|
||||
if ($compteur == $modifier) {
|
||||
$connect->Execute("UPDATE user_studs SET reponses='$nouveauchoix' WHERE nom='$data->nom' AND id_users='$data->id_users'");
|
||||
$sql = 'UPDATE user_studs SET reponses='.$connect->Param('nouveauchoix').' WHERE nom='.$connect->Param('nom').' AND id_users='.$connect->Param('id_users');
|
||||
$sql = $connect->Prepare($sql);
|
||||
$connect->Execute($sql, array($nouveauchoix, $data->nom, $data->id_users));
|
||||
|
||||
if ($dsondage->mailsonde=="yes") {
|
||||
$headers="From: ".NOMAPPLICATION." <".ADRESSEMAILADMIN.">\r\nContent-Type: text/plain; charset=\"UTF-8\"\nContent-Transfer-Encoding: 8bit";
|
||||
mail ("$dsondage->mail_admin", "[".NOMAPPLICATION."] " . _("Poll's participation") . " : $dsondage->titre", "\"$data->nom\""."" . _("has filled a line.\nYou can find your poll at the link") . " :\n\n".get_server_name()."/studs.php?sondage=$numsondage \n\n" . _("Thanks for your confidence.") . "\n".NOMAPPLICATION,$headers);
|
||||
mail ("$dsondage->mail_admin", "[".NOMAPPLICATION."] " . _("Poll's participation") . " : $dsondage->titre", "\"$data->nom\""."" . _("has filled a line.\nYou can find your poll at the link") . " :\n\n".getUrlSondage($numsondage)." \n\n" . _("Thanks for your confidence.") . "\n".NOMAPPLICATION,$headers);
|
||||
}
|
||||
}
|
||||
|
||||
@ -286,7 +311,9 @@ if ($testmodifier) {
|
||||
}
|
||||
|
||||
//recuperation des utilisateurs du sondage
|
||||
$user_studs=$connect->Execute("SELECT * FROM user_studs WHERE id_sondage='$numsondage' ORDER BY id_users");
|
||||
$sql = 'SELECT * FROM user_studs WHERE id_sondage='.$connect->Param('numsondage').' ORDER BY id_users';
|
||||
$sql = $connect->Prepare($sql);
|
||||
$user_studs = $connect->Execute($sql, array($numsondage));
|
||||
|
||||
//reformatage des données des sujets du sondage
|
||||
$toutsujet = explode(",",$dsondage->sujet);
|
||||
@ -300,7 +327,7 @@ if ($dsondage->format=="D"||$dsondage->format=="D+") {
|
||||
//affichage des années
|
||||
$colspan=1;
|
||||
for ($i=0;$i<count($toutsujet);$i++) {
|
||||
if (date('Y', intval($toutsujet[$i])) == date('Y', intval($toutsujet[$i+1]))) {
|
||||
if (isset($toutsujet[$i+1]) && date('Y', intval($toutsujet[$i])) == date('Y', intval($toutsujet[$i+1]))) {
|
||||
$colspan++;
|
||||
} else {
|
||||
echo '<td colspan='.$colspan.' class="annee">'.date('Y', intval($toutsujet[$i])).'</td>'."\n";
|
||||
@ -317,8 +344,13 @@ if ($dsondage->format=="D"||$dsondage->format=="D+") {
|
||||
for ($i=0;$i<count($toutsujet);$i++) {
|
||||
// intval() est utiliser pour supprimer le suffixe @* qui déplaît logiquement à strftime()
|
||||
$cur = intval($toutsujet[$i]);
|
||||
if (isset($toutsujet[$i+1]) === false) {
|
||||
$next = false;
|
||||
} else {
|
||||
$next = intval($toutsujet[$i+1]);
|
||||
if (strftime("%B", $cur) == strftime("%B", $next)&&date('Y',$cur)==date('Y',$next)) {
|
||||
}
|
||||
|
||||
if ($next && strftime("%B", $cur) == strftime("%B", $next) && date('Y', $cur) == date('Y', $next)) {
|
||||
$colspan++;
|
||||
} else {
|
||||
if ($_SESSION["langue"]=="EN") { // because strftime doesn't support english suffix (like st,nd,rd,th)
|
||||
@ -338,8 +370,12 @@ if ($dsondage->format=="D"||$dsondage->format=="D+") {
|
||||
$colspan=1;
|
||||
for ($i=0;$i<count($toutsujet);$i++) {
|
||||
$cur = intval($toutsujet[$i]);
|
||||
if (isset($toutsujet[$i+1]) === false) {
|
||||
$next = false;
|
||||
} else {
|
||||
$next = intval($toutsujet[$i+1]);
|
||||
if (strftime("%a %e",$cur)==strftime("%a %e",$next)&&strftime("%B",$cur)==strftime("%B",$next)) {
|
||||
}
|
||||
if ($next && strftime("%a %e", $cur) == strftime("%a %e", $next) && strftime("%B", $cur) == strftime("%B", $next)) {
|
||||
$colspan++;
|
||||
} else {
|
||||
if ($_SESSION["langue"]=="EN") {
|
||||
@ -359,9 +395,13 @@ if ($dsondage->format=="D"||$dsondage->format=="D+") {
|
||||
echo '<tr>'."\n";
|
||||
echo '<td></td>'."\n";
|
||||
|
||||
for ($i=0;$toutsujet[$i];$i++) {
|
||||
for ($i=0; isset($toutsujet[$i]); $i++) {
|
||||
$heures=explode("@",$toutsujet[$i]);
|
||||
if (isset($heures[1]) === true) {
|
||||
echo '<td class="heure">'.$heures[1].'</td>'."\n";
|
||||
} else {
|
||||
echo '<td class="heure"></td>'."\n";
|
||||
}
|
||||
}
|
||||
|
||||
echo '</tr>'."\n";
|
||||
@ -373,7 +413,7 @@ if ($dsondage->format=="D"||$dsondage->format=="D+") {
|
||||
echo '<tr>'."\n";
|
||||
echo '<td></td>'."\n";
|
||||
|
||||
for ($i=0;$toutsujet[$i];$i++) {
|
||||
for ($i=0; isset($toutsujet[$i]); $i++) {
|
||||
echo '<td class="sujet">'.$toutsujet[$i].'</td>'."\n";
|
||||
}
|
||||
|
||||
@ -381,7 +421,7 @@ if ($dsondage->format=="D"||$dsondage->format=="D+") {
|
||||
}
|
||||
|
||||
//Usager pré-authentifié dans la liste?
|
||||
$user_mod = FALSE;
|
||||
$user_mod = false;
|
||||
|
||||
//affichage des resultats actuels
|
||||
$somme = array();
|
||||
@ -416,6 +456,9 @@ while ($data=$user_studs->FetchNextObject(false)) {
|
||||
$car = substr($ensemblereponses, $k, 1);
|
||||
if ($car == "1") {
|
||||
echo '<td class="ok">OK</td>'."\n";
|
||||
if (isset($somme[$k]) === false) {
|
||||
$somme[$k] = 0;
|
||||
}
|
||||
$somme[$k]++;
|
||||
} else {
|
||||
echo '<td class="non"></td>'."\n";
|
||||
@ -445,9 +488,8 @@ while ($data=$user_studs->FetchNextObject(false)) {
|
||||
if (!isset($_SERVER['REMOTE_USER']) || !$user_mod) {
|
||||
echo '<tr>'."\n";
|
||||
echo '<td class="nom">'."\n";
|
||||
if (isset($_SERVER['REMOTE_USER'])) {
|
||||
echo '<input type=hidden name="nom" value="'.
|
||||
$_SESSION['nom'].'">'.$_SESSION['nom']."\n";
|
||||
if (isset($_SESSION['nom'])) {
|
||||
echo '<input type=hidden name="nom" value="'.$_SESSION['nom'].'">'.$_SESSION['nom']."\n";
|
||||
} else {
|
||||
echo '<input type=text name="nom" maxlength="64">'."\n";
|
||||
}
|
||||
@ -472,23 +514,30 @@ if (!isset($_SERVER['REMOTE_USER']) || !$user_mod) {
|
||||
//determination de la meilleure date
|
||||
// On cherche la meilleure colonne
|
||||
for ($i=0; $i < $nbcolonnes; $i++) {
|
||||
if (isset($somme[$i]) === true) {
|
||||
if ($i == "0") {
|
||||
$meilleurecolonne = $somme[$i];
|
||||
}
|
||||
|
||||
if ($somme[$i]>$meilleurecolonne) {
|
||||
if (isset($meilleurecolonne) === false || $somme[$i] > $meilleurecolonne) {
|
||||
$meilleurecolonne = $somme[$i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Affichage des différentes sommes des colonnes existantes
|
||||
echo '<tr>'."\n";
|
||||
echo '<td align="right">'. _("Addition") .'</td>'."\n";
|
||||
|
||||
for ($i=0; $i < $nbcolonnes; $i++) {
|
||||
if (isset($somme[$i]) === true) {
|
||||
$affichesomme = $somme[$i];
|
||||
|
||||
if ($affichesomme == "") {
|
||||
$affichesomme="0";
|
||||
$affichesomme = '0';
|
||||
}
|
||||
} else {
|
||||
$affichesomme = '0';
|
||||
}
|
||||
|
||||
echo '<td class="somme">'.$affichesomme.'</td>'."\n";
|
||||
@ -497,8 +546,9 @@ for ($i=0;$i<$nbcolonnes;$i++) {
|
||||
echo '</tr>'."\n";
|
||||
echo '<tr>'."\n";
|
||||
echo '<td class="somme"></td>'."\n";
|
||||
|
||||
for ($i=0; $i < $nbcolonnes; $i++) {
|
||||
if ($somme[$i]==$meilleurecolonne&&$somme[$i]) {
|
||||
if (isset($somme[$i]) && isset($meilleurecolonne) && $somme[$i] == $meilleurecolonne) {
|
||||
echo '<td class="somme"><img src="images/medaille.png" alt="' . _('Best choice') . '"></td>'."\n";
|
||||
} else {
|
||||
echo '<td class="somme"></td>'."\n";
|
||||
@ -516,8 +566,10 @@ $toutsujet=str_replace("°","'",$toutsujet);
|
||||
// On compare le nombre de résultat avec le meilleur et si le résultat est égal
|
||||
// on concatene le resultat dans $meilleursujet
|
||||
$compteursujet=0;
|
||||
$meilleursujet = '';
|
||||
|
||||
for ($i = 0; $i < $nbcolonnes; $i++) {
|
||||
if ($somme[$i]==$meilleurecolonne) {
|
||||
if (isset($somme[$i]) && isset($meilleurecolonne) && $somme[$i] == $meilleurecolonne) {
|
||||
$meilleursujet.=", ";
|
||||
if ($dsondage->format=="D"||$dsondage->format=="D+") {
|
||||
$meilleursujetexport = $toutsujet[$i];
|
||||
@ -546,23 +598,26 @@ for ($i=0;$i<$nbcolonnes;$i++) {
|
||||
$meilleursujet=substr("$meilleursujet", 1);
|
||||
$vote_str = _('vote');
|
||||
|
||||
if ($meilleurecolonne > 1) {
|
||||
if (isset($meilleurecolonne) && $meilleurecolonne > 1) {
|
||||
$vote_str = _('votes');
|
||||
}
|
||||
|
||||
echo '<p class="affichageresultats">'."\n";
|
||||
|
||||
// Affichage du meilleur choix
|
||||
if ($compteursujet=="1"&&$meilleurecolonne) {
|
||||
if ($compteursujet == "1" && isset($meilleurecolonne)) {
|
||||
print '<img src="images/medaille.png" alt="Meilleur choix"> ' . _('The best choice at this time is:') . "<b>$meilleursujet</b> " . _('with') . " <b>$meilleurecolonne </b>" . $vote_str . ".\n";
|
||||
} elseif ($meilleurecolonne) {
|
||||
} elseif (isset($meilleurecolonne)) {
|
||||
print '<img src="images/medaille.png" alt="Meilleur choix"> ' . _('The bests choices at this time are:') . " <b>$meilleursujet</b> " . _('with') . " <b>$meilleurecolonne </b>" . $vote_str . ".\n";
|
||||
}
|
||||
|
||||
echo '</p>';
|
||||
|
||||
//affichage des commentaires des utilisateurs existants
|
||||
$comment_user=$connect->Execute("select * from comments where id_sondage='$numsondage' order by id_comment");
|
||||
$sql = 'select * from comments where id_sondage='.$connect->Param('numsondage').' order by id_comment';
|
||||
$sql = $connect->Prepare($sql);
|
||||
$comment_user=$connect->Execute($sql, array($numsondage));
|
||||
|
||||
if ($comment_user->RecordCount() != 0) {
|
||||
print "<br><b>" . _("Comments of polled people") . " :</b><br>\n";
|
||||
while($dcomment = $comment_user->FetchNextObject(false)) {
|
||||
@ -573,7 +628,7 @@ if ($comment_user->RecordCount() != 0) {
|
||||
//affichage de la case permettant de rajouter un commentaire par les utilisateurs
|
||||
print '<div class="addcomment">' .'<p>' ._("Add a comment in the poll:") . '</p>' . "\n";
|
||||
|
||||
if (isset($_SERVER['REMOTE_USER']) || isset($_SESSION['nom'])) {
|
||||
if (isset($_SESSION['nom']) === false) {
|
||||
echo _("Name") .' : ';
|
||||
echo '<input type="text" name="commentuser" maxlength="64" /><br>'."\n";
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user