[Base de donnée] en PHP

Mammouth du PHP | 965 Messages

10 mai 2006, 19:07

Je souhaiterais creer une base de donnée a partir de php j'ai commencer a faire des formulaire pour creer une nouvelle fiche mais je ne vois pas comment continuer et faire l'affichage comme une BDD SQL par exemple.

Ce que je veux faire c'est appuyer sur un boutton qui renvois sur un formulaire jusque la pas de problème mais après je voudrais qu'il creer des <td> dans une <table> les une a la suite des autres avec les informations enregistrées.

Comment peut on generer des <td> a partir d'un formulaire php ?

Mammouth du PHP | 19672 Messages

10 mai 2006, 19:10

Pas très sûr de bien comprendre : à partir du moment ou c'est pour afficher des infos récupérées dans une base ou même dans une variable tableau, tu crée les lignes dans une boucle for() tout simplement ou encore dans un while(). Un détail m'aurait-il échappé ? :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 965 Messages

10 mai 2006, 19:17

Non en fait tu as bien resumer ce que je voulais faire mais je vois pas comment faire avec une boucle for() ...

en fait quand une ligne du tableau est creer il faut la rajouter a la suite de celle existantes.

Je ne vois pas comment faire.

Mammouth du PHP | 19672 Messages

10 mai 2006, 19:36

Ok, alors mini tuto : création d'un tableau au nombre de lignes variables avec une boucle.

On va créer un tableau de valeurs ressemblant à ce que tu auras habituellement et on va l'afficher dans un tableau :
<?php
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
?>
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Créer un tableau dans une boucle</title>
<style type="text/css">
/* <![CDATA[ */
table, th, td {border: 1px solid #999;}
/* ]]> */
</style>
</head>
<body>
<?php
$tableau = array("id" => array(1, 2, 3), "nom" => array("Dudule", "Toto", "Machin"));
/* Création d'un tableau : la première partie sera l'en-tête et n'a pas besoin d'être répétée */
?>
<table summary="">
  <tr>
    <th>Identifiant</th>
    <th>Pseudonyme</th>
  </tr>
<?php
/* Maintenant on va créer une nouvelle ligne dans notre tableau par ligne de données : on utilise une boucle */
if(false !== $tableau)
{
    /* On récupère le nombre de ligne de données */
    $nb = count($tableau['id']);
    /* On va maintenant boucler et à chaque tour créer une ligne */
    for($i = 0; $i < $nb; $i++)
    {
?>
  <tr>
    <td><?php echo($tableau['id'][$i]); ?></td>
    <td><?php echo($tableau['nom'][$i]); ?></td>
  </tr>
<?php
    }
}
?>  
</table>
</body>
</html>
Lis bien ce code, note tes questions, réfléchis avant de les poser, tu trouveras toi-même beaucoup de réponses et viens poser les autres ici.

Note que ce code est exécutable tel quel pour que tu puisses voir le résultat.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 965 Messages

13 mai 2006, 16:04

Bonjour j'ai bien regarder ton tuto et j'ai essayer de faire mon mieux pour afficer les resultat de ma requete sql qui se passe bien.

Seul problème il n'affiche que la premièr ligne et pas le reste de la base de donnée je pense que dans ma requete il manque quelque chose mais je ne vois pas quoi. J'ai chercher un moment alors je me permet de mettre le script ici pour un peu plus d'aide !
<?php
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
?>
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Créer un tableau dans une boucle</title>
<style type="text/css">
/* <![CDATA[ */
table, th, td {border: 1px solid #999;}
/* ]]> */
</style>
</head>
<body>

<?php

$_SESSION['login'] = $_POST['pseudo'];
require("connect.php");

if(isset($_POST['pseudo'])) {
	$verif= mysql_query("SELECT * FROM `mix`  WHERE artiste LIKE '".$_SESSION['login']."' ");
	$row=mysql_fetch_array($verif);
	$arr = array("Nom" => array($row['nom']), "Description" => array($row['description']));
	$tableau = array("id" => array($row['nom']), "nom" => array($row['description']));

/* Création d'un tableau : la première partie sera l'en-tête et n'a pas besoin d'être répétée */
?>
<table summary="">
  <tr>
    <th>Nom</th>
    <th>Lien</th>

  </tr>
<?php
/* Maintenant on va créer une nouvelle ligne dans notre tableau par ligne de données : on utilise une boucle */
if(false !== $tableau)
{
    /* On récupère le nombre de ligne de données */
    $nb = count($tableau['id']);
    /* On va maintenant boucler et à chaque tour créer une ligne */
    for($i = 0; $i < $nb; $i++)
    {
?>
  <tr>
    <td><?php echo($tableau['id'][$i]); ?></td>
    <td><?php echo($tableau['nom'][$i]); ?></td>
  </tr>
<?php
    }
}
}
?>
</table>
</body>
</html>

Mammouth du PHP | 965 Messages

13 mai 2006, 17:27

finalement j'ai reussi avec ca :
<?php
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
?>
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Créer un tableau dans une boucle</title>
<style type="text/css">
/* <![CDATA[ */
table, th, td {border: 1px solid #999;}
/* ]]> */
</style>
</head>
<body>

<?php

$_SESSION['login'] = $_POST['pseudo'];
require("connect.php");

if(isset($_POST['pseudo'])) {
	$verif= mysql_query("SELECT * FROM `mix`  WHERE artiste LIKE '".$_SESSION['login']."' ");

/* Création d'un tableau : la première partie sera l'en-tête et n'a pas besoin d'être répétée */
?>
<table summary="">
  <tr>
    <th>Nom</th>
    <th>Lien</th>

  </tr>
<?php
/* Maintenant on va créer une nouvelle ligne dans notre tableau par ligne de données : on utilise une boucle */
$verif= mysql_query("SELECT * FROM `mix`  WHERE artiste LIKE '".$_SESSION['login']."' ");

while($row=mysql_fetch_array($verif))
{
echo "
  <tr>
    <td>".$row['id']."</td>
    <td>".$row['nom']."</td>
  </tr>";
}
}
?>
</table>
</body>
</html>

Mammouth du PHP | 19672 Messages

13 mai 2006, 17:34

C'est presque ça, sauf que :
ta requête est erronée : tu utilises SELECT * pour ne récupérer que deux champs, ce n'est pas terrible. Ensuite tu utilises LIKE sans joker, autant utiliser "=" : tu pourrais donc améliorer ça en faisant:
$verif = mysql_query("SELECT `nom`, `description` FROM `mix` WHERE artiste LIKE '%". $_SESSION['login'] ."%' ");
ou bien:
$verif = mysql_query("SELECT `nom`, `description` FROM `mix` WHERE artiste = '". $_SESSION['login'] ."' ");
Le résultat risque de ne pas être le même selon le cas.

Ensuite, si tu as plusieurs lignes de résultat, ben ton code ne peut en ressortir que la première : logique, il faudrait mettre ça dans une boucle.

Mais pour ça, il faudrait créer les tableaux vides AVANT, sinon à chaque tour, tu vas écraser les valeurs précédentes.

Le reste semble bon, voici donc la partie à revoir corrigée :
if(isset($_POST['pseudo']))
{
    $arr     = array("Nom" => array(), "Description" => array());
    $tableau = array("id" => array(), "nom" => array());
    $verif = mysql_query("SELECT `nom`, `description` FROM `mix` WHERE artiste LIKE '%". $_SESSION['login'] ."%' ");
    while(($row = mysql_fetch_array($verif)) != false)
    {
        $arr['Nom'][]         = $row['nom'];
        $arr['Description'][] = $row['description'];
        $tableau['id'][]  = $row['nom'];
        $tableau['nom'][] = $row['description'];
    }
    /* Création d'un tableau : la première partie sera l'en-tête et n'a pas besoin d'être répétée */
    ?>
Est-ce que tu visualises à peu près correctement le déroulement ? C'est important, sinon, j'explique pour rien, j'aime mieux que tu arrêtes pour assimiler et demander des compléments d'information plutôt que de faire une impasse... Mais réfléchis bien et pose toi les question : "Ceci sert à quoi ? à faire telle chose, ok, ensuite, etc..."
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 965 Messages

13 mai 2006, 18:02

J'ai bien compris pour la requete mais c'est comme cela que je faisais pour mes autre script par contre je ne comprends pas le % que tu met entre ' et ' dans la requete.

Pour le tableau vide je comprends mais la boucle sert a ca non ?

Elle lis la base de donnée
Elle met la base de donnée sous forme de tableau
Elle affiche la base de donnée sous forme de tableau dont chaque ligne correspond a une ligne de ma base de donnée.

Donc je ne comprends pas pourquoi tu creer un tableau avant vide !

Mammouth du PHP | 19672 Messages

13 mai 2006, 18:12

Ok :
Le "%" est un joker en SQL : quans je mets par exemple "LIKE 'Cyrano%', je vais faire ressortir "Cyrano" mais également "Cyrano de Bergerac" alors que si j'utilise "= 'Cyrano', je n'aurais QUE "Cyrano".

Ensuite le problème du tableau : Je suis parti de ton code. C'est un peu compliqué comme méthode mais j'ai suivi : ce que tu fais, c'est de transférer un tableau (le retour de la requête) dans un autre tableau utilisé ensuite pour l'affichage.

Simplifions maintenant :
<?php
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
?>
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Créer un tableau dans une boucle</title>
<style type="text/css">
/* <![CDATA[ */
table, th, td {border: 1px solid #999;}
/* ]]> */
</style>
</head>
<body>
<?php
$_SESSION['login'] = $_POST['pseudo'];
require("connect.php");

if(isset($_POST['pseudo']))
{
    $verif = mysql_query("SELECT `nom`, `description` FROM `mix` WHERE artiste LIKE '%". $_SESSION['login'] ."%' ");
    /* Création d'un tableau : la première partie sera l'en-tête et n'a pas besoin d'être répétée */
    ?>
<table summary="">
  <tr>
    <th>Nom</th>
    <th>Lien</th>
  </tr>
    <?php
    /* Maintenant on va créer une nouvelle ligne dans notre tableau par ligne de données : on utilise une boucle */
    while(($row = mysql_fetch_array($verif)) != false)
    {
        /* On va maintenant boucler et à chaque tour créer une ligne */
?>
  <tr>
    <td><?php echo($row['nom']); ?></td>
    <td><?php echo($row['Description']); ?></td>
  </tr>
<?php
    }
?>
</table>
<?php
}
?>
</body>
</html>
Le sabre bien tranchant, c'est toujours pratique :mrgreen:

Pas plus clair comme ça ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 965 Messages

13 mai 2006, 18:27

La c'est beaucoup plus claie en effet !

Donc en fait le joker c'est ce qui est utilisé pour faire des recherche ca vas m'aider pour la suite ca :) !

Je fais la requete : Choisir dans ma base de donnée mix l'aritste qui s'appel $_SESSION['login']

Je met cette requete sous forme de tableau et je dis que tant qu'elle ne retourne pas d'erreur elle affiche chaque ligne de l'artiste.

Quand je ne comprends pas un code je le retraduit et je cherche a comprendre ce qui bloque ou ce que je ne comprends pas et la je pense avoir compris encore une fois un grand merci Cyrano.

Mammouth du PHP | 19672 Messages

13 mai 2006, 18:31

Si tu as assimilé et que ça fonctionne, il reste plus qu'à mettre le tag [Résolu] ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 965 Messages

13 mai 2006, 19:09

En fait il ne m'affiche pas toute la ligne mais seulement "nom" "description" et pas le reste je ne comprends pas pourquoi j'ai pourtant bien reverifier ma base de donnée et le noms correspondent etc...

Eléphant du PHP | 445 Messages

13 mai 2006, 22:18

Bonsoir,

Si j'ai bien compris, tu voudrais afficher plus de données depuis ta bdd ?
$verif = mysql_query("SELECT `nom`, `description` FROM `mix` WHERE artiste LIKE '%". $_SESSION['login'] ."%' ");
Tu ne sélectionnes que `nom` et `description`, ajoutes-y les champs voulus.
LLDC
Ulti

Mammouth du PHP | 965 Messages

13 mai 2006, 22:22

Une erreur aussi simple :roll:

Merci beaucoup a toi ultim4tom