Bonjour, j'ai un petit problème avec mon formulaire de modification, par exemple quand je vais sur inspecter l'element et que je modifie la value="" de mon age par value="55555dsqd" et que je valide avec le bouton, il va me le mettre dans la bdd.
Comment faire pour empécher une attaque de se genre ?
Voici mon script :
<form method="post" action="parametres.php?a=profil">
<?php
$req = $bdd->prepare("SELECT pseudo, prenom, nom, email,description, affiche, age FROM membre, login WHERE membre.id_login = :idsession AND membre.id_login = login.id");
$req->execute(array('idsession' => $_SESSION['id']));
while($data = $req->fetch())
{
?>
<div class="parametresbloc">
<div class="parametrespseudo">
<label for="pseudo">Votre pseudo </label>
</div>
<input type="text"disabled="disabled" value="<?php echo $data['pseudo'];?>" name="pseudo" />
</div>
<div class="parametresbloc">
<div class="parametresprenom">
<label for="prenom">Votre prenom *</label>
</div>
<input type="text" name="prenom" value="<?php echo $data['prenom'];?>" required />
</div>
<div class="parametresbloc">
<div class="parametresnom">
<label for="nom">Votre nom *</label>
</div>
<input type="text" name="nom" value="<?php echo $data['nom'];?>" required />
</div>
<div class="parametresbloc">
<div class="parametresemail">
<label for="email">Votre email </label>
</div>
<input type="text" name="email" disabled="disabled" value="<?php echo $data['email'];?>" required />
</div>
<div class="parametresbloc">
<div class="parametresdescription">
<label for="description">Votre description *</label>
</div>
<textarea name="description"><?php echo $data['description'];?></textarea>
</div>
<div class="parametresbloc">
<div class="parametresage">
<label for="age">Votre âge *</label>
</div>
<select name="age">
<?php
for ($i=13; $i<=100; $i=$i+1)
{
?>
<option value="<?php echo $i;?>"><?php echo $i;?></option>
<?php
}
?>
</select>
</div>
<div class="parametresbloc">
<div class="parametressubmit">
<input type="submit" class="btnturcplus" name="btninfo" value="Modifier"/>
</div>
</div>
<?php
}
?>
</form>
<?php
if(isset($_POST['btninfo']))
{
$prenom = ucfirst(htmlspecialchars($_POST['prenom']));
$nom = ucfirst(htmlspecialchars($_POST['nom']));
$description = htmlspecialchars($_POST['description']);
$age = htmlspecialchars($_POST['age']);
if($prenom == true && $nom == true && $description == true && $age == true )
{
if(strlen($prenom) < 10 && strlen($prenom) > 2 && strlen($nom) < 10 && strlen($nom) > 2 && strlen($description) < 300)
{
if(preg_match('~[A-Z][a-z]*(-[A-Z][a-z]?)?~', $prenom))
{
if(preg_match('~[A-Z][a-z]*(-[A-Z][a-z]?)?~', $nom))
{
$stmt = $bdd->prepare('UPDATE membre SET prenom = :prenom, nom = :nom, description=:description, age = :age WHERE id_login=:idsession ');
$stmt->execute(array(
':idsession' => $_SESSION['id'],
':prenom' => $prenom,
':nom' => $nom,
':description' => $description,
':age' => $age,
));
echo "Vos modifications ont été effectuées avec succès!";
}
else
{
echo "Votre nom ne doit pas contenir de caractères spéciaux.";
}
}
else
{
echo "Votre prenom ne doit pas contenir de caractères spéciaux.";
}
}
else
{
echo "Veuillez respecter le format requis.";
}
}
else
{
echo "Veuillez remplir tous les champs.";
}
}
?>
Je ne vois pas où est le soucis.
Il faut toujours vérifier que les données reçu correspondent à nos attentes, donc on vérifie que l'age est compris entre 13 et 100
Bonjour, oui mais ça va ne pas résoudre le problème imaginons j'entre une valeur 9999999999999 alors que le for va de 13 à 100 (pour l'age)
Ah ouais d'accord, donc un simple if($age >= 13 AND $age <=100) fait l'affaire, moi je pensais fallait mettre une sécurité etc.