Problème de tableau

Jetsurfer

Membre actif
1 Février 2001
383
4
Salut les As,

bon voilà le problème, le tableau que je demande à la fin du code ne s'affiche pas :confused:
Tout le reste fonctionne à savoir appel à l'autre fichier, insertion dans la BD ( j'ai été jeter un coup d'oeil via phpMyAdmin ) et affichage du message comme quoi "la chose" a été faite ;)

Si quelqu'un peut éclairer ma lanterne...

Comme d'autres dans le forum j'utilise Smultron :up:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>Ajouter un livre dans la bd</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<LINK REL=StyleSheet HREF="style.css" TYPE="text/css" MEDIA=screen>
</HEAD>
<BODY BGCOLOR="white">
<?php

// Definir les variables
$id = $_POST['id'];
$titre = $_POST['titre'];
$description = $_POST['description'];
$auteur = $_POST['auteur'];
$date = $_POST['date'];
$lieu = $_POST['lieu'];
$code = $_POST['code'];
$page = $_POST['page'];
$langue = $_POST['langue'];

// connexion serveur
$link = mysql_connect("localhost", "bibliouser", "1234");

// Connexion base de données
$bdlink = mysql_select_db("biblio", $link);

// Requête dans base de données
$sql = "INSERT INTO livres VALUES('$id','$titre','$description','$auteur','$date','$lieu','$code','$page','$langue')";

// Affectation resultat à la variable
$result = mysql_query ($sql, $link);

echo "Livre ajout&eacute;.<br>";

// Création tableau récapitulatif
echo "<table border=\"1\">";
while ($myrow = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>$myrow[id]</td>";
echo "<td>$myrow[titre]</td>";
echo "<td>$myrow[description]</td>";
echo "<td>$myrow[auteur]</td>";
echo "<td>$myrow[date]</td>";
echo "<td>$myrow[lieu]</td>";
echo "<td>$myrow
Bloc de code:
</td>";
   echo "<td>$myrow[page]</td>";
   echo "<td>$myrow[langue]</td>";
   echo "</tr>";
   }
echo "</table>";
?>

</BODY>
</HTML>
 
manuel php:
Return Values

For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.

For other type of SQL statements, UPDATE, DELETE, DROP, etc, mysql_query() returns TRUE on success or FALSE on error.


The returned result resource should be passed to mysql_fetch_array(), and other functions for dealing with result tables, to access the returned data.

Use mysql_num_rows() to find out how many rows were returned for a SELECT statement or mysql_affected_rows() to find out how many rows were affected by a DELETE, INSERT, REPLACE, or UPDATE statement.

mysql_query() will also fail and return FALSE if the user does not have permission to access the table(s) referenced by the query.

Ton code
Bloc de code:
$myrow = mysql_fetch_array($result)

php manual :
array mysql_fetch_array ( resource $result [, int $result_type ] )

Enfin, je dirais un truc du genre
 
Il s'arrête sur quel champ ? Parce que dans ton insert il y a un blanc entre 'd' et 'ate'.

PS : construit une chaîne avec ton code html et fait un seul echo à la fin, c'est plus efficace.
 
Il s'arrête sur quel champ ? Parce que dans ton insert il y a un blanc entre 'd' et 'ate'.

PS : construit une chaîne avec ton code html et fait un seul echo à la fin, c'est plus efficace.

En fait il s'arrête avant le tableau, il me donne juste livre ajouté via le echo qui est au dessus
 
On t'a répondu:
Tu ne peux pas faire un fetch_array avec le parametre TRUE (qui est le parametre que te retourne mysql_query dans ton cas).
De plus c'est un peu confu ce que tu fais: on dirait que tu t'attends à ce que ton fetch_array te retourne la derniere insertion dans ta base de données, mais l'utilisation de ta boucle semble contredire ca.
 
ps, si tu veux effectivement afficher la derniere insertion, il n'est pas utile de refaire une requete; tu peux faire:
Bloc de code:
...
$sql = "INSERT INTO livres VALUES('$id','$titre','$description','$auteur','$d ate','$lieu','$code','$page','$langue')"; 
$success_insert = " Livre ajout&eacute;.<br> \n <table border=\"1\">";
$success_insert .= "<tr> <td>$id</td><td>$titre</td> (...)</tr></table>";

mysql_query($sql, $link) ? echo $success_insert : echo "Une erreur est survenue";
 
NB : Il va sans dire, mais ca va mieux en le disant, que tu ne peux absolument pas utiliser le code que tu as fourni en production. Tu DOIS traiter l'entrée donnée par l'utilisateur avant de la passer dans une requete pour la bdd et/ou de l'afficher. Sinon c'est la porte ouverte à toutes les fenetres.

Edit: bien sur quand je dis traiter je veux dire deux choses :

- tu dois nettoyer tes données, pour prévenir les attaques par des utilisateurs malicieux (voir eg: mysql_real_escape_string() , strip_tags(), htmlentities() ...)

- tu dois valider tes données (est-ce que les informations requises ont été rentrées (eg clé primaire si pas d'auto inc...), est-ce qu'elles correspondent au type attendu (eg : entier, chaine de caractere...), et est-ce qu'elles ont l'apparence correct (eg email, numero ISBN ...), est-ce qu'une donnée qui devait etre unique n'a pas été entrée une deuxieme fois...).

par ailleurs:
Il faudrait aussi que tu fasses un peu de gestion d'erreur (connection à la bdd, duplication de clé (vu que tu passes l'id dans le post) ...)
 
NB : Il va sans dire, mais ca va mieux en le disant, que tu ne peux absolument pas utiliser le code que tu as fourni en production. Tu DOIS traiter l'entrée donnée par l'utilisateur avant de la passer dans une requete pour la bdd et/ou de l'afficher. Sinon c'est la porte ouverte à toutes les fenetres.

Edit: bien sur quand je dis traiter je veux dire deux choses :

- tu dois nettoyer tes données, pour prévenir les attaques par des utilisateurs malicieux (voir eg: mysql_real_escape_string() , strip_tags(), htmlentities() ...)

- tu dois valider tes données (est-ce que les informations requises ont été rentrées (eg clé primaire si pas d'auto inc...), est-ce qu'elles correspondent au type attendu (eg : entier, chaine de caractere...), et est-ce qu'elles ont l'apparence correct (eg email, numero ISBN ...), est-ce qu'une donnée qui devait etre unique n'a pas été entrée une deuxieme fois...).

par ailleurs:
Il faudrait aussi que tu fasses un peu de gestion d'erreur (connection à la bdd, duplication de clé (vu que tu passes l'id dans le post) ...)

Merci pour tes différentes réponses.
Tu l'auras certainement compris, j'en suis au début de l'histoire php.
Relire tout cela me sera utile pour comprendre ce qui est à faire.
Je te rassure tout de suite, ce code n'ira jamais en production, c'est un simple exercice.
 
Merci pour tes différentes réponses.
Tu l'auras certainement compris, j'en suis au début de l'histoire php.
Relire tout cela me sera utile pour comprendre ce qui est à faire.
Je te rassure tout de suite, ce code n'ira jamais en production, c'est un simple exercice.

J'espere ne pas t'avoir trop embrouillé, mais j'ai précisé car il arrive que des gens utilisent un code similaire en production.

Pour en revenir à ton problème initial et résumer un peu:

- Ca ne marche pas car mysql_query() retourne soit une ressource de résultats (si tu fais un SELECT ...) soit une valeur de vérité (TRUE ou FALSE) si tu fais une insertion, update...

- Si tu veux seulement afficher ce qui a été entré avec la derniere requete, tu peux simplement afficher de maniere conditionnelle un tableau avec les variables passées (c'est le sens du code que j'avais mis, au passage je précise que :
Bloc de code:
expressionA ? expressionB : expressionC;
est équivalent à
Bloc de code:
if(expressionA){
    expressionB;
} else {
    expressionC;
}
)

- Si tu veux afficher un tableau de la table mysql modifiée, tu peux utiliser le code de ta boucle apres avoir fait une mysql_query() avec un SELECT.
 
salut,

l'écriture ternaire... je suis pas sûr que ça va l'aider. ;)
C'est clair, j'ai juste mis l'explication pour qu'il puisse comprendre le code que j'avais mis plus haut (et donc comprendre comment on peut utiliser la valeur de retour d'une mysql_query avec un INSERT).