bonjour à tous, j’aimerais un peu d’aide et conseil pour mieux refaire mon code, voilà comment j’ai procédé.

Page index :

<?php
session_start();
  require_once 'include/connect.php'; 
//selon le genre on include la page demandée
if (isset($_REQUEST'p'])){
    $p=$_REQUEST'p'];
    switch($p)
    {   
//Dossier Include
    case "contact":
    include("include/contact.php");
    break;
    case "inscription":
    include("include/register.php");
    break;
    case "se_connecter":
    include("include/se_connecter.php");
    break;
    }
}else {
include('entete.php');
echo'
    <div id="background_conteneur">
        <div id="conteneur_accueil">
            <div id="conteneur">
                <p>Mon site</p>
';
    include('carte_france/carte.php');
echo'   
            </div>
        </div>  
    </div>
';
}
?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Voila mon site</title>
</head>
<body>
<div id="bas_site">
    <div id="conteneur_bas_site">
        <div id="conteneur_bas_site1">
        <a>Petite description</a>
        </div>  
        <div id="conteneur_bas_site2">
            <a href="/apropos">A propos</a>
            <a href="/faq" >F.A.Q</a>   
            <a href="/partenaire">Nos partenaires</a>   
            <a href="/contact" >Contactez-nous</a>
        </div>
    </div>  
</div>  
</body>
</html>

Page entête :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Entete de mon site</title>
    <link REL='StyleSheet' HREF="CSS/style.css" TYPE="text/css">
    <script type="text/javascript" src="js/like.js"></script>
</head>
<body>
<div id="entete">
    <div id="head">
    <div id="menu">
<?php
echo" 
    <a href='/monprofil'>Mes infos</a>
";
        if(isset($_GET'as'])){
            echo"<b><a href='/sauvegardesp=1'><font color='orange'>Mes sauvegardes</a><font></b>";  
        }else{
            echo"<a href='/sauvegardesp=1'>Mes sauvegardes</a>";
        }
?>
        <a href="/inscription">S'inscrire</a>   
        <a href="/connexion">Se connecter</a>

        <a href="/">Accueil</a>
        </div>
        <div id='menu'>
            <p><a href='/deconnexion'>Se deconnecter<a></p>
        </div>
    </div>
</div>
</body>
</html>

Exemple d’une page (contact) :

<?php
if(!empty($_POST)){
    $nom = strip_tags($_POST'nom']) ;
    $email = strip_tags($_POST'email']) ;
    $objet = strip_tags($_POST'objet']) ;
    $message = strip_tags($_POST'message']) ;

$valid = true;
    if(empty($nom)){
        $valid=false;
        $erreurnom="Veuillez saisir un nom";
    }
    if(!preg_match("/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i",$email)){
        $valid=false;
        $erreuremail = "Votre email n'est pas valide";
    }
    if(empty($email)){
        $valid=false;
        $erreuremail="Vous n'avez pas rempli votre email";
    }
    if(empty($message)){
        $valid=false;
        $erreurmessage="Votre message est vide";
    }
    if(empty($objet)){
        $valid=false;
        $erreurobjet="Veuillez saisir un objet";
    }
//Si tous a été rempli correctement on envoi le mail
    if($valid){
        $_SESSION'contact'] = true ;
        $to = "contact@monsite.com";
        $sujet = stripslashes($objet);
        $header = "From: $nom <$email> \n";
        $header .= "Reply-To: $email";
        $message = stripslashes($message);
        if(@mail($to,$sujet,$message,$header)){
            $valid = "Votre message a bien été envoyé";
            unset($nom);
            unset($objet);
            unset($email);
            unset($message);
        }else{
            $error ="une erreur est survenue";
        }
    }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html>
<head>
<title>Contactez nous - Mon site</title>
    <link rel='StyleSheet' href="/CSS/style.css" type="text/css">
<style type="text/css">
#conteneur_principal a{ margin:0px 0px 0px 0px; color:#666666; font-size:12px; font-family:verdana; }
#conteneur__formulaire{ background-color:; height:390px; width:560px; margin:10px 50px 0 50px; }
#conteneur__formulaire label{ margin:10px 0px 0 0px; display:block; color:#797979; font-size:13px; font-family:verdana; }
#conteneur__formulaire input[type=text]{ background-color:#fbfbfb; border:1px solid #e0e0e0; height:26px; width:320px; margin:2px 0px 0 0px; padding:0 5px 0 5px;}
#conteneur__formulaire textarea{ border:1px solid #e0e0e0; background-color:#fbfbfb; height:120px; width:520px; margin:0px 0px 0 0px; padding:3px 5px 0 5px;}
#conteneur__formulaire input[type="submit"]{ outline: 1px solid #639929; border-top: 1px solid #afde7d; width:200px; height:24px; color:white; font-weight:bold; font-family:verdana; font-size:11px; background-color:#93cc55; border-left:none; border-right:none; border-bottom:none; cursor:pointer; padding:0px 2px 3px 2px ; margin:20px 28px 0px 0px; float:right; }
#conteneur__formulaire :hover[type="submit"]{ background-color:#7dc037; }
.bordure{ position:relative; float:left; height:17px; width:708px; background-color:#099dcd; margin:10px 0px 10px -30px; padding:6px; color:white; font-weight:bold; font-family:verdana; font-size:16px; }
.bordure:before{ content:""; position:absolute; left:0px; border-color:#FFF #077498 transparent #FFF; border-style:solid; border-width:0px 25px 20px 0px; height:0px; width:0px; display:block; margin:23px 0 0 0; }
</style>        
</head>
<body>
<?php include('entete.php');?>
<div id="background_conteneur">
    <div id="conteneur">
        <?php
            if (isset($error)){ echo " <div class='error'>$error</div>  "; }
            if (isset($valid)){ echo " <div class='valid'>$valid</div>  "; }
        ?>
    <div id="conteneur_principal">

<div class='bordure'>Nous contacter</div>   
    <div id="conteneur__formulaire">
        <form method="post" action="/contact">
            <br/>
            <?php
            if (isset($erreur)){ echo " <span class='message-ok'><p>$erreur</p></span>  "; }
            ?>
            <label for="nom">Votre nom:</label>
            <input type="text" maxlength="20" name="nom" id="nom" value="<?php if(isset($nom)) echo $nom ?>"/>
            <span class="error-message"><?php if(isset($erreurnom)) echo $erreurnom; ?></span>                                  

            <label for="email">Votre Email:</label>
            <input type="text" name="email" id="email" value="<?php if(isset($email)) echo $email ?>"/>
            <span class="error-message"><?php if(isset($erreuremail)) echo $erreuremail; ?></span>          

            <label for="objet">Objet du message:</label>
            <input type="text" maxlength="50" name="objet" id="objet" value="<?php if(isset($objet)) echo $objet ?>"/>
            <span class="error-message"><?php if(isset($erreurobjet)) echo $erreurobjet; ?></span>      

            <label for="message">Votre message:</label>
            <textarea name="message" id="message"><?php if(isset($message)) echo $message ?></textarea>
            <span class="error-message"><?php if(isset($erreurmessage)) echo $erreurmessage; ?></span>

            <input type="submit" value="Envoyer">           
        </form> 
    </div>  
    </div>      
</div>  
</div>
</div>  
</body>
</html>

Merci pour votre aide

18 réponses


Pourquoi veux-tu refaire ton code ? J'aimerai savoir quel est le problème ton site / un lien du site.

A+ ;)

moza2409
Auteur

Le site n'est pas encore en ligne, le probleme c'est qu'avec ce système j'obtiens plusieurs balises head, body, html, title... sur la meme page, donc je pense que pour le réferencement ce n'est pas top.

ah je comprends mieux :p
créé un fichier header.php là ou il y a

<html>
<head>
</head>
<body>

crée un fichier footer.php

</body>
</html>

ton fichier
index.php :

<?php

//Tableau des pages autorisées à l'include
$pagesOK'accueil'] = 'accueil.php';
$pagesOK'blabla1'] = 'blabla1.php';
$pagesOK'blabla2'] = 'blabla2.php';

//Page par defaut
$page = 'accueil';
//Si le $_GET'page'] est dans les keys du tableau $pagesOK
if(!empty($_GET'page']) && array_key_exists($_GET'page'], $pagesOK))
{
    //Remplace la valeur par defaut par celle de l'URL
    $page = $_GET'page'];
}

 include("include/header.php");
 include("include/menu.php");
 include("include/content.php");
 include("include/footer.php");
?>

dans menu.php

<ul>
<li><a href="index.php?page=accueil">Accueil</a></li>
<li><a href="index.php?page=blabla1">Mes projets</a></li>
<li><a href="index.php?page=blabla2">Galerie</a></li>
</ul>

dans content.php

<?php include($pagesOK$page]); ?>

Segmente ton code pour que rien ne se répète. :)

Bonne continuation

moza2409
Auteur

Merci je vais essayé et je te tiens au courant :)
Par contre pour la balise title, je voudrais que chaque page ai sa balise title, comment je dois faire ?

je mettrais une variable php... un truc comme ça :

if ($page == "accueil") {
$title="ma page d'accueil";
}

et après tu n'as plus qu'a mettre un echo dans ton title :

<title>
<?php
echo $title;
?>
</title>
moza2409
Auteur

et au niveau du réferencement il n'y aura pas de contrainte ?

if(empty($nom)){
        $valid=false;
        $erreurnom="Veuillez saisir un nom";
    }
    if(!preg_match("/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i",$email)){
        $valid=false;
        $erreuremail = "Votre email n'est pas valide";
    }
    if(empty($email)){
        $valid=false;
        $erreuremail="Vous n'avez pas rempli votre email";
    }
    if(empty($message)){
        $valid=false;
        $erreurmessage="Votre message est vide";
    }
    if(empty($objet)){
        $valid=false;
        $erreurobjet="Veuillez saisir un objet";
    }

Ici fait des elseif tu iras plus vite.

Je pense quetu peux aussi optimiser ici.

// 4 appels de fonctions
unset($nom);
unset($objet);
unset($email);
unset($message);

// Une appel suffit
unset($nom, $objet, $email, $message);

Dans la page de contact enlève les tag doctype, head et body.
Mets toujours un entête. Les includes devraient être que des scripts php à part le en-tête et le pied de page.

Utilise phpmailer ou une bibliothèque qui gère les mails afin de pouvoir éviter que tes mails vont dans la boîte à spam.
Et ce sera plus simple à manipuler.

Évite de faire if(isset($erreurnom)) dans ton formulaire.

Faire des ternaires du genre :
$erreurnom = (isset($erreurnom)) ? $erreurnom : "";

Et tu unset à la fin les 4 variables d'erreur.
Cela permettra une meilleur visibilité du code.

Les script de js de préférence doivent toujours être appeler à la fin.

moza2409
Auteur

Ok merci pour votre aide par contre pour attribuer un title à chaque page, je fais comment car si mon titre contient déjà plusieurs variables ?

exemple pour la page contact:
Si je veux afficher un titre en fonction d'une variable qui se trouve dans la page contact

A ce moment là, tu peux faire un semi-système vue-controller. Tu crée une page HTML simple.
Dans le body, tu fais un système de tag du genre : <<<<<<tag_contenu>>>>>> , pour le title, les feuille css, js et compagnie.

Tu fais ensuite un file_get_contents et tu remplace tes valeurs avec str_replace.
Par contre ce système, je le trouve un peu lourd. Mais il répond à ton besoin.

Sinon le plus simple est de faire tout ton traitement PHP d'abord et ensuite stocker ton titre dans une variable et afficher le HTML qu'au dernier moment.

moza2409
Auteur

J'ai fait tout mon traitement PHP d'abord mais le problème c'est que la balise title se trouve dans le head.php donc si je donne une variable à mon titre ca ne la reconnait pas car le PHP est après la page head et ca pour toutes les pages

tu n'as qu'a mettre les conditions au dessus en créant un fichier variable.php et l'inclure tout en haut... Non ?

moza2409
Auteur

Certain titre depende de requette sql,
exemple avec la page annonce ou la balise title depend du titre de l'annonce:

$id = ($_GET'id']); 
// Requêtes pour les details de l'annonce
    $req = ("SELECT * From annonce 
    LEFT JOIN users ON annonce.id_pseudo = users.pseudo
    LEFT JOIN type_annonce ON annonce.type_annonce = type_annonce.id
    LEFT JOIN type_annonceur ON annonce.vous_etes = type_annonceur.id   
    LEFT JOIN categorie ON annonce.id_categorie = categorie.id 
    WHERE id_annonce='$id'");
    $result = mysql_query($req, $cnx);
    $voir_annonce = mysql_fetch_assoc($result);
$t_annonce = $voir_annonce'titre_annonce'];
$t_cat = $voir_annonce'nom_categorie'];

Dans head.php

<?php
if ($page == "accueil") {$title="ma page d'accueil";}
if ($page == "annonce") {$title=$t_annonce $t_cat;}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html>
<head>
    <title><?php echo $title; ?></title>
    <link REL='StyleSheet' HREF="CSS/style.css" TYPE="text/css">    
</head>
<body>

Le problème c'est qu'il ne reconnait pas $t_annonce et $t_cat et je ne pense pas que je peux inclure la page annonce tout en haut ?

je ne vois pas d'autre moyen en php (car un php est côté serveur, il devrait y avoir un refresh pour pouvoir réinitialisé les var) à part peut etre la mise en cache... mais c'est un peu lourd pour récupérer juste deux mots.

donc tu initialises tes pageok
tu mets les condition title
puis le head

Après y a le choix du js mais je suis pas apte à t'aider =)

moza2409
Auteur

ok je vais essayé et une autre question par rapoort au feuille de style, sur mon site je les ai mit entre les balise

<style type="text/css"></style>

mais maintenent comment je dois faire puisque je ne peux pas mettre de balise head dans mes pages ?

pour index dans ton fichier header.php.

Après tu si ta page change réellement tu peut mettre un lien standard vers une autre page ou tu fera une construction du même type.

++

ps : j ai l impression que tu comprends pas ce que tu fais :/

moza2409
Auteur

Si j'ai bien compris, mais ce qui me gène c'est si je mets tout mon style dans le fichier header.php ca va faire beaucoup

Ben crée toi un bootstrap. Je pense que ce serait plus pratique.

Pour ton problème de titre tu peux le changer en jQuery (js) une fois la page chargé.
A ce moment la tu as bien le titre de la news que tu est en train de lire.

C'est pas super propre mais si tu ne veux pas revoir entièrement l'architecture de ton site ( utilisation de MVC ) je pense que c'est le meileur moyen.