Base SQL et pages PHP, je ne comprends pas...

Fermé
Shirase_Akira - Modifié par Shirase_Akira le 9/06/2011 à 11:56
Meoran Messages postés 1562 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 8 avril 2015 - 21 juin 2011 à 13:38
Bonjour,

J'ai encore du mal avec les bases SQL et pages PHP, ça avance mais je dois mettre en place le plus vite possible une table pour mon site:
www.allofjade.toile-libre.org

En fait il s'agit de la liste des créatures, j'aimerais tout placer dans une base de données, j'arrive à créer la base, mais j'ai énormément de mal à trouver des réponses pour mettre en forme en PHP...

Pour l'instant j'ai tapé toutes les pages une par une, ce qui a été très très long, et j'ai peur de devoir passer autant de temps à mettre les infos manquantes...

Donc je voudrais garder à peu près la même organisation, mais avoir au final que 2 pages qui invoqueraient les données souhaitées ( actuellement j'en ai 259 ):
Une page qui afficherait la liste, car j'aurais 3 listes différentes pour la même base, une officielle, une des boss et une complète
Une page qui enverrait les données d'une créature sélectionnée dans une des trois listes...
En voyant le site vous comprendrez, j'ai du mal à m'expliquer désolé...

Je pense que le gros problème vient du fait que je ne comprends pas comment sql fait pour envoyer uniquement les données souhaitées à partir du php...

Merci d'avance ;)
A voir également:

4 réponses

Meoran Messages postés 1562 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 8 avril 2015 206
Modifié par Meoran le 11/06/2011 à 00:39
Salut,

Le principe de SQL est basé sur un système de clef primaire qui identifie chaque enregistrement des différentes tables sql.

Pour récupérer des informations d'une ligne d'une table sql il faut en fait dire ;
"Je veux toutes les informations de la ligne dont l'identifiant est truc"

Tu peux ensuite récupérer les données retournées dans un tableau php et l'exploiter comme n'importe quel autre tableau php
0
Shirase_Akira
16 juin 2011 à 11:29
Salut, ça j'avais compris, mais je ne comprends pas ça par exemple:
Un premier client demande: je veux telles infos
Le serveur lui donne
Un second client demande: je veux d'autres infos sur cette même page
Le serveur lui donne
Pourquoi le serveur donne les bonnes infos à chacun? Comment différencie-t-il un client d'un autre en fait?

Parce que ce qui me pose problème, c'est le raisonnement, au delà du pourquoi, comment?
0
Meoran Messages postés 1562 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 8 avril 2015 206
Modifié par Meoran le 16/06/2011 à 12:28
Salut,

la où tu te plantes, c'est que ce n'est pas tout à fait la même page. Mais la page est générée dynamiquement, ce qui fait que toi, tu en as une seule à écrire.

Je vois que pour l'instant tu as sur ton site :

http://www.allofjade.toile-libre.org/pages/cre167.php

ce qui fait que ce ne sera pas la même page c'est ceci :

http://www.allofjade.toile-libre.org/pages/cre.php?choix=XXX (XXX vaut 167 par exemple...)

XXX est généré automatiquement en fonction du clic de l'utilisateur.

"Je veux les informations de la créature dont l'id est XXX".

Ceci appelle l'url cité juste au dessus.

Tu envoies ensuite une requête au serveur disant, ""Je veux toutes les informations de la créature dont l'identifiant est XXX"

Ensuite, sur ta seule page écrite tu n'as plus qu'à indiquer :

Affiche moi le screen que la requête as retourné, affiche moi le niveau que la requête a retourné etc (qui seront les informations de la créature vu que c'est ce que tu as demandé...)
0
Donc si j'ai bien compris, dans mon fichier liste, je dois dire
"à tel clic: rajoute X à l'url"

Et dans mon fichier créature: "affiche la créature correspondant à X"


En continuant dans ce raisonnement, si je veux afficher la liste, en dynamique, il me faut une base SQL avec beaucoup de champs, dont:
- Le numéro
- Le nom

Alors... Dites moi si je me paume, je dis en PHP que je dois faire une liste, qui s'affiche dans un tableau à 4 colonnes, qui affiche le numéro et le nom de la créature séparés d'un tiret et précédé du caractère "#"

Donc jusque là j'utilise une boucle?

Ensuite quand je clique sur la créature X, X étant son numéro, son "id" en somme, ce même id se rajoute à l'url, ce qui permet à la page créature d'afficher les informations demandées ( les autres entrées de la même ligne dans la base SQL ) relatives à la créature X, c'est bien ça?
0
Meoran Messages postés 1562 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 8 avril 2015 206
Modifié par Meoran le 17/06/2011 à 18:52
C'est exactement ça ;)

Sur ta page liste, il te faut une requête qui sélectionne l'id et le nom (plus éventuellement d'autres informations). Ca fera un genre de requete de ce type : select id, nom from creature

Sur ta page creature, ce serait une requete du genre : select * from creature where id="l'id présent dans l'url". Cela te retournerait toutes les informations liées à la créature.
0
Je viens de refaire une tentative, je galère pas mal...
Donc en fait, j'ai, dans ma connect.php ( test en local ):

<?php
$host = "localhost";
$db = "test";
$user = "root";
$psw = "";
$connection = mysql_connect($host,$user,$psw)
or die( "Connection impossible sur la bdd $db avec l'utilisateur $user".mysql_error()).
mysql_select_db ($db)
or die("Erreur de connection sur $db".mysql_error())
?>

Déjà je ne sais pas trop si ça fonctionne...

Il est intégré via un include

Dans mon index de test, entre les body:
<body>
<?php
{
$sql = "SELECT * FROM 'creatures' LIMIT 0, 30 ";
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);
mysql_free_result ($req);
mysql_close ();
}
?>
Liste des créatures:<br />
<?php echo $id $data['id']; ?>

</body>
Là j'ai un joli bug :s

Ma bdd de test ( creatures.sql):
-- phpMyAdmin SQL Dump
-- version 3.3.9
-- http://www.phpmyadmin.net
0
--
-- Serveur: localhost
-- Généré le : Sam 18 Juin 2011 à 15:57
-- Version du serveur: 5.5.8
-- Version de PHP: 5.3.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

Bon désolé, je ne comprends pas, la suite refuse de s'afficher :/
0
Shirase_Akira
18 juin 2011 à 18:44
Je viens d'essayer avec quelque chose de complètement différent, ce coup-ci plus d'erreur mais rien ne s'affiche...

index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
</head>

<body>
<?php include('connect.php'); ?>
<?php $result = mysql_query("SELECT id,nom FROM 'creatures'
LIMIT 0 , 85");
while ( $row = mysql_fetch_array($result)){
echo $row[id].' - '.$row[nom].' - '.;
} mysql_close(); ?>
<?php echo ['$result'] ?>
</body>
</html>




connect.php
<?php
$connect = mysql_connect('localhost','root','') or die ("erreur de connexion");
mysql_select_db('test',$connect) or die ("erreur de connexion test");
?>



Il doit me manquer quelques bases, je ne comprends pas trop... Si j'ai bien compris:
1) On ouvre la connection, cf connect.php
2) On charge les données que l'on veut en mémoire, cf mysql_query()
3) Une fois les données en mémoire, on coupe la connection, cf mysql_close()
4) On affiche les données en mémoire via $result, qui contient les données de mysql_query()

... Dans ce cas, pourquoi je n'ai rien qui s'affiche?
0
Meoran Messages postés 1562 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 8 avril 2015 206
Modifié par Meoran le 21/06/2011 à 13:39
Salut,

déjà je te conseil PDO pour te connecter à ta bd qui possèdent plusieurs avantages, dont celui de gérer les exceptions, ce qui permet de te renvoyer un message d'erreur (qui en plus est facilement compréhensible) lorsque ça marche pas.

Tu sembles déjà avoir quelques connaissances en PHp donc je te redirige vers la page php.net de PDO, et non vers le SDZ :p https://www.php.net/manual/fr/book.pdo.php

Autrement c'est presque bon, pour un premier essai je trouve que tu te débrouilles pas mal !

while ( $row = mysql_fetch_array($result,MYSQL_BOTH)){
echo $row['id'].' - '.$row['nom'].' - '.;
}

et supprime le ['$result'] qui de un, ne veut rien dire, mais même un print_r($result] ne marcherais pas car $result est une ressource et non un tableau !
0