Problème modification base de donnée
Posté : 30 janv. 2014, 16:44
Bien le bonjour.
Je suis en train de créer un forum en php.
Cependant, j'ai créé plusieurs pages pour consulter des profils : Une pour consulter le profil d'un membre et une pour consulter le profil d'un groupe de membre. Dans les deux cas j'ai le même le problème. Quand l'action est 'consulter', tout fonctionne, les infos du membre ou du groupe d'affiche. Quand le cas est 'modifier', là aussi tout semble fonctionner, mon formulaire est complet avec les valeurs de la base de données en value.
Cependant, lorsque je clique sur le bouton submit, cela m'envoie vers une page blanche et ma base de donnée n'a pas été mise à jour.
Je ne vais vous montrer que le code de la page des profils car mon erreur doit être la même sur les deux pages.
Voici mon code sur la page voirprofil.php :
Cela fait plusieurs jours que je suis bloqué et votre aide me serait très précieuse.
Je suis en train de créer un forum en php.
Cependant, j'ai créé plusieurs pages pour consulter des profils : Une pour consulter le profil d'un membre et une pour consulter le profil d'un groupe de membre. Dans les deux cas j'ai le même le problème. Quand l'action est 'consulter', tout fonctionne, les infos du membre ou du groupe d'affiche. Quand le cas est 'modifier', là aussi tout semble fonctionner, mon formulaire est complet avec les valeurs de la base de données en value.
Cependant, lorsque je clique sur le bouton submit, cela m'envoie vers une page blanche et ma base de donnée n'a pas été mise à jour.
Je ne vais vous montrer que le code de la page des profils car mon erreur doit être la même sur les deux pages.
Voici mon code sur la page voirprofil.php :
<?php
session_start();
$titre="Profil";
include("includes/identifiants.php");
include("includes/debut.php");
include("includes/menu.php");
//On récupère la valeur de nos variables passées par URL
$action = isset($_GET['action'])?htmlspecialchars($_GET['action']):'consulter';
$membre = isset($_GET['m'])?(int) $_GET['m']:'';
?>
<?php
switch($action)
{
case "consulter":
if(isset($_GET['m']))
{
//On récupère les infos du membre
$query=$db->prepare('SELECT membre_pseudo, membre_avatar,
membre_email, membre_msn, membre_signature, membre_siteweb, membre_post,
membre_inscrit, membre_localisation, membre_id_guilde, guilde.guilde_id, guilde.guilde_nom
FROM forum_membres
LEFT JOIN guilde ON guilde.guilde_id = membre_id_guilde
WHERE membre_id=:membre
');
$query->bindValue(':membre',$membre, PDO::PARAM_INT);
$query->execute();
$data=$query->fetch();
//On affiche les infos sur le membre
echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> -->
profil de '.stripslashes(htmlspecialchars($data['membre_pseudo']));
echo'<h1>Profil de '.stripslashes(htmlspecialchars($data['membre_pseudo'])).'</h1>';
echo'<img src="./images/avatars/'.$data['membre_avatar'].'"
alt="Ce membre n a pas d avatar" />';
echo'
Guilde : <a href="./voirguilde.php?g='.$data['guilde_id'].'&action=consulter">
'.stripslashes(htmlspecialchars($data['guilde_nom'])).'</a>';
echo'<p><strong>Adresse E-Mail : </strong>
<a href="mailto:'.stripslashes($data['membre_email']).'">
'.stripslashes(htmlspecialchars($data['membre_email'])).'</a><br />';
echo'<strong>MSN Messenger : </strong>'.stripslashes(htmlspecialchars($data['membre_msn'])).'<br />';
echo'<strong>Site Web : </strong>
<a href="'.stripslashes($data['membre_siteweb']).'">'.stripslashes(htmlspecialchars($data['membre_siteweb'])).'</a>
<br /><br />';
echo'Ce membre est inscrit depuis le
<strong>'.date('d/m/Y',$data['membre_inscrit']).'</strong>
et a posté <strong>'.$data['membre_post'].'</strong> messages
<br /><br />';
echo'<strong>Localisation : </strong>'.stripslashes(htmlspecialchars($data['membre_localisation'])).'
</p>';
if (isset ($_SESSION['id']))
{
if ($membre == $_SESSION['id'])
{
echo'
<a href="./voirprofil.php?m='.$_SESSION['id'].'&action=modifier">
Modifier votre profil</a>';
}
}
}
else
{
echo'<p>Ce membre ne semble pas exister !</p>';
}
$query->CloseCursor();
break;
case "modifier":
if (empty($_POST['sent']))
{
//On commence par s'assurer que le membre est connecté
if ($id==0) erreur(ERR_IS_NO_CO);
//On prend les infos du membre
$query=$db->prepare('SELECT membre_pseudo, membre_email,
membre_siteweb, membre_signature, membre_msn, membre_localisation,
membre_avatar
FROM forum_membres WHERE membre_id=:id');
$query->bindValue(':id',$id,PDO::PARAM_INT);
$query->execute();
$data=$query->fetch();
echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> Modification du profil';
echo '<h1>Modifier son profil</h1>';
echo '<form method="post" action="voirprofil.php?action=modifier" enctype="multipart/form-data">
<fieldset><legend>Identifiants</legend>
Pseudo : <strong>'.stripslashes(htmlspecialchars($data['membre_pseudo'])).'</strong><br />
<label for="password">Nouveau mot de Passe :</label>
<input type="password" name="password" id="password" /><br />
<label for="confirm">Confirmer le mot de passe :</label>
<input type="password" name="confirm" id="confirm" />
</fieldset>
<fieldset><legend>Contacts</legend>
<label for="email">Votre adresse E_Mail :</label>
<input type="text" name="email" id="email"
value="'.stripslashes($data['membre_email']).'" /><br />
<label for="website">Votre site web :</label>
<input type="text" name="website" id="website"
value="'.stripslashes($data['membre_siteweb']).'" /><br />
</fieldset>
<fieldset><legend>Informations supplémentaires</legend>
<label for="localisation">Localisation :</label>
<input type="text" name="localisation" id="localisation"
value="'.stripslashes($data['membre_localisation']).'" /><br />
</fieldset>
<fieldset><legend>Profil sur le forum</legend>
<label for="avatar">Changer votre avatar :</label>
<input type="file" name="avatar" id="avatar" />
(Taille max : 10 ko)<br /><br />
<label><input type="checkbox" name="delete" value="Delete" />
Supprimer l avatar</label>
Avatar actuel :
<img src="./images/avatars/'.$data['membre_avatar'].'"
alt="pas d avatar" />
<br /><br />
<label for="signature">Signature :</label>
<textarea cols="40" rows="4" name="signature" id="signature">
'.stripslashes($data['membre_signature']).'</textarea>
</fieldset>
<p>
<input type="submit" value="Modifier son profil" />
<input type="hidden" id="sent" name="sent" value="1" />
</p></form>';
$query->CloseCursor();
}
else //Sinon on est dans la page de traitement
{
$mdp_erreur = NULL;
$email_erreur1 = NULL;
$email_erreur2 = NULL;
$signature_erreur = NULL;
$avatar_erreur = NULL;
$avatar_erreur1 = NULL;
$avatar_erreur2 = NULL;
$avatar_erreur3 = NULL;
$i = 0;
$temps = time();
$signature = $_POST['signature'];
$email = $_POST['email'];
$website = $_POST['website'];
$localisation = $_POST['localisation'];
$pass = md5($_POST['password']);
$confirm = md5($_POST['confirm']);
//Vérification du mdp
if ($pass != $confirm || empty($confirm) || empty($pass))
{
$mdp_erreur = "Votre mot de passe et votre confirmation diffèrent ou sont vides";
$i++;
}
//Vérification de l'adresse email
//Il faut que l'adresse email n'ait jamais été utilisée (sauf si elle n'a pas été modifiée)
//On récupére le mail
$query=$db->prepare('SELECT membre_email FROM forum_membres WHERE membre_id =:id');
$query->bindValue(':id',$id,PDO::PARAM_INT);
$query->execute();
$data=$query->fetch();
if (strtolower($data['membre_email']) != strtolower($email))
{
$query=$db->prepare('SELECT COUNT(*) AS nbr FROM forum_membres WHERE membre_email =:mail');
$query->bindValue(':mail',$email,PDO::PARAM_STR);
$query->execute();
$mail_free=($query->fetchColumn()==0)?1:0;
$query->CloseCursor();
if(!$mail_free)
{
$email_erreur1 = "Votre adresse email est déjà utilisé par un membre";
$i++;
}
//On vérifie la forme
if (!preg_match("#^[a-z0-9A-Z._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $email) || empty($email))
{
$email_erreur2 = "Votre nouvelle adresse E-Mail n'a pas un format valide";
$i++;
}
}
//Vérification de la signature
if (strlen($signature) > 200)
{
$signature_erreur = "Votre nouvelle signature est trop longue";
$i++;
}
//Vérification de l'avatar
if (!empty($_FILES['avatar']['size']))
{
$maxsize = 30072; //Poid de l'image
$maxwidth = 100; //Largeur de l'image
$maxheight = 100; //Longueur de l'image
//Liste des extensions valides
$extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png', 'bmp' );
if ($_FILES['avatar']['error'] > 0)
{
$avatar_erreur = "Erreur lors du tranfsert de l'avatar : ";
}
if ($_FILES['avatar']['size'] > $maxsize)
{
$i++;
$avatar_erreur1 = "Le fichier est trop gros :
(<strong>".$_FILES['avatar']['size']." Octets</strong>
contre <strong>".$maxsize." Octets</strong>)";
}
$image_sizes = getimagesize($_FILES['avatar']['tmp_name']);
if ($image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight)
{
$i++;
$avatar_erreur2 = "Image trop large ou trop longue :
(<strong>".$image_sizes[0]."x".$image_sizes[1]."</strong> contre
<strong>".$maxwidth."x".$maxheight."</strong>)";
}
$extension_upload = strtolower(substr( strrchr($_FILES['avatar']['name'], '.') ,1));
if (!in_array($extension_upload,$extensions_valides) )
{
$i++;
$avatar_erreur3 = "Extension de l'avatar incorrecte";
}
}
break;
?>
<?php
echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> Modification du profil';
echo '<h1>Modification d\'un profil</h1>';
if ($i == 0) // Si $i est vide, il n'y a pas d'erreur
{
if (!empty($_FILES['avatar']['size']))
{
$nomavatar=move_avatar($_FILES['avatar']);
$query=$db->prepare('UPDATE forum_membres
SET membre_avatar = :avatar
WHERE membre_id = :id');
$query->bindValue(':avatar',$nomavatar,PDO::PARAM_STR);
$query->bindValue(':id',$id,PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
}
if (isset($_POST['delete']))
{
$query=$db->prepare('UPDATE forum_membres
SET membre_avatar=0 WHERE membre_id = :id');
$query->bindValue(':id',$id,PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
}
echo'<h1>Modification terminée</h1>';
echo'<p>Votre profil a été modifié avec succès !</p>';
echo'<p>Cliquez <a href="./index.php">ici</a>
pour revenir à la page d accueil</p>';
//On modifie la table
$query=$db->prepare('UPDATE forum_membres
SET membre_mdp = :mdp, membre_email=:mail, membre_siteweb=:website,
membre_signature=:sign, membre_localisation=:loc
WHERE membre_id=:id');
$query->bindValue(':mdp',$pass,PDO::PARAM_INT);
$query->bindValue(':mail',$email,PDO::PARAM_STR);
$query->bindValue(':website',$website,PDO::PARAM_STR);
$query->bindValue(':sign',$signature,PDO::PARAM_STR);
$query->bindValue(':loc',$localisation,PDO::PARAM_STR);
$query->bindValue(':id',$id,PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
}
else
{
echo'<h1>Modification interrompue</h1>';
echo'<p>Une ou plusieurs erreurs se sont produites pendant la modification du profil</p>';
echo'<p>'.$i.' erreur(s)</p>';
echo'<p>'.$mdp_erreur.'</p>';
echo'<p>'.$email_erreur1.'</p>';
echo'<p>'.$email_erreur2.'</p>';
echo'<p>'.$signature_erreur.'</p>';
echo'<p>'.$avatar_erreur.'</p>';
echo'<p>'.$avatar_erreur1.'</p>';
echo'<p>'.$avatar_erreur2.'</p>';
echo'<p>'.$avatar_erreur3.'</p>';
echo'<p> Cliquez <a href="./voirprofil.php?action=modifier">ici</a> pour recommencer</p>';
}
} //Fin du else
break;
default;
echo'<p>Cette action est impossible</p>';
} //Fin du switch
?>
</div>
</body>
</html>
Voyez vous une erreur à un endroit?Cela fait plusieurs jours que je suis bloqué et votre aide me serait très précieuse.