Création d'une bibliothèque avec photo de couverture

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Création d'une bibliothèque avec photo de couverture

Re: Création d'une bibliothèque avec photo de couverture

par Mazarini » 28 juin 2013, 13:51

...
4) Pour le controle des accès au sgbd tu peux faire :
$result = mysql_query($sql) or die($sql.'<br>'.mysql_error()); 
...
C'est valable pour les update (sans $result = ) #-o

De ce que j'ai vu, pour etat et annee, les quotes gênent peut être si c'est des entiers. Afficher $sql et mysql_error(), ca aide bien pour corriger les erreurs.

Au passage, tu contrôles mysql_select_db() (que tu fais 2 fois), mais pas mysql_connect().

Edit : Normalement, 1 thread = 1 problème. Ca aide les gens qui cherchent à voir si le problème d'une autre personne ne correspond pas au leur et personnellement, j'ai du mal à m'intéresser aux threads de plus d'une page ce qui n'est pas encore le cas de celui-ci.

Re: Création d'une bibliothèque avec photo de couverture

par Zocann » 28 juin 2013, 11:03

Rebonjour !

Me revoila avec un autre petit soucis qui me torture les neurones ...

Donc, ma couverture s'affiche nickel , ensuite j'ai voulu faire en sorte que sur ma liste de livre , le titre de chaque livre soit cliquable et permettent ainsi d’accéder a un formulaire d'édition (en fonction de l'id du livre) pour modifier les infos de celui ci .
Jusque la tout va bien , mon formulaire est OK et aucune erreur mais les modifications ne sont pas prises en compte.. :/
(@Mazarini : je n'ai pas encore utilisé mysqli , je tombe sur plein d'erreur , certainement de syntaxe ?! Alors j'essaye de finir ce petit exercice avec mysql et je me pencherais sur mysqli une fois tout ça fini , car ça a l'air légèrement différent ;) )

Voici le code de la liste de livre (avec le lien cliquable)
<?php

$liaison = mysql_connect("localhost", "root", "");
mysql_select_db("biblio");
$sql = "select * from livre";

$livres = mysql_query($sql) ;
?>

<html>
<head>
<title>Biblio</title>
</head>
<body>
<h1>Listes des livres </h1>
<ul>
<?php while (($livre = mysql_fetch_assoc($livres)) !== false) : ?>
<li>
<?php if (!empty($livre["couverture"])): ?>
	<img src="/images/<?php echo $livre["couverture"]; ?>" />
	<?php endif; ?>
<a href="edit.php?id=<?php echo $livre["id"]; ?>">
	<?php echo $livre["titre"]; ?> </a> par
<em><?php echo $livre["auteur"]; ?> </em>
(<?php echo $livre["annee"]; ?>)
</li>
<?php endwhile; ?>
</ul>
</body>
</html>

<?php mysql_close($liaison); ?>
Ensuite le code du formulaire d'édition :
<?php

$liaison = mysql_connect("localhost", "root", "");
mysql_select_db("biblio");
$sql = "select * from livre".
	" where id=". mysql_real_escape_string($_REQUEST['id']);
	
$resultat = mysql_query($sql) or die($sql.'<br>'.mysql_error()); 
$livre = mysql_fetch_assoc($resultat);
?>
<html>
<head>
<title> Biblio </title>
</head>
<body>
<h1> Modifications </h1>
<form action="metajour.php" method="post">
<input type="hidden" name="id" value="<?php echo $livre["id"]; ?>" />
<fieldset>
<legend><?php echo $livre["titre"]; ?></legend>
<label>Titre</label>
<input type="text" name="titre" value="<?php echo $livre["titre"]; ?>" /> <br/>
<label> auteur </label>
<input type="text" name="auteur" value="<?php echo $livre["auteur"]; ?>" /> <br/>
<label> annee </label> 
<input type="text" name="annee" value="<?php echo $livre["annee"]; ?>" /> <br/>
<label> Genre </label>
<select name="genre">
<option value="Roman"
<?php if ($livre["genre"] == "Roman") echo "selected"?>>roman</option>
<option value="Poesie"
<?php if ($livre["genre"] == "Poesie") echo "selected"?>>Poésie</option>
</select> <br/>
<label> etat </label>
<input type="radio" name="etat" value="1"
<?php if ($livre["etat"] == 1) echo "checked"?> />
neuf
<input type="radio" name="etat" value="0"
<?php if ($livre["etat"] == 0) echo "checked"?> />
occasion
<input type="submit" value="Enregistrer" />
</fieldset>
<a href="Listing livre.php">Retour à la liste</a>
</body>
</html>

<?php 
mysql_close($liaison);
?>


et enfin le code du fichier metajour.php qui doit se charger de modifier les infos dans la BDD :
<?php

$liaison = mysql_connect("localhost", "root", "");
if (!mysql_select_db("biblio", $liaison)) {
   echo mysql_errno($liaison) . ": " . mysql_error($liaison). "\n";
}

mysql_select_db("biblio", $liaison);

$sql = "update livre set"
." titre='".mysql_real_escape_string($_REQUEST['titre'])."',"
." auteur='".mysql_real_escape_string($_REQUEST['auteur'])."',"
." annee='".mysql_real_escape_string($_REQUEST['annee'])."',"
." genre='".mysql_real_escape_string($_REQUEST['genre'])."',"
." etat='".mysql_real_escape_string($_REQUEST['etat'])."',"
." where id=".mysql_real_escape_string($_REQUEST["id"]);

mysql_query($sql);
mysql_close($liaison);

?>

Mise a jours effectuée !
<a href="Listing livre.php"> Liste </a>
Je vois vraiment pas ou ça bloque , et ça se trouve c'est encore une erreur inattention mais je sèche !

Re: Création d'une bibliothèque avec photo de couverture

par Mazarini » 26 juin 2013, 13:25

Merci beaucoup pour l'aide et les conseils , ça fais plaisir de voir qu'il y a toujours des gens qui donnent de leur temps bénévolement pour les "newbies" .
Ca fait plaisir d'aider des gens qui essayent de comprendre et ne se contentent pas de dire "ca marche pas" sans chercher.

Re: Création d'une bibliothèque avec photo de couverture

par Zocann » 26 juin 2013, 12:14

1)
Ok , oui j'aurais pu mettre autre chose que 'name' (mais j'avoue que dans mon bouquin ils utilisent name du coup pour ne pas trop me perdre j'ai décidé de suivre le modèle du livre.


2)
Effectivement , je viens de voir... Une erreur très bête que j'aurai du voir en relecture du code ;)
Merci beaucoup car je ne penses pas que je l'aurais plus vu en relisant a nouveau. Du coup le code fonctionne et l'image s'affiche bien comme je le souhaite !

3)
Merci du lien , je m'attèle a la lecture de tout ça demain matin !

4)
J'en prends note , je vais essayer de remodifier le code pour qu'il soit "correct" et bien finalisé.

Merci beaucoup pour l'aide et les conseils , ça fais plaisir de voir qu'il y a toujours des gens qui donnent de leur temps bénévolement pour les "newbies" .
Bonne journée à toi et encore merci ;)

Re: Création d'une bibliothèque avec photo de couverture

par Mazarini » 26 juin 2013, 11:23

1) Je suppose qu'il y a un premier problème la ligne 5 de ajoute.php

Ca doit correspondre à :
$destination = 'c:\\wamp\\www\\images\\'
.$_FILES['couverture'] ['name'];

Une lecture rapide, m'a fait... mal lire. Ma remarque sur le nom de fichier à préciser était sans fondement : tu mettais déjà bien le nom du fichier avec $_FILES['couverture'] ['name']. Le changement que tu as fais a induit une erreur, désolé.

2) Pour le insert, insert into livre (titre, auteur, annee, genre, etat) VALUES ..., il manque le nom de la colonne pour l'image après etat. Les noms de colonnes et les valeurs doivent correspondre.

3) La référence de la doc php est la : http://php.net/manual/fr/function.mysql-query.php (c'est la page pour mysql_query en l'occurence). Je te laisse voir le problème de mysql vs mysqli. C'est juste que tu dois savoir que les fonctions mysql vont disparaître à terme.

4) Pour le controle des accès au sgbd tu peux faire :
$result = mysql_query($sql) or die($sql.'<br>'.mysql_error()); 
C'est le plus simple avant de mettre en place une vrai gestion des erreurs.

5) je ne comprends pas la ligne SCREAM: de ton message.


EDIT : Pour les erreurs, c'est histoire de voir la commande SQL qui peut comporter une erreur lors de la construction (plus facile que de lire le php) et de voir le message d'erreur (ca peut aider des fois).

Re: Création d'une bibliothèque avec photo de couverture

par Zocann » 26 juin 2013, 10:57

Bonjour ,

Merci de votre réponse !

Alors , pour tmp_name je viens d'essayer de mettre un nom de fichier et j'ai une erreur :?

Image

Pour l'insert , je suppose que tu veux parler de cette ligne :
."'".mysql_real_escape_string($couverture)."')";
Mais j'ai essayé plusieurs modifs (je suis nocive.. :/) et à chaque fois erreur.. Comment faudrait-il modifier cette ligne ?

Pour le code retour , je ne savais pas , je vais me pencher la dessus (le bouquin n'en parle même pas ... enfin..)

Mysqli ? Mon editeur (notepad++) n'a pas l'air de le reconnaitre (il n'est pas en bleu comme mysql !?) , quelle est la différence entre mysqli et mysql ?

Re: Création d'une bibliothèque avec photo de couverture

par Mazarini » 26 juin 2013, 10:29

1) Il me semble que pour la destination (move_upload_file) il faut mettre un fichier, pas un répertoire. tmp_name corresponds à un nom unique aléatoire, il faut donc préciser le nom que tu souhaites.

2) Lors de l'insert, tu as 5 colonnes et 6 valeurs (ajoutes le nom de la nouvelle colonne.

3) apres un mysql_query(), il faut tester le code retour (mysql_errno() et mysql_error())

4) Il faut utiliser mysqli_xxxx() et non mysql_xxxx() qui est obsolète. Regardes aussi pdo.

Création d'une bibliothèque avec photo de couverture

par Zocann » 26 juin 2013, 10:12

Bonjour à tous !

Je suis débutant en php (Vous devez vous en doutez vu la section ou je poste.. ) et je suis en pleine lecture du Guide Complet sur Php5 par Micro Application.

J'essaye donc d'appliquer les différents exercices qu'ils proposent dans ce livre , l'un d'eux consiste à la création d'une bibliothèque (de livres) .
J'ai donc crée une base de donnée (biblio) et une table (livre) , tous se passait très bien (mes livres ajoutés via formulaire sont bien ajoutés dans la BDD , et l'affichage de ceux ci s'effectuent avec succès) jusqu'a ce que je modifie mon code pour y ajouter une photo de couverture pour chaque livre.
Mon problème est que lors de l'ajout d'un nouveau livre (avec un champs input file en plus pour cette fameuse image donc) l'image de couverture s'upload bien dans son dossier de destination mais aucun enregistrement n'est effectué dans la base de donnée ! (même si je n'ajoute pas de photo !) Je pense donc que le problème viens de ces bout de codes que j'ai rajouté pour cette fameuse photo !
Après lecture et relecture de mon code , j'avoue être un peu perdu !
A savoir , je travail sur wampserver en local.
Voici le code de la page par laquelle j'ajoute mes livres :
<html>

<head>

<title>Biblio</title>

</head>

<body>
<h1> Ajout </h1>
<form action="ajoute.php" method="post"
	enctype="multipart/form-data">
<fieldset>
<legend> Nouveau livre </legend>
<label> Titre </label>
<input type="text" name="titre" /><br/>
<label> auteur </label>
<input type="text" name="auteur" /><br/>
<label> annee </label>
<input type="text" name="annee" /><br/>
<label> genre </label>
<select name="genre">
<option value="Roman">Roman</option>
<option value="Poesie">Poésie</option>
</select><br/>
<label> Etat </label>
<input type="radio" name="etat" value="1" /> Neuf
<input type="radio" name="etat" value="0" /> Occasion
<br/>
<label> Couverture </label>
<input type="file" name="couverture" /> <br/>
<input type="submit" value="Ajouter" />
</fieldset>
<a href="Listing livre.php">Retour à la liste </a>
</body>
</html>
Voici ensuite le code de la page se chargeant d'ajouté tous ça à la BDD :
<?php
$liaison = mysql_connect("localhost", "root", "");
mysql_select_db("biblio");
if (isset($_FILES['couverture'])) {
$source = $_FILES['couverture'] ['tmp_name'];
$destination = 'c:\\wamp\\www\\images\\'
.$_FILES['couverture'] ['name'];
if ($_FILES['couverture']['error'] > 0) {
	die("erreur lors du telechargement du fichier");
	}
if (!move_uploaded_file($source, $destination)) {
	die("erreur lors du deplacement du fichier");
	}
	$couverture = $_FILES['couverture'] ['name'];
	}
	else {
	$couverture = '' ;
	}

$sql = "insert into livre "
	."(titre, auteur, annee, genre, etat) VALUES "
	."('".mysql_real_escape_string($_REQUEST['titre']) ."',"
	."'".mysql_real_escape_string($_REQUEST['auteur']) ."',"
	."'".mysql_real_escape_string($_REQUEST['annee']) ."',"
	."'".mysql_real_escape_string($_REQUEST['genre']) ."',"
	."'".mysql_real_escape_string($_REQUEST['etat']) ."',"
	."'".mysql_real_escape_string($couverture)."')";
	mysql_query($sql);
	mysql_close($liaison);
	?>
	Ajout effectué !
	<a href="Listing livre.php">retour</a>
Et enfin le code de la page se chargeant d'afficher ma liste de livre :
<?php

$liaison = mysql_connect("localhost", "root", "");
mysql_select_db("biblio");
$sql = "select * from livre";

$livres = mysql_query($sql) ;
?>

<html>
<head>
<title>Biblio</title>
</head>
<body>
<h1>Listes des livres </h1>
<ul>
<?php while (($livre = mysql_fetch_assoc($livres)) !== false) : ?>
<li>
<?php if (!empty($livre["couverture"])): ?>
	<img src="/images/<?php echo $livre["couverture"]; ?>" />
	<?php endif; ?>
<?php echo $livre["titre"]; ?> par
<em><?php echo $livre["auteur"]; ?> </em>
(<?php echo $livre["annee"]; ?>)
</li>
<?php endwhile; ?>
</ul>
</body>
</html>

<?php mysql_close($liaison); ?>
Je vous remercie d'avance pour l'aide que vous pourriez m'apporter !
Zoc'