nicodonat
Messages postés3Date d'inscriptionvendredi 30 septembre 2011StatutMembreDernière intervention 4 octobre 2011
-
30 sept. 2011 à 16:49
TychoBrahe
Messages postés1309Date d'inscriptionsamedi 31 janvier 2009StatutMembreDerniè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'])).'
';
';
$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
';
//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
TychoBrahe
Messages postés1309Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention 5 juin 201312 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.