Forum

nicodonat Messages postés 3 Date d'inscription vendredi 30 septembre 2011 Statut Membre Dernière intervention 4 octobre 2011 - 30 sept. 2011 à 16:49
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 - 3 oct. 2011 à 13:09
bonjour
j'ai suivi un tutoriel pour créer mon forum et j'ai un problème avec un code source.Normalement il permet aux gens sont inscrits de pouvoir modifier leur profil.mon script ne marche pas:
<?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
//On regarde la valeur de la variable $action
switch($action)
{
//Si c'est "consulter"
case "consulter":
//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
FROM forum_membres WHERE membre_id=:membre');
$query->bindValue(':membre',$membre, PDO::PARAM_INT);
$query->execute();
$data=$query->fetch();

//On affiche les infos sur le membre
echo ' Vous êtes ici : [./index.php Index du forum] -->
profil de '.stripslashes(htmlspecialchars($data['membre_pseudo']));
echo'Profil de '.stripslashes(htmlspecialchars($data['membre_pseudo'])).'
';

echo'';

echo' Adresse E-Mail :
[mailto:'.stripslashes($data['membre_email']).'
'.stripslashes(htmlspecialchars($data['membre_email'])).']
';

echo'MSN Messenger : '.stripslashes(htmlspecialchars($data['membre_msn'])).'
';

echo'Site Web :
['.stripslashes($data['membre_siteweb']).' '.stripslashes(htmlspecialchars($data['membre_siteweb'])).']


';

echo'Ce membre est inscrit depuis le
'.date('d/m/Y',$data['membre_inscrit']).'
et a posté '.$data['membre_post'].' messages


';
echo'Localisation : '.stripslashes(htmlspecialchars($data['membre_localisation'])).'


';
$query->CloseCursor();
break;
//Si on choisit de modifier son profil
case "modifier":
if (empty($_POST['sent'])) // Si on la variable est vide, on peut considérer qu'on est sur la page de formulaire
{
//On commence par s'assurer que le membre est connecté
if ($id == 0) erreur(ERR_IS_NOT_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 ' Vous êtes ici : [./index.php Index du forum] --> Modification du profil';
echo 'Modifier son profil
';

echo '<form method ="post" action= "voirprofil.php?action=modifier" enctype="multipart/form-data">


<fieldset><legend>Identifiants</legend>
Pseudo : '.stripslashes(htmlspecialchars($data['membre_pseudo'])).'

<label for ="password">Nouveau mot de Passe :</label>


<label for= "confirm">Confirmer le mot de passe :</label>

</fieldset>

<fieldset><legend>Contacts</legend>
<label for="email">Votre adresse E_Mail :</label>



<label for="msn">Votre adresse MSN :</label>



<label for="website">Votre site web :</label>


</fieldset>

<fieldset><legend>Informations supplémentaires</legend>
<label for="localisation">Localisation :</label>


</fieldset>

<fieldset><legend>Profil sur le forum</legend>
<label for="avatar">Changer votre avatar :</label>

(Taille max : 10 ko)


<label>
Supprimer l avatar</label>
Avatar actuel :





<label for="signature">Signature :</label>
<textarea cols="40" rows="4" name="signature" id="signature">
'.stripslashes($data['membre_signature']).'</textarea>


</fieldset>





</form>';
$query->CloseCursor();
}
else //Sinon on est dans la page de traitement
{
//Traitement (voir plus bas)
}
break;

default; //Si jamais c'est aucun de ceux-là c'est qu'il y a eu un problème :o
echo'Cette action est impossible

';

} //Fin du switch

else //Cas du traitement
{
//On déclare les variables

$mdp_erreur = NULL;
$email_erreur1 = NULL;
$email_erreur2 = NULL;
$msn_erreur = NULL;
$signature_erreur = NULL;
$avatar_erreur = NULL;
$avatar_erreur1 = NULL;
$avatar_erreur2 = NULL;
$avatar_erreur3 = NULL;

//Encore et toujours notre belle variable $i :p
$i = 0;
$temps = time();
$signature = $_POST['signature'];
$email = $_POST['email'];
$msn = $_POST['msn'];
$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 commence donc par récupérer 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))
{
//Il faut que l'adresse email n'ait jamais été utilisée
$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 maintenant
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 l'adresse MSN
if (!preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $msn) && !empty($msn))
{
$msn_erreur = "Votre nouvelle adresse MSN 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']))
{
//On définit les variables :
$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 :
( ".$_FILES['avatar']['size']." Octets
contre ".$maxsize." Octets)";
}

$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 :
( ".$image_sizes[0]."x".$image_sizes[1]." contre
".$maxwidth."x".$maxheight.")";
}

$extension_upload = strtolower(substr( strrchr($_FILES['avatar']['name'], '.') ,1));
if (!in_array($extension_upload,$extensions_valides) )
{
$i++;
$avatar_erreur3 = "Extension de l'avatar incorrecte";
}
}
echo ' Vous êtes ici : [./index.php Index du forum] --> Modification du profil';
echo 'Modification d\'un profil
';


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();
}

//Une nouveauté ici : on peut choisis de supprimer l'avatar
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'Modification terminée
';
echo'Votre profil a été modifié avec succès !

';
echo'Cliquez [./index.php ici]
pour revenir à la page d accueil

';

//On modifie la table

$query=$db->prepare('UPDATE forum_membres
SET membre_mdp = :mdp, membre_email=:mail, membre_msn=:msn, 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(':msn',$msn,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'Modification interrompue
';
echo'Une ou plusieurs erreurs se sont produites pendant la modification du profil

';
echo''.$i.' erreur(s)

';
echo''.$mdp_erreur.'

';
echo''.$email_erreur1.'

';
echo''.$email_erreur2.'

';
echo''.$msn_erreur.'

';
echo''.$signature_erreur.'

';
echo''.$avatar_erreur.'

';
echo''.$avatar_erreur1.'

';
echo''.$avatar_erreur2.'

';
echo''.$avatar_erreur3.'

';
echo' Cliquez [./voirprofil.php?action=modifier ici] pour recommencer

';
}
} //Fin du else
break;

default; //Si jamais c'est aucun de ceux là c'est qu'il y a eu un problème :o
echo'Cette action est impossible

';


//Fin du switch
?>

une erreur se déclenche à la fin du premier switch.La syntaxe n'est pas bonne car un "else" est déclaré de suite après,voici l'erreur affichée:


) Parse error: syntax error, unexpected T_ELSE in C:\wamp\www\forum\voirprofil.php on line 135

est ce que quelqu'un peut m'aider je pense qu'il faut déclarer un if avant,je ne sais pas quoi mettre dans ma variable
merci d'avance


nicodonat

3 réponses

galled Messages postés 41 Date d'inscription vendredi 30 octobre 2009 Statut Membre Dernière intervention 13 décembre 2012
30 sept. 2011 à 17:22
Bon déjà c'est bien y a des commentaires :)

Mais je ne suis pas les commentaire ta deux fin de switch mais une seul switch?

else{} tout seul ça n'existe pas il faut absolument qu'il y est un if avant

Si c'est un else pour la switch c'est default.

Ton problème c'est le else sans if.
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
3 oct. 2011 à 11:13
bonjour
les remarques de galled sont bonnes
j'ai remarqué un ; au lieu de : sur default ...
essaie



0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
3 oct. 2011 à 13:09
Salut,

Bon déjà c'est bien y a des commentaires :)

Non. Mettre des commentaire est une chose, mettre des commentaires utiles en est une autre. Clairement ici on a uniquement quelques commentaires (et encore pas tout le temps) sur le déroulement de quelques petits trucs ponctuellement, absolument rien qui nous dise comment le code est organisé, structuré. A ce sujet d'ailleurs, c'est carrément le bordel. L'auteur de cette "chose" vois son application comme une suite d'instructions et se borne à toutes les mettre les unes après les autres sans réfléchir. Je noterais également le mélange total de l'accès aux données, de la couche métier et de la présentation, ce qui est a bannir. Le mélange de html et de php est également un facteur aggravant qui nuit gravement à la compréhension, la maintenance et les améliorations futures.

Bref, non ce n'est pas bien du tout et pour le prouver il suffis de constater que l'on a un pavé monstrueusement long et indigeste. Il y a un très lourd travail d'apprentissage à effectuer. Ceci commence par le découpage du programmes en entités et au classement de ces entités dans des fichiers séparés. Il semble y avoir un semblant de début de structuration du code si j'en crois les includes au début du code, mais c'est très loin d'être suffisant. En tout cas, le tuto sur lequel ceci s'est basé me semble fort être un très mauvais tuto.

Je terminerais juste par une citation d'Edsger Dijkstra :
Les progrès ne seront possibles que si nous pouvons réfléchir sur les programmes sans les imaginer comme des morceaux de code exécutable.
0
Rejoignez-nous