8791 sujets

Développement web côté serveur, CMS

Bonjour/Bonsoir,

J'ai crée un site grâce au tuto de M@teo en xHTML/CSS/PHP/MySQL sur le Site du Zér0 (même si je n'ai aucune connaisance en PHP), depuis des mois et quelques semaines que j'y travaille, et j'en ai vu des problèmes qui arrivait, j'ai tout résolu grâce à des aides de forum ou d'amis plus expérimentés, mais là .. Je ne sais pas quoi faire.

De 1 :Mon formulaire de contact ne marche pas, je l'ai copier/coller (je sais que c'est pas bien Smiley confused ) donc je vous le donne :
<?php
// Dans la ligne qui suit, remplacer webmaster@domaine.tld par l'adresse email du webmaster, à laquelle les messages devront être envoyés
$email_webmaster = "anis-mikou@hotmail.fr";
// === traitement des données du formulaire ============================================================
if (isset($_POST["email_expediteur"]) && isset($_POST["titre"]) && isset($_POST["message"])){
// le formulaire a été soumis
        $etat = "erreur";
// Valeur par défaut. Prendra la valeur "ok" s'il n'y a pas d'erreur
// --- mise en forme des champs saisis dans le formulaire lors de sa soumission ---

                 $_POST["email_expediteur"]=trim(stripslashes($_POST["email_expediteur"]));


                 $_POST["titre"]=trim(stripslashes($_POST["titre"]));
        
        
                 $_POST["message"]=trim(stripslashes($_POST["message"]));
        
        // --- test de la validité des champs saisis ---
        if (empty($_POST["email_expediteur"])) {
// il manque l'email de l'expéditeur
                 $erreur="Saisissez votre adresse email...";
        }
        elseif (!preg_match("#^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$#",$_POST["email_expediteur"])){
// l'adresse e-mail n'est pas valide
                 $erreur="Votre adresse e-mail n'est pas valide...";
        }
        elseif (empty($_POST["message"])) {
// le message est vide
                 $erreur="Saisissez un message...";
        }
        else {
// --- tous les champs sont correctement remplis: on pourra envoyer le mail ---
                 $etat="ok";
        }
}
else {
// --- le formulaire n'a pas été soumis ---
           $etat="attente";
}
// === fin de traitement des données du formulaire =======================================================
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>The Contaminated</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
       <link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
	   <link rel="icon" type="image/gif" href="images/animated_favicon1.gif" />
	   <meta name="keywords" content="Anis, Mikou, Mikou Anis, Anis Mikou, Aniss, Aniss Mikou, Mikou Aniss, Contaminated, Contaminated Blog, The Contaminated, Tutoriaux, Tutoriaux pour GIMP, Tutos Gimp, Gimp, GIMP, Tutos gimp, gimp tutos, tutoriels gimp, tutoriels pour GIMP, tutoriels pour gimp, portfolio contaminated, contaminated portfolio" />
	   <img alt="Website counter" hspace="0" vspace="0" border="0" src="http://fully-sick-counters.net/2554344-B7891D0368599C21953268E97CD55C49/counter.img?theme=06&digits=10&siteId=3"/>
       <noscript><br/><a href="http://www.luxurycar-comparison.com">Free Counter</a><br>The following text will not be seen after you upload your website, please keep it in order to retain your counter functionality <br> <a href="http://www.play-roulette-online.info" target="_blank">american roulette tips</a></noscript>
   </head>
   <body>
        <div id="haut-de-page">
			<img src="images/commun/banniere.jpg" alt="banniere" >
	    </div>
	    <div id="menu">
			<ul id="menu">
				<li><a href="index.php" >Accueil</a></li>
				<li><a href="articles.php" >Articles</a></li>
				<li><a href="tutoriaux.php">Tutoriaux</a></li>
				<li><a href="portfolio.php">Créations</a></li>
				<li><a href="moi.php">A propos</a></li>
				<li><a href="contact.php">Contact</a></li>
				<li><a href="stats.php">Statistiques</a></li>
				<li><a href="livre_dor.php">Livre d'or</a></li>
				<li><a href="plan_du_site.php">Plan du site</a></li>
		    </ul>
		</div>
		<div id="bloc-gauche-facebook">
<iframe src="http://www.facebook.com/plugins/likebox.php?id=125752540789008&amp;width=292&amp;connections=0&amp;stream=true&amp;header=false&amp;height=395" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:292px; height:395px;" allowTransparency="true"></iframe>
		<div id="minichat">
		<style type="text/css">
		form
		{
        text-align:center;
		}
		</style>
		<form action="minichat_post.php" method="post">
        <p>
        <label for="pseudo">Pseudo</label> : <input type="text" name="pseudo" id="pseudo" /><br />
        <label for="message">Message</label> :  <input type="text" name="message" id="message" /><br />

        <input type="submit" value="Envoyer" />
		</p>
		</form>


		<?php
		// Connexion à la base de données
		try
		{
			$bdd = new PDO('mysql:host=localhost;dbname=site_contaminated', 'contaminated', 'Nq312pmD');
		}
		catch(Exception $e)
		{
			die('Erreur : '.$e->getMessage());
		}

		// Récupération des 10 derniers messages
		$reponse = $bdd->query('SELECT pseudo, message FROM minichat ORDER BY ID DESC LIMIT 0, 10');

		// Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
		while ($donnees = $reponse->fetch())
		{
			echo '<p><strong>' . htmlspecialchars($donnees['pseudo']) . '</strong> : ' . htmlspecialchars($donnees['message']) . '</p>';
		}

		$reponse->closeCursor();

		?>
		</div>
		</div>
		<div id="contenu">
<h1>Contacter le webmaster</h1>
<?php
if ($etat!="ok"){// le formulaire n'a pas été soumis, ou soumis avec une erreur
         if ($etat=="erreur"){
//le formulaire a été soumis avec une erreur
                         echo "<p><strong>".$erreur."</strong></p>\n";
// afficher le message d'erreur
         }
?>
        <form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
        <p><label for="email_expediteur">Votre adresse e-mail (obligatoire):</label><br />
        <input type="text" size="40" name="email_expediteur" id="email_expediteur" value="<?php
        if (!empty($_POST["email_expediteur"])) {
// l'adresse email de l'expéditeur a été saisie: la réafficher
                echo htmlspecialchars($_POST["email_expediteur"],ENT_QUOTES);
        }
        ?>" />
        </p>
        <p><label for="titre">Titre de message (facultatif):</label><br />
        <input type="text" size="40" name="titre" id="titre" value="<?php
        if (!empty($_POST["titre"])) {
// le titre du message a été saisi: le réafficher
                echo htmlspecialchars($_POST["titre"],ENT_QUOTES);
        }
        ?>" />
        </p>
        <p><label for="message">Message (obligatoire):</label><br />
        <textarea name="message" id="message" cols="40" rows="5"><?php
        if (isset($_POST["message"])) {
// le message a été saisi: le réafficher
                echo htmlspecialchars($_POST["message"],ENT_QUOTES);
        }
        ?></textarea>
        </p>
        <p><input type="submit" name="envoyer" value="Envoyer" />
        </p>
        </form>
<?php
}
else {
// le formulaire a été soumis sans erreur, on envoie le mail
        $entete = "From: ".$_POST["email_expediteur"]." <".$_POST["email_expediteur"].">\n";
        $entete .= "MIME-Version: 1.0";
        if (mail($email_webmaster,$_POST["titre"],$_POST["message"],$entete)){
// mail envoyé
                echo "Votre message a été envoyé.<br />\n";
                echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Envoyer un autre message...</a>\n";
        }
        else {
// erreur lors de l'envoi du mail
                echo "Un problème s'est produit lors de l'envoi du message.\n";
                echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Réessayez...</a>\n";
        }
}
?>
</div>
       <div id="pied_de_page">
			<p>Copyright "Tout pourri Corporation" 2009, tous droits reserves</p>
		</div>

   </body>
</html>


De 2 : Mon design est très bien sous Firefox, mais il ne marche pas sous IE (voici le lien de mon site

De 3 : Je voudrais créer mon forum, sans utiliser les forums tout fait, j'ai aussi préféré créer mon forum car il sera plus personnalisable selon mes envie et selon MES templates !
Pour ceci j'ai trouvé ce tutoriel pour m'aider (même si je ne suis pas encore lancé dans la lecture ! ). Je sais que phpbb est installable sur un site mais c'est trop compliqué à installer !


De 4 : Je ne sais pas comment faire pour que le footer se positionne lui même en fonction de la hauteur du minichat en dessous de celui-ci.

De 5 : J'ai trouvé un bon tutoriel qui explique comment faire les statistiques de son site soi-même en utilisant du PHP et une base de données, j'ai tout arrangé (création des dossiers/fichiers, créations des tables) mais, quand je lance la page avec les fichiers nécessaires avec mon logiciel de transfert FTP(FileZilla) et que je visite la page sur mon navigateur.. Je vois ceci :
( ! ) Parse error: syntax error, unexpected T_STRING in /var/www/hosting/contaminated/public/stats.php on line 51
Je vous lance le code encore une fois copié/collé (mais j'ai lu le tutoriel donc je connais le fonctionnement du code ! ) :

<?php
// Connexion à la base de données
		try
		{
			$bdd = new PDO('mysql:host=localhost;dbname=site_contaminated', 'contaminated', 'Nq312pmD');
		}
		catch(Exception $e)
		{
			die('Erreur : '.$e->getMessage());
		}
//------------------------------------------Nombre de visiteurs au total--------------------------------------------
// Incrémentation 
		$nb_visites = file_get_contents('data/pagesvues.txt');
		$nb_visites++;
		file_put_contents('data/pagesvues.txt', $nb_visites);
		echo 'Nombre de pages vues : <strong>' . $nb_visites . '</strong><br/>';
// ------------------------------------------Nombre de visiteurs par jour-------------------------------------------
//ETAPE 1 - Affichage du nombre de visites d'aujourd'hui
	$retour_count = mysqli_query($connexion, 'SELECT COUNT(*) AS nbre_entrees FROM visites_jour WHERE date=CURRENT_DATE()');//On compte le nombre d'entrées pour aujourd'hui
	$donnees_count = mysqli_fetch_assoc($retour_count); //Fetch-array
	echo 'Pages vues aujourd\'hui : <strong>'; // On affiche tout de suite pour pas le retaper 2 fois après
	
        if ($donnees_count['nbre_entrees'] == 0) //Si la date d'aujourd'hui n'a pas encore été enregistrée (première visite de la journée)
	{
		mysqli_query($connexion, 'INSERT INTO visites_jour(visites, date) VALUES (1, CURRENT_DATE());'); //On rentre la date d'aujourd'hui et on marque 1 comme nombre de visites.
		echo '1'; //On affiche une visite car c'est la première visite de la journée
	} else { //Si la date a déjà été enregistrée
		$retour = mysqli_query($connexion, 'SELECT visites FROM visites_jour WHERE date=CURRENT_DATE()'); //On sélectionne l'entrée qui correspond à notre date
		$donnees = mysqli_fetch_assoc($retour);
		$visites = $donnees['visites'] + 1; //Incrémentation du nombre de visites
		mysqli_query($connexion, 'UPDATE visites_jour SET visites = visites + 1 WHERE date=CURRENT_DATE()'); //Update dans la base de données
		echo $visites; //Enfin, on affiche le nombre de visites d'aujourd'hui !
	}
	echo '</strong></br/>';

//ETAPE 2 - Record des connectés par jour
	
	$retour_max = mysqli_query($connexion, 'SELECT visites, date FROM visites_jour ORDER BY visites DESC LIMIT 0, 1'); //On sélectionne l'entrée qui a le nombre visite le plus important
	$donnees_max = mysqli_fetch_assoc($retour_max);
	echo 'Record : <strong>' . $donnees_max['visites'] . '</strong> établi le <strong>' . $donnees_max['date'] . '</strong><br/>'; //On l'affiche ainsi que la date à laquelle le record a été établi

//ETAPE 3 - Moyenne du nombre de visites par jour
	$total_visites = 0; //Nombre de visites
    /*(pour éviter les bugs on ne prendra pas le nombre du premier exercice, 
	mais celui-ci reste utile pour être affiché sur toutes les pages car il est plus rapide, 
	contrairement à $total_visites dont on ne se servira que pour la page de stats)*/
	
	$total_jours = 0;//Nombre de jours enregistrés dans la base

        $total_visites = mysqli_fetch_assoc(mysqli_query($connexion, 'SELECT SUM(visites) FROM visites_jour AS total_visites'));
	$total_visites = $total visites['total visites'];

	$total_jours = mysqli_fetch_assoc(mysqli_query($connexion, 'SELECT COUNT(*) FROM visites_jour AS total_jours'));
        $total_jours = $total_jours['total_jours'];

	$moyenne = $total_visites/$total_jours; //on fait la moyenne
	echo 'Moyenne : <strong>' . $moyenne . '</strong> visiteurs par jour<br/>'; // On affiche ! Terminé !!!
//-----------------------------------Affichage du nombre de visiteurs connectés-------------------------------------
//On prend l'adresse de la page à laquelle on enlève le \ du début (1er caractère) :
$page = substr($_SERVER['PHP_SELF'], 1);
// On stocke dans une variable le timestamp qu'il était il y a 5 minutes :
$timestamp_5min = time() - (60 * 5); // 60 * 5 = nombre de secondes écoulées en 5 minutes
//On commence par virer les entrées trop vieilles (+ de 5 minutes)
mysqli_query($connexion, 'DELETE FROM connectes WHERE timestamp < ' . $timestamp_5min);

$retour = mysqli_query($connexion, 'SELECT COUNT(*) AS nb_connectes FROM connectes WHERE ip=\'' . ip2long($_SERVER['REMOTE_ADDR']) . '\'');
$donnees = mysqli_fetch_assoc($retour); //On regarde si le visiteur est déjà dans la table

if ($donnees['nb_connectes'] == 0) // Si il n'y est pas, on l'ajoute
{
    mysqli_query($connexion, 'INSERT INTO connectes(ip, timestamp, page) VALUES(\'' . ip2long($_SERVER['REMOTE_ADDR']) . '\', NOW()), \'' . $page . '\'');
}
else // Sinon, on remet le décompte de 5 minutes à 0
{
    mysqli_query($connexion, 'UPDATE connectes SET timestamp=NOW(), page=\'' . $page . '\' WHERE ip=\'' . ip2long($_SERVER['REMOTE_ADDR']) . '\'');
}

//Enfin, on calcule le nombre total d'entrées puis on l'affiche !
$retour = mysqli_query($connexion, 'SELECT COUNT(*) AS nb_connectes FROM connectes');
$donnees = mysqli_fetch_assoc($retour);

$visiteurs_connectes = $donnees['nb_connectes'];
// Affichage
echo 'Visiteurs connectés : <strong>' . $donnees['nb_connectes'] . '</strong><br/>';
//------------------------------------Affichage du record de connectés----------------------------------------------
$f_records = fopen('records.txt', 'r+'); //On ouvre le fichier
$dernierRecord = fgets($f_records); //On prend sa première ligne
$dernierRecord = explode(' ', $dernierRecord); //Je vous avais dit de regarder la fonction explode !
//Elle va permettre de séparer notre fichier en 2 parties :
//Le record (0) dans $dernierRecord[0] et la date (0/0/0) dans $dernierRecord[1]
echo 'Record du nombre de connectés : <strong>'; //On le marque tout de suite
//Ici on va avoir besoin de la variable $visiteurs_connectes de l'exercice précédent
if ($visiteurs_connectes > $dernierRecord[0]) //Si le nombre de connecté est plus important que le record actuel
{
	rewind($f_records); //On "rebobine " le fichier
	$ligne = $visiteurs_connectes . ' ' . date('d/m/Y'); 
	fwrite($f_records, $ligne); //On écrit la ligne sous la forme fixée au départ
	echo $visiteurs_connectes . '</strong> établi le <strong>' . date('d/m/Y');
} else { //sinon, on affiche le record du fichier.
	echo $dernierRecord[0] . '</strong> établi le <strong>' . $dernierRecord[1];
}

// On ferme la balise puis le fichier
echo '</strong><br/>'; 
fclose($f_records); 
//-------------------------------------------Affuences et heure de pointe-------------------------------------------
// Enregistrement
$heure = date ('H');
$retour_afflu = mysqli_query($connexion, 'SELECT COUNT(*) AS maintenant FROM affluence WHERE date = CURRENT_DATE() AND heure = ' . $heure);
$donnees_afflu = mysqli_fetch_assoc($retour_afflu);
if ($donnees_afflu['maintenant'] == 0) //Si l'heure n'a pas encore été enregistrée
{
	mysqli_query($connexion, 'INSERT INTO affluence(heure, date, visites) VALUES (' . $heure . ', CURRENT_DATE(), 1);'); //On rentre la date et l'heure et on marque 1 comme nombre de visites.
} else {
	mysqli_query($connexion, 'UPDATE affluence SET visites = visites + 1 WHERE date = CURRENT_DATE() AND heure = ' .$heure); //On rentre l'heure et la date d'aujourd'hui et on marque 1 comme nombre de visites.
}
// Affichage
echo '<table>';

echo '<tr>';
for ($i = 0; $i < 23; $i++)
{
	echo '<td><strong>' . $i . 'h</strong></td>';
}
echo '</tr>';

echo '<tr>';
$req = mysqli_query($connexion, "SELECT SUM(visites) AS nb_visites FROM affluence WHERE date != CURRENT_DATE() GROUP BY heure ORDER BY heure ASC");
while($dat = mysqli_fetch_assoc($req))
   echo '<td>' . $dat['nb_visites'] . '</td>';

echo '</tr>';
echo '</table>';

?>



Voila les problèmes que j'ai rencontré et que je n'arrive pas à résoudre, je ne lancerai PAS mes codes sources sur le forum, veuillez m'envoyez un MP ! Smiley smile
Voici encore une fois le lien de mon site ! Smiley smile

Merci d'avance ! Smiley smile

Modifié par Contaminated (19 Jun 2010 - 22:10)
Bonjour,

Alors rapidement, déjà ca serait pas mal que tu te focalises sur un problème à la fois, dire que rien ne marche et attendre qu'on t'aide à tout faire fonctionner, ca risque d'être très difficile pour toi d'avoir des réponses constructives.

Ensuite, tu dis n'avoir aucune connaissance en php. Il faudrait peut être commencer par là... Tu parles du site du zéro, ils ont d'excellents tutoriels pour apprendre php (il me semble). Utiliser des solutions qu'on te donnerait sans les comprendre, ca ne sert pas à grand chose... et tu seras à nouveau bloqué dès que tu voudras faire une nouvelle chose.

Point suivant, "je ne lancerai PAS mes codes sources sur le forum, veuillez m'envoyez un MP !". Alors là, je crois que personne ne va vouloir t'aider si tu ne veux pas y mettre un peu de toi même. D'autant que tu le dis toi même, tes sources sont des copié coller de tutoriels. Je ne vois pas en quoi cela t'empêche donc de placer des morceaux de codes ici.

Donc sans informations supplémentaires sur ce que tu as déjà réalisé, et en balançant tous tes problèmes en une fois, pour (tenter de) répondre à tes questions, ça risque d'être assez
rigolo.

Néanmoins...

Question 1 :
Si tu n'as que ce formulaire, ce n'est pas étonnant que tu ne reçoives pas de mail. Il faut que le serveur utilise les résultats du formulaire pour envoyer un mail. PHP sera tout à fait approprié. D'autant que, à ce qu'on peut voir, les données du formulaire sont envoyées vers "&#65533;", dont je doute que ca corresponde à une page.

Question 2 :
De prime abord, je ne dirais pas que ton code donne très bien sous firefox étant donné les nombreuses erreurs apparaissant (des balises script apparentes au milieu de ton pseudo "chat", le même chat qui déborde sur le footer, des blocs styles css en plein milieu de ton code html, un menu pas franchement réussi,...). Il faudra commencer par réorganiser tout cela pour y voir plus clair et tenter de résoudre les problèmes pour IE, mais on devrait y arriver.

Question 3 :
a écrit :
j'ai aussi préféré créer mon forum car il sera plus personnalisable selon mes envie et selon MES templates ! Je sais que phpbb est installable sur un site mais c'est trop compliqué à installer !

Si tu n'as aucune base en PHP, tu peux oublier la création de ton propre forum. D'autant que phpbb est très facilement installable, et surtout beaucoup plus que d'en coder un nouveau toi même. Au passage, phpbb est infiniment personnalisable (il existe de très très (très) nombreux plugins en tous genres pour pratiquement tout faire; il existe un nombre au moins aussi important de templates)

Question 4 :
J'en parlais justement au point 2 Smiley biggrin . L'utilisation de l'attribut css "clear" devrait solutionner le problème.

Question 5 :
Au vu de l'erreur retournée, tu as du mal faire ton copier coller ! (typiquement je dirais qu'il manque un ";" quelque part)

Voilà voilà, bonne chance pour la suite, mon conseil serait donc de commencer par créer un sujet à la fois pour résoudre un à un tes différents problèmes (à commencer par le point 2 et mes remarques le concernant).

Bonne continuation
Salut,

J'ai décidé d'arrêter cette version, j'ai visé beaucoup trop haut, je n'ai pas les compétences Smiley ohwell .
Donc je suis entrain de faire la version 4, avec encore une fois les statistiques (ce qui fait que j'attends toujours vos réponses pour ce problème là) et le formulaire de contact (idem). J'attends aussi des réponses à mes questions sur d'autres forums, je pourrais grâce à celle-ci finaliser la version 4 qui sera, en grande partie, réalisée par moi. J'utiliserais encore des codes copiés/collés en attendant d'arriver à faire un vrai scrpit PHP moi-même (dans assez longtemps car je suis le tuto du Site du Zér0 qui est assez long !). Je travaille encore en localhost et quand j'aurais fini j'uploaderais sur mon serveur FTP et je reposterais pour que vous me dites ce que vous en pensez ! Smiley smile

Voilà Voilà ! Merci quand même pour vos réponses ! Smiley smile