8791 sujets

Développement web côté serveur, CMS

Bonsoir,

Je fais appel à vous ce soir car je suis dans un cul de sac...

J'essaie d'apprendre le SQL, et je me suis servi de ce tuto pour faire un système de news pour un site que je confectionne.

Seulement voilà, j'ai limité à plusieurs affichages pour chaque catégorie (pour chacune j'ai créé une table à chaque fois)

Par exemple, pour la météo, j'ai une table SQL météo, avec les variables titre_meteo, auteur_meteo, texte_meteo, et de même pour la table news, etc...

Le problème c'est que rien ne marche. Dès que je mets une news, ça l'affiche dans toutes les catégories, ce qui est logique, mais je suis bloqué.

Peut être existe-t-il une méthode pour créer une variable "cat" directement dans ma table news et y renseigner chacune des catégorie...

Merci d'avoir lu et de m'aider... Smiley bawling
Bonjour,

peux-tu nous montrer un peu ton code ?

Apparemment tu as plusieurs tables : meteo ; news ; etc... Juste ?
Quand tu insère une news tu dois avoir comme code sql

$sql = 'INSERT INTO news VALUES("", "'.mysql_escape_string($_POST['auteur']).'", "'.mysql_escape_string($_POST['titre']).'", "'.date("Y-m-d H:i:s").'", "'.mysql_escape_string($_POST['news']).'")';


Tandis que si tu ajoute une meteo alors tu dois remplacer
INSERT INTO news

par
 INSERT INTO meteo
, afin de cela s’insère dans la table "meteo".

Et pour l'affichage même chose tu va chercher en SQL soit dans la table meteo ou la table news. Il faut bien dissocier tes tables.

Au plaisir
Bonjour,

merci pour ta réponse, qui m'a bien aidé, seulement le problème persiste.

Voici le code pour insert_meteo.php :
<?php
// on teste si le formulaire a été validé
if (isset($_POST['go']) && $_POST['go']=='Poster la news') {
	// on se connecte à notre base de données
	$base = mysql_connect ('***','***','***');
	mysql_select_db ('***',$base);

	// on teste la déclaration de nos variables
	if (!isset($_POST['auteur_meteo']) || !isset($_POST['titre_meteo']) || !isset($_POST['news'])) {
		$erreur = 'Les variables nécessaires au script ne sont pas définies.';
	}
	else {
		if (empty($_POST['auteur_meteo']) || empty($_POST['titre_meteo']) || empty($_POST['news'])) {
			$erreur = 'Au moins un des champs est vide.';
		}
		// si tout est bon, on peut commencer l'insertion dans la base
		else {
			// lancement de la requête d'insertion
			$sql = 'INSERT INTO meteo VALUES("", "'.mysql_escape_string($_POST['auteur_meteo']).'", "'.mysql_escape_string($_POST['titre_meteo']).'", "'.date("Y-m-d H:i:s").'", "'.mysql_escape_string($_POST['news']).'")';

			// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
			mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

			// on ferme la connexion à la base de données
			mysql_close();

			// on redirige vers la page d'accueil du site (attention, cette redirection ne fonctionne qui si vous avez placé cette page dans un répertoire à partir de la racine du site). Si ce n'est pas le cas, veuillez entrer ici le bon chemin d'accès afin de retomber sur la page d'accueil du site.
			header('Location: ../index.php');
			// on termine le script courant
			exit();
		}
	}
}
?>
<html>
<head>
<title>Insertion d'une nouvelle news</title>
</head>

<body>

<form action="insert_meteo.php" method="post">
<table>
<tr><td>
<span class="gras">Auteur :</span>
</td><td>
<input type="text" name="auteur" maxlength="30" size="50" value="<?php if (isset($_POST['auteur_meteo'])) echo htmlentities(trim($_POST['auteur_meteo'])); ?>">
</td></tr><tr><td>
<span class="gras">Titre :</span>
</td><td>
<input type="text" name="titre" maxlength="50" size="50" value="<?php if (isset($_POST['titre_meteo'])) echo htmlentities(trim($_POST['titre_meteo'])); ?>">
</td></tr><tr><td>
<span class="gras">News :</span>
</td><td>
<textarea name="news" cols="50" rows="10"><?php if (isset($_POST['news'])) echo htmlentities(trim($_POST['news'])); ?></textarea>
</td></tr><tr><td><td align="right">
<input type="submit" name="go" value="Poster la news">
</td></tr></table>
</form>
<?php
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
</body>
</html>


--------------------------------
Voici le code pour meteo.php :
<?php
// on se connecte à notre base de données
$base = mysql_connect ('***','***','***');
mysql_select_db ('***',$base);

// lancement de la requête. on sélectionne les news que l'on va ordonner suivant l'ordre "inverse" des dates (de la plus récente à la plus vieille : DESC) tout en ne sélectionnant que le nombre voulu de news à afficher (LIMIT)
$sql = 'SELECT auteur_meteo, titre_meteo, date, texte_meteo FROM meteo ORDER BY date DESC LIMIT 1;';

// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

// on compte le nombre de news stockées dans la base de données
$nb_news = mysql_num_rows($req);

if ($nb_news == 0) {
	echo '<h1 class="journal">Aucune news disponible</h1><br />';
}
else {
	// si on a au moins une news, on l'affiche
	while ($data = mysql_fetch_array($req)) {

		// on décompose la date
		sscanf($data['date'], "%4s-%2s-%2s %2s:%2s:%2s", $an, $mois, $jour, $heure, $min, $sec);

		// on affiche les résultats
		
		
			***
				echo '<h2>' , htmlentities(trim($data['titre_meteo'])) , '</h2><br />';
					echo '<p>' , nl2br(htmlentities(trim($data['texte_meteo']))) , '</p><br /></div>
							<br><br>***';
							echo '<span class="auteur">Article par ' , htmlentities(trim($data['auteur_meteo'])) , '</span><span class="date">Mise en ligne le ' , $jour , ' / ' , $mois , ' / ' , $an , ' &agrave; ' , $heure , ':' , $min ,  '<br /><br /></div></div><br><br>';
	}
}
// on libère l'espace mémoire alloué à cette requête
mysql_free_result ($req);

// on ferme la connexion à la base de données
mysql_close ();
?>


--------------------------------
Voici le code SQL pour la table meteo :
CREATE TABLE meteo (
	id int(6) NOT NULL auto_increment,
	auteur_meteo VARCHAR(30) NOT NULL,
	titre_meteo text NOT NULL,
	date datetime NOT NULL default '0000-00-00 00:00:00',
	texte_meteo text NOT NULL,
	PRIMARY KEY  (id)
) TYPE=MyISAM;


Quand j'essaie d'introduire une news via insert_meteo, j'ai cette erreur qui vient de mon code PHP : Les variables nécessaires au script ne sont pas définies.

Il s'agit de la même chose pour toutes les catégories, news, actu, sport, etc...

Alors je me suis dit que c'est peut être idiot de se prendre autant la tête, et qu'on peut faire un système de catégorie directement dans une table SQL, mais je n'ai pas trouver comment faire...
Modifié par enls (04 Jan 2013 - 10:50)
Dans l'idéal, je souhaiterais qu'un utilisateur puisse mettre une news et choisir dans une liste déroulante dans quelle catégorie va se caser la news, mais là encore, j'ai pas trouver comment faire...

Dans ma page index.php, les includes sont déjà positionnées de sorte à recevoir la news. Les news.php sont limités à 5 affichages, les sports à 1, et la météo à 1.

	<?php include("includes/news.php"); ?>
<?php include("includes/sports.php"); ?>
<?php include("includes/meteo.php"); ?>


Aujourd'hui, quand j'ajoute une news, elle s'ajoute dans chaque catégorie, mais quand je fais appel à une table autre que 'news', ça ne marche pas...
Modifié par enls (04 Jan 2013 - 10:57)
chezlaurent a écrit :
Bonjour,

Tandis que si tu ajoute une meteo alors tu dois remplacer
INSERT INTO news

par
 INSERT INTO meteo
, afin de cela s’insère dans la table &quot;meteo&quot;.


Problème résolu ! Pour ceux que ça intéresse :

J'ai renommé toutes mes variables à leurs valeurs par défaut, cad de titre_meteo à titre, auteur_meteo à auteur, etc... Mais j'ai recréé la table météo en faisant bien appel à elle, comme tu m'a dis Chezlaurent.

Bon, mais si quelqu'un sait comment faire ce système de liste déroulante, pour choisir dans quelle catégorie s'enregistre la news, je suis preneur !
Parce que pour le moment, l'utilisateur doit cliquer sur un lien qui ouvre insert_meteo.php, et un autre pour insert_news.php...

J'espère que vous comprenez. Smiley smile
Tu peut créer une liste déroulante

<form action="script.php?action=ajouterDansBase" method="post">
<select name="table" id="table">
           <option value="news">News</option>
           <option value="meteo">Meteo</option>
       </select>
</form>


où ton formulaire lancera une page php qui récupère le choix du visteur

$table = $_POST['table'];


puis en mysql tu inclut ta variable

$sql = 'INSERT INTO '.$table.' VALUES("", "'.mysql_escape_string($_POST['auteur_meteo']).'", "'.mysql_escape_string($_POST['titre_meteo']).'", "'.date("Y-m-d H:i:s").'", "'.mysql_escape_string($_POST['news']).'")';


cela devrait fonctionner. A+

PS : n'oublie pas de sécuriser le tout, pour tes tables tu peut faire une liste blanche.