{MySQL}

Fermé
just a shoot - 4 sept. 2009 à 17:44
lewis34 Messages postés 2557 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 30 mai 2015 - 6 sept. 2009 à 20:38
Bonjour à tous,

Cela fait une grosse semaine que je me penche sur l'utilisation du PHP et des bases de donner. Je sais maintenant créer des formulaires pour ajouter depuis un site des infos sur la base de donner ou sur le serveur mais pas encore faire les deux à la fois?

En fait l'objet de ma quête auprès de votre communauté est la création d'une banque de photos que les utilisateurs de mon site pourrait compléter avec leurs propres photos. Pour ce faire mon premier formulaire leur permet d'enregistrer sur la base de donner le nom de l'image et des commentaires, un indice s'auto incrémante à chaque ajout afin d'afficher les photos dans l'ordre d'écroissant (comme ça les plus récentes apparaissent en premier)

ensuite une fois le premier formulaire rempli, une deuxième page s'ouvre et un nouveau formulaire leur permet d'enregistrer l'image sur le serveur, afin de ne pas encombrer la base de données.

Première question, est-il possible de faire les opérations dans le même formulaire afin que le nom des images soit identique?

Ensuite, et c'est la que je coince : l'affichage!!! je voudrais que les images soient présentées sous formes de miniatures (ça je sais faire), qu'elles puissent s'ouvrir par un clic (je crois savoir faire) mais la où je bloque c'est que les photos et l'indice ne sont pas au même endroit. Comment dire à l'explorateur de prendre les indices, les trier dans le sens inverse, d'afficher les noms, et aller cherche la photo correspondante dans un dossier sur le serveur?


En implorant que vos lumières daignent m'atteindre

Bonne soirée à tous.

23 réponses

giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
4 sept. 2009 à 18:29
Bonsoir,

Un seul formulaire pour "uploader" le fichier image. on récupère ainsi son nom. on enregistre l'image dans un dossier images et le nom dans la base de données.

dans la base de données, un identifiant auto(incrémenté donnera l'ordre d'enregistrement des images que la requête sql pourra ordonner dans le sens que l'on veut.
0
Bonjour et merci pour ta réponse,

C'est bien ce que je pensais faire par contre je ne sais pas, ou plutôt ne vois pas comment faire pour que la même cellule du formulaire (nom de l'image) serve à la fois à enregistrer la photos dans un dossier sur le serveur et remplisse la base de données. Ensuite comment, dans le script php, appeler à la fois la photo dans le fichier sur le serveur et aller chercher la donnée d'incrémentation dans la BDD.

Ce qui me pose le problème est l'imbrication des deux. Aurais-tu un exemple de script que je puisse adapter, j'ai cherché sur le net mais je n'ai rien trouvé?

Merci d'avance

Justin
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
6 sept. 2009 à 11:44
bonjour,
on va essayer.
N.B ce que j'écris ici n'est pas testé.

1 un formulaire pour rechercher l'image
<form name=image method='POST' action='enregImage.php'>
<input type='file' name='image' value=''>
<input type='submit' value='upload'>
</form>

2 dans enregImage.php
on récupère le fichier, et on l'enregistre dans un dossier
regarde le script ici : http://jeanluc.richetin.free.fr/WebmasterTools/

on a alors le nom du fichier image, le nom du dossier dans lequel on l'a uploadé, il ne rest qu'à mattre à jour la base de donnés.
en php :
$req = "insert into matable (id,nomimage) values('','".$nomImage."')";
$result = mysql_query($req);
0
Ok, merci beaucoup,

j'ai du bidouiller un peu le php car il y avait un souci avec le contrôle de l'existence du fichier... mais du coup j'ai quelques autres questions :

ce bout de code :
$req = "insert into matable (id,nomimage) values('','".$nomImage."')";
$result = mysql_query($req);

Oû est-ce que je dois le mettre? dans le code php enregImage?

Ensuite comment est-ce que ma table va savoir quel adresse prendre comme référence pour retrouver mon image? Parce que la requête que vous me présentée n'indique (pour moi) que le nom et l'ID de l'image et rien d'autre.

Je me trompe peut être mais la je patauge vraiment
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
6 sept. 2009 à 15:06
ce code vous montre comment inserer dans une table le chemin vers une image. il faut le mettre au moment opportun, c'est à dire quand on a les infromations et qu'on veut les insérer dans la table.
Un minimum d'algotythmie est là nécessaire.

il est évident que je n'ai pas fait votre code, et ce pour plusieurs raisons : la première est que je ne connais pas la structure de votre table, la seconde est que de l'aide n'est pas faire faire son travail.

maintenant que le chemin de l'image est dans une table vous pouvez le récupérer quand vous en avez besoin.

le principe :
imaginons que votre image représente un avatar et que l'id est le n° d'une personne.
pour afficher l'avatar quand une personne donne son n°,

si $numpersonne contient le n° de l'individu,
vous landez une requête
select nomimage where id=$numpersonne

si $nomimage conteient le chemin (et le nom)
il n'y a plus qu'à l'afficher
<img src='<?php echo $nomimage; ?>'>



N.B la reciopie telle quelle de ces codes ne peut fonctionner en l'état, il faut les adapter à son cas personnel..
0
Merci, je vais essayer de me débrouiller avec ça

justin
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
6 sept. 2009 à 15:11
ou alors on y va pas à pas
à savoir
1 on récupère une image et on met son chemin et son nom dans la table

2 quand ça va bien on utilise la table pour récupérer le chemin.
0
Re bonjour,

Après avoir essayer plusieurs choses je ne sais même plus ou j'en suis. Une aide pas à pas serait donc très appréciable.

Voila où j'en suis :

-ma base contient quatre champs
ID int autoicrémentation
NOM text
URL text
COMMENTAIRES text

j'ai pour le moment une page html, et deux script php

-la page a pour le moment le code suivant :

<form name=image method='POST' action='ajouter.php'>
<p>Fichier : <input type='file' name='nom' value=''> </p>
<p>Commentaires : <input name='commentaires' value=''></p>
<input type='submit' value='upload'>
</form>


-elle fait référence au php suivant (ajouter)

<?php
include("connexion.php");

connexion();
$sql = "INSERT INTO mabase(id,nom,url,commentaires) ";
$sql .= "VALUES('','".$_POST['nom']."','".$_POST['.$nom.']."','".$_POST['commentaires']."')";

mysql_query($sql) or die(mysql_error());
?>

<?php
$dossier = 'images/';
$fichier = basename($_FILES['name']);
$taille_maxi = 100000;
$taille = filesize($_FILES['name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['name'], '.');
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
}
if($taille>$taille_maxi)
{
$erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
//On formate le nom du fichier ici...
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
{
echo 'Upload effectué avec succès !';
}
else //Sinon (la fonction renvoie FALSE).
{
echo 'Echec de l\'upload !';
}
}
else
{
echo $erreur;
}
?>

-qui fait lui même référence à un script pour me connecter à la base de données.

Pour le moment quand j'essaie d'uploader une image il m'affiche le message d'erreur comme quoi il n'y a a pas la bonne extension (hors j'ai bien un jpg...) mais en attendant j'ai bien les commentaires qui se mettent dans la base de données, pas le nom ni l'url...

Une idée?
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
6 sept. 2009 à 17:25
peut être ne faut-il pas le . devant l'extension dans votre tableau
$extensions = array('png', 'gif', 'jpg', 'jpeg');
pour le vérifier faites :

$extension = strrchr($_FILES['name'], '.');
echo $extension;
0
J'ai essayé ce que vous venez de dire mais cela ne fonctionne toujours pas. j'ai même essayé d'autres variantes mais cela ne marche pas non plus, enlever les point dans le tableau... finalement j'abouti à


<?php
$dossier = 'images/';
$fichier = basename($_FILES['name']);
$taille_maxi = 100000;
$taille = filesize($_FILES['name']);
$extensions = array('png', 'gif', 'jpg', 'jpeg');
$extension = strrchr($_FILES['name'], '.');
echo $extension;

je vais essayer en enlevant le contrôle pour voir
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
6 sept. 2009 à 17:48
que réponds le echo $extension ?

on peut faire aussi à la place de
$extension = strrchr($_FILES['name'], '.');


$extension = substr($_FILES['name'],-3);
0
en ayant le code suivant voila ce que ça m'indique

<?php
$dossier = 'images/';
$fichier = basename($_FILES['name']);
$taille_maxi = 100000;
$taille = filesize($_FILES['name']);
$extension = strrchr($_FILES['name'], '.');
echo $extension;



Warning: in_array() [function.in-array]: Wrong datatype for second argument in /web/aeroclubvanneau/www/ajouter.php on line 27
Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...

est-ce que c'ets bien cela qu'il faut comme code pour vérifier, ou faut -il que je laisse le test de l'extension?
0
en ayant le code suivant voila ce que ça m'indique

<?php
$dossier = 'images/';
$fichier = basename($_FILES['name']);
$taille_maxi = 100000;
$taille = filesize($_FILES['name']);
$extension = strrchr($_FILES['name'], '.');
echo $extension;



Warning: in_array() [function.in-array]: Wrong datatype for second argument in /web/aeroclubvanneau/www/ajouter.php on line 27
Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...

est-ce que c'ets bien cela qu'il faut comme code pour vérifier, ou faut -il que je laisse le test de l'extension?
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
6 sept. 2009 à 17:56
quelle est la ligne 27,
le message semble dire qu'il y a une erreur de syntaxe et qu'il manque un argument.

c'est à vous de voir si vous voulez enlever la vérification de l'extension, ce n'est pas cela qui gêne.

0
effectivement, il y avait une erreur de syntaxe, du coup je n'ai plus d'erreur, sauf le fait qu'il m'indique que le fichier n'est pas du bon type

je suis en train de me demander si ce n'est pas la succession de script qui pose problème
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
6 sept. 2009 à 18:24
il faut s'assuere que dans cette succesion les valeurs passent bien.
un truc pour le vérifier
quand un formulaire envoie quelquechose, faites en début du script suivant :
echo "<pre>";print_r($_POST);echo "</pre>";
vous verrez ainsi ce qui passe réellement
0
voila ce que j'ai comme messages une fois que j'ai sélectionné un fichier dans le formulaire et inscrit n'importe quoi dans la rubrique "commentaires". Cette dernière s'enregistrant bien dans la bdd
0
Oups, j'ai oublié le coller

Array
(
[commentaires] => ja vqld
)
Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
6 sept. 2009 à 18:45
bien mais hje vois pas le nom du fichier.

j'ai trouvé un autre truc étrange dans votre script :
$sql .= "VALUES('','".$_POST['nom']."','".$_POST['.$nom.']."','".$_POST['commentaires']."')";


vous mettez deux fois le nom !
0
lewis34 Messages postés 2557 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 30 mai 2015 352
6 sept. 2009 à 18:47
dans t apage de recup des valeurs met ceci:

$rep = "le repertoire_ou_tu_upload_tes_images";
			$file_name = saveImage($rep);//appel de la fonction pour sauvegarder tes images voir apres
			$image= $rep.$file_name;


la fonction de traitetement de l'image

function saveImage($rep)
		 {
		// echo'rep'.$rep;
			$limitedext = array(".jpg", ".jpeg", ".png", ".bmp", ".gif", ".JPG", ".JPEG", ".PNG", ".BMP", ".GIF" );
			
			$file_type = $_FILES['imgfile']['type'];
			$file_name = $_FILES['imgfile']['name'];
			$file_size = $_FILES['imgfile']['size'];
			$file_tmp = $_FILES['imgfile']['tmp_name'];
//print_r($_FILES);
			//Verification des extensions
			$ext = strrchr($file_name,'.');
			$ext = strtolower($ext);
			if (!in_array($ext,$limitedext))
			 {
				die("Le fichier n'est pas une image<br /><a href='index.php'>Retourner à l'accueil</a>");
			}
			//Recuperation de l'extension et du nom de fichier
			$getExt = explode ('.', $file_name);
			$file_ext = $getExt[count($getExt)-1];
			$file_name = str_replace(".".$file_ext,"",$file_name);
			$file_name = removeAccents($file_name);			
			
			//Récuperation de l'image uploaded
			if($file_size) 
			{
				if($file_type == "image/pjpeg" || $file_type == "image/jpeg")
				 {
					$uploaded = imagecreatefromjpeg($file_tmp);
				 } 
					elseif($file_type == "image/x-png" || $file_type == "image/png")
					 {
						$uploaded = imagecreatefrompng($file_tmp);
					 }
						 elseif($file_type == "image/gif")
						  {
							$uploaded = imagecreatefromgif($file_tmp);
						  }
				list($width, $height) = getimagesize($file_tmp);
				
				//suivant la taille
				//si l'image est + petite que les dim de la div 600*450
				
				//dilmension de l'icone par defaut

				$NouvelleHauteurico=$height;
				if($width<800 && $height<600)
				{
				$kH=$width/$height;
				if($kH<0) {$kH=$height/$width;}
				$NouvelleTailleImage = $width;
				
				
				$NouvelleLargeurImage=$width;				
				$NouvelleHauteurImage=$height;
				
				
				
				/*$Reductionico = (($NouvelleTailleico * 100)/$kH );
				$NouvelleLargeurico = (($width * $Reductionico) / 100);
				$NouvelleHauteurico=(($height* $Reductionico)/100);*/
				}
				//elle est plus grande de partout
				elseif($width>800 || $height>600)
				{
				/************************************/
				/*  redimensionnenet proportionnel  */
				/*									*/
				/************************************/
				//si l'image est verticale
					if($height>$width)
					{
					//echo'vertical<br/>';
					$kH=$height;
					$NouvelleTailleImage = 600;
					$NouvelleTailleico = 80 ;
					}
					else
					{
					//echo'horizontal<br/>';
					$kH=$width;
					$NouvelleTailleImage = 800;
					$NouvelleTailleico = 100 ;
					}
					//JE CALCULE LE POURCENTAGE DE REDUCTION :
					$Reduction = ( ($NouvelleTailleImage * 100)/$kH );
					$Reductionico = ( ($NouvelleTailleico * 100)/$kH );
					
					echo'reduction'.$Reduction;
					
					//JE DEFINIS LA NOUVELLE LARGEUR DE L'IMAGE :
					 $NouvelleLargeurImage=(($width * $Reduction) / 100);
					 $NouvelleLargeurico = (($width * $Reductionico) / 100);
					 
					 //nouvelle hauteur
					$NouvelleHauteurImage=(($height*$Reduction)/100);
		  //nouvelle hauteur
					$NouvelleHauteurico=(($height* $Reductionico)/100);
 
				}
				//elle est moins large mais plus haute
				elseif($width<=800 || $height>600)
				{
				/************************************/
				/*  redimensionnenet proportionnel  */
				/*									*/
				/************************************/

					$kH=$height;
					$NouvelleTailleImage = 600;
					$NouvelleTailleico = 80 ;
					//JE CALCULE LE POURCENTAGE DE REDUCTION :
					$Reduction = ( ($NouvelleTailleImage * 100)/$kH );
					$Reductionico = ( ($NouvelleTailleico * 100)/$kH );
					
					//echo'reduction'.$Reduction;
					
					//JE DEFINIS LA NOUVELLE LARGEUR DE L'IMAGE :
					 $NouvelleLargeurImage=(($width * $Reduction) / 100);
					 $NouvelleLargeurico = (($width * $Reductionico) / 100);
					 
					 //nouvelle hauteur
					$NouvelleHauteurImage=(($height*$Reduction)/100);
				  //nouvelle hauteur
					$NouvelleHauteurico=(($height*$Reductionico)/100);
 
				}
			 
			 $NouvelleImage = imagecreatetruecolor($NouvelleTailleImage , $NouvelleLargeurImage) or die ("Erreur1");
			 $Nouvelleico = imagecreatetruecolor($NouvelleTailleico , $NouvelleLargeurico) or die ("Erreur2");

  //PUIS JE COPIE ET JE REECHANTILLONNE L'IMAGE DE DEPART :
    imagecopyresampled($NouvelleImage , $uploaded,0,0, 0,0, $NouvelleLargeurImage , $NouvelleHauteurImage, $width,$height);
	imagecopyresampled($Nouvelleico , $uploaded,0,0, 0,0, $NouvelleLargeurico , $NouvelleHauteurico, $width,$height);
			} 
		
			//echo'rep + file name='.$rep.$file_name;
			//Création de l'image "normale" pour flash
			//$flash = imagecreatetruecolor(600, 450);
			//imagecopyresampled($flash, $uploaded, 0, 0, 0, 0, 600, 450, $width, $height);
			
			//Création de la miniature
			//$thumb = imagecreatetruecolor(81, 61);
			//imagecopyresampled($thumb, $uploaded, 0, 0, 0, 0, 81, 61, $width, $height);
			
			//enregistrement ds images
			imagejpeg($uploaded, $rep.$file_name."_b.jpg");		//originale
			imagejpeg($NouvelleImage, $rep.$file_name.".jpg");			//image flash
			imagejpeg($Nouvelleico, $rep.$file_name."_th.jpg");		//miniature
			
return $file_name.'.'.$ext;
}


et ensuite tu enrgistre dans ta BD $image qui contien le chemein de ton image

pour l'afficher tu fait une simple boucle
0