Page 1 sur 1

Update impossible

Posté : 06 avr. 2017, 10:05
par lucieemtl
Bonjour à tous et à toutes,

Je vous explique brièvement mon problème :

J'ai une base de données avec des articles, et une administration qui les liste.

Pour mettre un article hors-ligne, il me suffit de cliquer sur une checkbox switch et dans ma BDD, un champ booléen est soit passé à 0 pour hors-ligne, soit passé à 1 pour en ligne.
Pour mon premier article, cela fonctionne bien puisqu'il n'y a pas d'accents dans le titre, mais pour les deux autres.... C'est la galère....
Et j'ai beau avoir utilisé htmlentities et tout ce qui s'en suit, rien à faire... Pourtant, lorsque je rentre ma requête en dur en sql, ça fonctionne et même avec les accents....

Voici mon code :

Un formulaire généré en PHP avec chaque article ayant sa propre checkbox :

<form method=\"POST\" id=\"publier\" action=\"functions/publier.php\">
	<input type=\"hidden\" class=\"articlePubli\" name=\"article\" value=\"\">
	<input type=\"submit\" id=\"publierArticle\" name=\"publierArticle\" style=\"display:none;\"/>
	<input type=\"submit\" id=\"horsLigneArticle\" name=\"horsLigneArticle\" style=\"display:none;\"/>
</form>
[...]
<script>
	$(document).ready(function(){
		$('.iosCheck').click(function(){
			var article = $(this).attr("id");
			$('.articlePubli').val(article);
			if($(this).prop("checked"))
			{
				$('#publierArticle').trigger("click");
			}
			else
			{
				$('#horsLigneArticle').trigger("click");
			}
		});
	});
</script>

Et le PHP dans publier.php :

<?php
	session_start();
	$lien = mysqli_connect('localhost','root','root','ls_bdd');
	mysqli_query($lien,"SET NAMES UTF8");
	$article = htmlentities($_POST['article']);
	if(isset($_POST['publierArticle'])){
		$req = "UPDATE ls_posts SET postage = '1' WHERE name='".$article."';";
		$res = mysqli_query($lien, $req);
		if (!$res) {
			echo "Erreur";
		}
		else {
			echo "Ok";
			echo "UPDATE ls_posts SET postage = '1' WHERE name='".$article."';";
			//header('Location:../items-list.php');
		}
	}
	elseif(isset($_POST['horsLigneArticle'])){
		$req = "UPDATE ls_posts SET postage = '0' WHERE name='".$article."';";
		$res = mysqli_query($lien, $req);
		if (!$res) {
			echo "Erreur";
		}
		else {
			echo "Ok";
			echo "UPDATE ls_posts SET postage = '0' WHERE name='".$article."';";
			//header('Location:../items-list.php');
		}
	}
?>

Quelqu'un peut-il m'aider s'il vous plaît ?

Re: [RESOLU] Update impossible

Posté : 06 avr. 2017, 10:43
par ynx
Salut,

Pour info les deux derniers sujets que tu as postés sont notés directement en Résolu, une petite erreur lors de la saisie du sujet ?

Les fonctions htmlentities ou htmlspecialchars doivent être utilisées uniquement lors de l'affichage des données dans le document html pour éviter les failles XSS mais n'a pas d'utilité avant l'insertion en base de données. Au contraire il est recommandé de ne pas appliquer d'entités html sur les données avant l'insertion en bdd puisque ces données pourrait être affichées dans un autre format que html (en pdf par exemple).

Pour utiliser des données dans des requêtes sql, il faut seulement éviter les injections sql en utilisant la méthode d'échappement des caractères sql réservés. Puisque tu utilises l'API Mysqli, tu dois utiliser la fonction mysqli_real_escape_string() sur tes variables avant de les utiliser dans une requête sql et utiliser htmlentities uniquement lors de l'affichage des variables en html.
http://php.net/manual/fr/mysqli.real-escape-string.php

Pense également à afficher le message d'erreur sql si ta requête ne s’exécute pas correctement, tu pourras plus facilement corriger les éventuelles erreurs :
if (!$res) {
    printf("Erreur : %s\n", mysqli_error($lien));
}
Bonne journée,