[RESOLU] probleme zone de commentaire

Eléphanteau du PHP | 10 Messages

27 sept. 2012, 20:41

sa marche toujours pas :s quand on resou un probleme un autre revien de suite le script donne mtn sa :

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="style.css" />
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/tru ... "></script>
<![endif]-->
<link rel="shortcut icon" href="icone.ico" type="image/x-icon"/>
<link rel="icon" href="icone.ico" type="image/x-icon"/>
<title>Commentaires</title>
</head>
<style type="text/css">
form, .pages
{
text-align:center;
}
</style>
</head>
<body>

<form method="post" action="livre_or.php">
<p>Laissez vos commentaires ici :)</p>
<p>
Pseudo (utilisez le meme qu'en jeu pour vous faire reconnaitre) :</br> <input name="pseudo" /><br />
commentaires :<br />
<textarea name="message" rows="8" cols="35"></textarea><br />
<input type="submit" value="Poster" />
</p>
</form>

<p class="pages">

<?php

mysql_connect("sql101.byethost14.com", "b14_11388339", "Mot_de_passe");
mysql_select_db("livre_or");
$connect_ok =mysql_connect("sql101.byethost14.com", "b14_11388339", "Mot_de_passe");
if ($connect_ok === false)
{
print "problème de connexon";
exit;
}
if (isset($_POST['pseudo']) AND isset($_POST['message']))
{
$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
$message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
$message = nl2br($message);

mysql_query("INSERT INTO livre_or VALUES('', '" . $pseudo . "', '" . $message . "')");
}




$nombreDeMessagesParPage = 20;
//$retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM livre_or');
//plutôt:
$requete = "SELECT COUNT(*) AS nb_messages FROM livre_or";
$resultat = mysql_query($requete);
if ($resultat === false)
{
//il y a un problème dans la requête
}
else
{
$donnees = mysql_fetch_array($retour);
$totalDesMessages = $donnees['nb_messages'];
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
}


echo 'Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
echo '<a href="livre_or.php?page=' . $i . '">' . $i . '</a> ';
}


//ajoute
print_r($_GET);
//à défaut de résoudre, ça explique


if (isset($_GET['page']))
{
$page = $_GET['page'];
}
else
{
$page = 1;
}


$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;

$reponse = mysql_query('SELECT * FROM livre_or ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);

while ($donnees = mysql_query ($reponse))
{
echo '<p><strong>' . $donnees['pseudo'] . '</strong> a ecrit :<br />' . $donnees['message'] . '</p>';
}

mysql_close();
?>

</body>
</html>


et sur mon livre d'or a coter de 'page : ' est écrit Array () mais plus de signalement de bug sur la page a part sa et quand j'envoi un commentaire pour tester sa marche toujours pas .

Mammouth du PHP | 2278 Messages

27 sept. 2012, 21:18

Non, ce n'est pas un nouveau problème, c'est simplement la visualisation du problème que pose cette partie:
quand à print_r($_GET); il répond array(), ça veut simplement dire que le tableau $_GET est vide.
Parce que tes
echo '<a href="livre_or.php?page=' . $i . '">' . $i . '</a> ';
ne modifient en rien la variable $_GET;
Je le savais en préconisant ce print_r()....;
Explication sommaire tirée de la doc php :(http://php.net/manual/fr/reserved.variables.get.php)
I
soit le script example.com:
<?php
echo 'Bonjour ' . htmlspecialchars($_GET["name"]) . '!';
?>
si on l'appelle par un truc dans le genre de::
http://example.com/?name=Yannick
il donnera:
Bonjour Yannick !

Donc ça ne peut pas fonctionner dans ton cas.

Mais il existe des formulaires dans le genre de
print  "Page : 
<form method = 'post' action ='livre_or.php'>";
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
print "<input type = 'radio' name = 'page_voulue' value = '$i'><br />";
}
print "<button type= 'submit'>Choix fait</button>
</form>"
qui ne permet qu'un seul choix à la fois et que l'on récupère par $var = isset($_POST['page_voulue']) ? ($_POST['page_voulue']: "" ;
Il existe au moins une autre solution avec <un <select>... plus joli au niveau de la présentation et qui permet, selon la programmation un ou plusieurs choix.
En mettant method='post', les valeurs ne passent pas par la ligne où sont les URL, en mettant method = 'get', les valeurs passent par la ligne des URL. On admet en général que post est plus solide que get.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 10 Messages

27 sept. 2012, 22:20

Merci de toute tes réponse sirakawa, malgré ton aide je n'arrive en rien a faire ce que je veut :( il me reste plus que 3 options soit j'arrête ce projet de livre d'or soit je change d'hebergeur et j'en trouve un gratuit avec cgi-bin et j'installe un livre d'or tout fait (bien que c'est loin de ce que j'ai envi de faire) je voudrait pouvoir le faire seul mais j'ai pas suffisament d'expérience, soit 3 eme option je t'implore a genou de modifier mon script de façon a ce que mon livre d'or fonctionne :$

ViPHP
AB
ViPHP | 5818 Messages

28 sept. 2012, 03:56

Quand on est débutant, ou qu'il y a de gros problèmes, faut séparer les problèmes et faire les choses par étapes pour pouvoir avancer.
Dans une page séparée tu fais d'abord des requêtes pour voir si elles fonctionnent. Quand ça marche tu continue en faisant un formulaire, tu fais des tests pour le récupérer et ensuite tu alimente ta base de donnée avec le formulaire, etc.

Et puis bon un livre d'or, si tu veux qu'il ne soit pas trop spammé, il faudra prévoir un chapta... Pour dire que tu n'es pas au bout de tes peines. Si php t'intéresse et que tu veux progresser dans la programmation, continues c'est un bon exercice, mais si c'est juste en passant tu aurais plus intérêt à en prendre un tout fait.

Mammouth du PHP | 2278 Messages

28 sept. 2012, 08:41

I Je n'avais pas pris garde à une confusion:
Quand on utilise mysql
mysql_connect() sert à se connecter au serveur mysql dans lequel il existe une ou plusieurs bases de données auxquelles on accède par :
mysql_select_db()
Et ce sont ces bases de données qui contiennent les tables.
========================================================================================================
La syntaxe que tu utilises suppose que tu as une base de données livre_or contenant une table livre_or.
=========================================================================================================

Cependant, il est conseillé de préférer mysqli ou pdo
Peu familier avec pdo, j'ai donc adapté ton script à mysqli.
Tester ce qui suit en modifiant juste les messages et la présentation jusqu'à ce que ça fonctionne aussi bien en local que chez l'hébergeur
jusqu'à être sûr de toi. Après, on verra la consultation.
Chez l'hébergeur, ça m'étonnerait que le user soit 'root'

Ce qui donne cette joyeuse élucubration:
<?php
	// billets est la base de données qui me sert pour les tests; elle contient une table livre_or
	$connect_ok = mysqli_connect("localhost", "utilisateur", "mot_de_passe", "billets");
	
	if ($connect_ok === false)
	{
		print "erreur de connexion".mysqli_connect_error();
		exit;
	}

//mysql_select_db("billets");

if (isset($_POST['pseudo']) AND isset($_POST['message']))
{
$pseudo = mysqli_real_escape_string($connect_ok, htmlspecialchars($_POST['pseudo']));
$message = mysqli_real_escape_string($connect_ok, htmlspecialchars($_POST['message']));
$message = nl2br($message);

	$requete = "INSERT INTO livre_or SET `pseudo` = '$pseudo', `message` = '$message'";
	$resultat = mysqli_query ($connect_ok, $requete);
	if ($resultat === true)
	{
		print "commentaire enregistré";
	}
	else
	{
		print "problème d'enregistrement".mysqli_error($connect_ok);
	}
}	
?>
II Conception de la base de données:
Sauf si n'importe qui peut ajouter un commentaire, il vaudrait mieux avoir :
une table utilisateurs avec CHARACTER SET utf8 COLLATE utf8_bin);
id_utilisateur integer, auto-increment, clef primaire
pseudo : text
une table livre_or
id_commentaire integer auto-increment clef primaire
id_utilisateur recopié depuis la table utilisateur
message : pris depuis le formulaire.

On ne se contenterait pas alors de vérifier que pseudo et message ne sont pas vides. On testerait si le pseudo est présent dans la table utilisateurs.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 10 Messages

28 sept. 2012, 15:28

Merci a tous pour vos réponse, je vien d'essayer ton script sirakawa, et oui j'ai envie d'avancer dans la programmation, un message d'erreur ma été envoyer tel que : Account Resource Limits Reached

The website is temporarily unable to server your request as it exceeded its allocated resource limit.
Please try again later, once the site is using less resources access will be automatically re-allowed

If you are seeing this message regularly this means your site is exceeding limits allowed for a free hosting site, you should consider upgrading at Securesignup.net.

je pense qu'il faut de toute maniere que je change d'hebergeur car c'est de leur coter le probleme.

Merci de toute vos réponse et du temp que vous m'avez conssacré :) je vais essayer d'avancer et de progresser via vos conseil et des site d'apprentissage :)