Problème Mysql /PHP Bdd ...help pour une débutante

Répondre
dolarol
le 26/02/2011 à 19:25
dolarol
Bonjour à tous,

Je vous écris car je suis une grande débutante en php/mysql. Je m'y suis mise il y a une semaine... Mon but est de faire une galerie de photo administrable. J'en suis à la partie admin et je bloque...
Voilà, je suis à la création d'un album. L'utilisateur doit remplir un champs texte pour donner le titre de l'album et envoyer une photo (qui se copiera sur le serveur automatiquement ainsi que sa miniature générée) par un bouton "envoyer" il valide sa requête.
J'ai réussi à faire en sorte qu'il y ai bien une création de ligne supplémentaire dans ma table avec le nom de l'album dedans, et aussi une autre création de ligne dans ma table "images" avec le champs "id" qui est le même que l'id de la première ligne crée.
Je ne sais pas si je suis très clair...
en gros, j'ai 2 tables :

album_photo (qui a 3 champs) :

-id(key auto-incr)
-position key order
-titre_album

images (qui a 6 champs) :
-id_image(key auto-incr)
-id (le même id de l'album qui vient d'être créé)
-position
-photo_mini
photo_grand
-titre_photo

En résumé au moment de la création de ma ligne dans la table "album_photo" je voudrais qu'il me remplisse les champs "photo_mini" et "photo-grand"

Pour info, les photos se copient parfaitement sur le serveur en normal et en miniature. La ligne se créé bien dans la table images mais les champs photo_mini et photo_grand sont vides...


Je vous envoie le code en espérant vraiment que quelqu'un pourra m'aider... j'ai lu plein de forums essayé mille choses toute la journée mais je pense que mon niveau débutant me limite...
Alors un petit coup de main serait adorable :))


code sur mon index:

<<?php


// Taille maximum du fichier
$MAX_FILE_SIZE = 8000000;
// Dossier de destination du fichier
$folder = "Photos/";
// Tableau array des différents types
$allowed_types = array("image/bmp", "image/gif", "image/pjpeg", "image/jpeg", "image/jpg", "multipart/x-zip", "video/msvideo");
// Variables récupérées par methode POST du formulaire
$fname = $HTTP_POST_FILES['fichier']['name'];
$ftype = $HTTP_POST_FILES['fichier']['type'];
$fsize = $HTTP_POST_FILES['fichier']['size'];
$ftmp = $HTTP_POST_FILES['fichier']['tmp_name'];
// Divers tests afin de savoir si le format de fichier correspond à notre tableau array
if(!in_array($ftype, $allowed_types)){$error = 1;}
// La taille du fichier n'est pas dépassée
if($fsize > $MAX_FILE_SIZE){$error = 2;}
// Le fichier n'existe pas déjà
if(file_exists($folder."m_".$fname)){$error = 3;}
// Si tout va bien
if(copy($ftmp,''.$folder.''.$fname.'')) {$error = 0;}
// Switch pour la gestion des erreurs
switch($error){
case'0':
echo("Fichier correctement envoyé.");
break;
case'1':
echo("Format de fichier incorrecte.");
break;
case'2':
echo("Fichier trop volumineux.");
break;
case'3':
echo("Fichier déjà existant.");
break;
}


// Variables de connexion à la base
$host = "";
$user = "";
$password = "";
$database = "";
// Connexion à la base
mysql_connect($host,$user,$password);
mysql_select_db("$database");






$Vfichier="$folder$fname";
$Vtitre_album = $_POST["titre_album"];
$Vtitre_album = isset($_POST["titre_album"]) ? mysql_real_escape_string(stripslashes($_POST['titre_album'])) : '';
$Vtitre_album=nl2br($Vtitre_album);
mysql_query("SET NAMES UTF8");
$ok = mysql_db_query($database,"insert into album_photo (titre_album) values ('$Vtitre_album')");

// on teste si les variables du formulaire sont bien déclarées
if(isset($_POST['titre_album'])) {

// on prépare la requête pour récupérer le numero du propriétaire
$sql = 'SELECT id FROM album_photo WHERE titre_album = "'.$_POST['titre_album'].'"';

// 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 récupère le résultat sous forme d'un tableau
$data = mysql_fetch_array($req);

// on libère l'espace mémoire alloué pour cette interrogation de la base
mysql_free_result ($req);

// on insère le tuple (mysql_query) et au cas où, on écrira un petit message d'erreur si la requête ne se passe pas bien (or die)
$sql = 'INSERT INTO images (id) VALUES("'.$data['id'].'")';

// on insère le tuple (mysql_query) et au cas où, on écrira un petit 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());


echo '';
}
else {
echo '';
}





$idd=$data['id'];
$folder_min = "Photos/Miniatures/";
$fichier_nom = "$fname";
$path_mini="$folder_min$fname";
mysql_query("SET NAMES UTF8");


$ok5 = "UPDATE images SET photo_mini='$path_mini' photo_grand='$Vfichier' WHERE id='$idd";
$reqq =mysql_query($ok5, $database) or die( mysql_error() ) ;
?>
dolarol
moogli
le 27/02/2011 à 04:36
moogli
salut,

pour commencer : $HTTP_* c'est obsolète faut utiliser $_GET, $_POST etc et la utiliser $_FILES ;)

pour le reste :
- un exemple d'upload un poil mieux ficelé http://www.phpjungle.info/cours/10-comment-uploader-un-fichier-vers-son-site-via-http.html
- tu te mélange pas mal les pinceau.
=> Si j'ai bien pigé l'insertion dans la tables album ce fait sur la même page que le code fournit ?
si oui utilise mysql_last_insert_id pour récupérer le dernier id inséré dans la table (en fait le dernier index auto increment créer, donc a faire juste après le mysql_query).
a partir de la tu peut l'utiliser pour ta requete sur la table images.
pas besoin d'un insert puis d'un update tu fait tout d'un coup il suffit de nommer les champs comme tu le fait déja.

ensuite je ne vois de code de création de miniature, tu peut regarder dans "les comment faire" la globule à fait ce genre de chose (que tu peut décliner en fonction afin de l'utiliser plus simplement ;))

donc dans l'ordre
- vérification de l’existence des infos du formulaire
- upload de l'image et création de la miniature
- insertion dans la table album
- récupération du denier id
- insertion dans la table images

@+
Il en faut peu pour être heureux !!!!!
dolarol
le 27/02/2011 à 11:01
dolarol
Merci moogli!
Finalement à 3h du mat j'ai réussi à remplir mes champs comme je voulais! Par contre je pense que je vais ré-écrire tout en utilisant ta méthode : mysql_last_insert_id qui est plus simple que la mienne!
Je te tiens au courant!
Encore mille merci :))))
dolarol
dolarol
le 28/02/2011 à 14:26
dolarol
Alors finalement je n'ai pas utilisé la récupération de l'id mais plutôt de mon titre d'album. Car l'id de l'album ne sera pas celui de ma photo...
Mais comme à la création de l'album j'ai fait en sorte qu'il copie le champs du titre à la fois dans ma table photo et dans celle de l'album c'est le titre de l'album qui fait mon lien.

mais je me retrouve confrontée à un autre problème.
Je souhaiterais que, dans ma page d'album, lorsque l'utilisateur clic sur le bouton modifier de l'album en question il se trouve sur la page photo et puisse y voir l'ensemble des photos de cet album.
Seulement voilà, je n'obtient rien de tel!

Voilà le formulaire du bouton "modifier" :

<?php
//connexion à la base de données
define('DB_NAME', '');
define('DB_USER', '');
define('DB_PASSWORD', '');
define('DB_HOST', '');
$link = mysql_connect( DB_HOST , DB_USER , DB_PASSWORD );
mysql_select_db( DB_NAME , $link );
mysql_query("SET NAMES UTF8");

// récupération des photos dans le bon ordre

$result = mysql_query( 'SELECT album_photo.id, album_photo.titre_album FROM album_photo ORDER BY album_photo.position ASC' , $link );
while( $photo = mysql_fetch_assoc( $result ))
{
?>

</div>
<li id="photo_<?php echo $photo['id'] ?>">
<div align="center">
<?php echo $photo['titre_album'] ?>

<TABLE BORDER="0">
<CAPTION></CAPTION>
<TR>
<TH><form method="post" action="supress.php?id='.$data['id'].'"/>
<input type="hidden" name="id" value="<?php echo $photo['id'] ?>" />
<input type="submit" name="del_img" class="delete" value="" />
</form> </TH>
<TH> <form action="admin_photo.php" method="post" />
<input type="hidden" name="titre_album" value="<?php echo $photo['titre_album'] ?>" />
<input type="submit" name="modi_album" class="modif" value="" />
</form> </TH>
</TR>
</TABLE>
</td>
</li>
<div align="center">
<?php


et voilà dans ma page photo le code :
<?php
//connexion à la base de données
define('DB_NAME', '*****');
define('DB_USER', '*****');
define('DB_PASSWORD', '*****');
define('DB_HOST', '*****');
$link = mysql_connect( DB_HOST , DB_USER , DB_PASSWORD );
mysql_select_db( DB_NAME , $link );
mysql_query("SET NAMES UTF8");
$Vtitre_album=$_POST['titre_album'];

// récupération des photos dans le bon ordre
$result = mysql_query( 'SELECT * FROM images WHERE titre_album="$Vtitre_album ORDER BY position ASC' , $link );
while( $photo = mysql_fetch_assoc( $result ))
{
?>

</div>
<li id="photo _<?php echo $photo['titre_photo'] ?>">
<div align="center"><?php echo $photo['titre_album'] ?>
<img src="../<?php echo $photo['photo_mini'] ?>"

<TABLE BORDER="0">
<CAPTION></CAPTION>
<TR>
<TH><form method="post" action="supress.php?id='.$data['id'].'"/>
<input type="hidden" name="id" value="<?php echo $photo['id'] ?>" />
<input type="submit" name="del_img" class="delete" value="" />
</form> </TH>
<TH> <form action="admin_photo.php" method="post" />
<input type="hidden" name="titre_album" value="<?php echo $photo['titre_album'] ?>" />
<input type="submit" name="modi_album" class="modif" value="" />
</form> </TH>
</TR>
</TABLE>

</td>
</li>
<div align="center">
<?php


Lorsque dans ma requête j'écris :

'SELECT * FROM images WHERE titre_album="$Vtitre_album ORDER BY position ASC'
il ne m'affiche rien sur ma page tandis que lorsque j'écris :
'SELECT * FROM images  ORDER BY position ASC'
mes images s'affichent bien, mais du coup j'ai toutes mes images qui s'affichent et non pas celles seulement de l'album que je souhaite modifier...
Si vous avez des pistes pour me guider vers la bonne solution je suis preneuse... une nuit blanche et toujours pas de vrai résulat :(

Modo : j'ai viré tes accès au sgbd pour éviter l'utilisation frauduleuse je te conseil fortement de changer le mot de passe ;)
dolarol
dolarol
le 28/02/2011 à 16:43
dolarol
Bon j'ai dû changer mon code de la bbd... trop bête de mettre ça en ligne!
dolarol
moogli
le 28/02/2011 à 19:56
moogli
Utiliser le nom de l'album n'est pas une bonne idée car tu n'est pas sur de l'unicité de celui ci :)

Fait gaffe à ne pas mettre tes codes / mot de passe sur le forum je ne sais combien de gens ont pu les voir avant que je les vire :/

@+
Il en faut peu pour être heureux !!!!!
dolarol
le 28/02/2011 à 20:12
dolarol
Bonsoir moogli... merci pour tout!
Oui, pour les identifiants mot de passe tout ça c'est pas terrible! erreur de débutante... heureusement je m'en suis rendue compte rapidement et j'ai changé tout de suite mes mots de passe!
Sinon, j'ai finalement tout reprit par l'id et tout fonctionne à merveille... et surtout parce que j'ai fini par comprendre ce qui faisait que je ne récupérais pas l'id sur mon bouton mofidier alors que je le récupérais sur celui de supprimer...
Dès que j'ai mis ces 2 boutons dans 2 div différentes tout à fonctionné comme par magie!!
En fait c'est en supprimant mon code du bouton delete que j'ai vu que sans ça fonctionnait!
J'imagine qu'il y a eu conflit car ces 2 boutons étaient sur même ligne de tableau... enfin j'imagine... si tu as une explication plus concrète et technique je suis preneuse!
En tout cas merci pour ton aide :))
dolarol
LupusMic
le 12/03/2011 à 08:47
LupusMic
(moogli) Si le nom de l'album est unique, il peut servir comme clé ;) Et pour les tenants des clés naturelles, ce n'est pas complètement aberrant.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours