Interface d'administration avec upload images

Nouveau WRInaute
Bonjour,

Je souhaite créer une interface d'administration de mon site dans laquelle, en plus d'avoir un titre et un article (jusqu'ici pas de problème), il soit aussi possible d'uploader une photo sur mon serveur ftp dans un dossier nommé "img" et envoyer son chemin dans la table de ma base de données.

Je pensais y arriver en faisant un mixte de mes deux codes ci-dessous, mais sans succès.

Mes compétences sont limitées dans ce domaine, alors votre aide me serait d'un très précieuse.

Voici mon code upload.php :

Code:
<!DOCTYPE html>
<!--[if lt IE 9]><html lang="fr-FR" class="oldie"><![endif]-->
<!--[if (gte IE 9) | !(IE)]><!--><html lang="fr-FR" class="modern"><!--<![endif]-->
<head>
<meta charset="iso-8859-1" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!--[if IE]><meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'><![endif]-->
<title>Administration site </title>

   <!--
       Intégration de tinyMCE : voir l'autre tutoriel sur le blog
       -->
	<script type="text/javascript" src="administration/tiny_mce/tiny_mce.js"></script>
       <!--
       Option de mise en forme de tinyMce
       -->
	<script type="text/javascript">
	tinyMCE.init({
	mode : "textareas",
	elements : "post_title, post_category, photo, legende, post_excerpt, post_content", 
	theme : "advanced",
	language : "fr",
	editor_selector : "mceEditor",
	editor_deselector : "mceNoEditor",
	plugins : "autolink,lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,wordcount,advlist,autosave,visualblocks",

			// les outils à afficher
			theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
			theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
			theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
			theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak,restoredraft,visualblocks",
			
			// emplacement de la toolbar
			theme_advanced_toolbar_location : "top",  
			// alignement de la toolbar
			theme_advanced_toolbar_align : "left",
			// positionnement de la barre de statut
			theme_advanced_statusbar_location : "bottom", 
			// permet de redimensionner la zone de texte
			theme_advanced_resizing : true,
			
			// chemin vers le fichier css
			content_css : " ./design-tiny.css,", 
			// taille disponible
			theme_advanced_font_sizes: "10px,11px,12px,13px,14px,15px,16px,17px,18px,19px,20px,21px,22px,23px,24px,25px", 
			// couleur disponible dans la palette de couleur
			theme_advanced_text_colors : "33FFFF, 007fff, ff7f00", 
			// balise html disponible
			theme_advanced_blockformats : "h1, h2,h3,h4,h5,h6",
			// class disponible
			theme_advanced_styles : "Tableau=textTab;TableauSansCadre=textTabSansCadre;", 
			// possibilité de définir les class et leurs styles directement avec le code suivant
			/*
			style_formats : [
				{title : 'Bold text', inline : 'b'},
				{title : 'Red text', inline : 'span', styles : {color : '#ff0000'}},
				{title : 'Red header', block : 'h1', styles : {color : '#ff0000'}},
				{title : 'Example 1', inline : 'span', classes : 'example1'},
				{title : 'Example 2', inline : 'span', classes : 'example2'},
				{title : 'Table styles'},
				{title : 'Table row 1', selector : 'tr', classes : 'tablerow1'}
			],
			*/
		});
	</script>
<?php include("http://www.monsite.fr/wp-content/inc/head.php"); ?>

            
                        
                     
                        <a href="#" id="open-pageslide" data-effect="st-effect"><i class="icomoon-menu"></i></a>
                        
                </div><!-- .wrapper -->
                </div><!-- .top-strip -->
                
                
<?php include("http://www.monsite.fr/wp-content/inc/logo.php"); ?>
                
								<div class="no-print animated main-menu-container"><nav class="wrapper main-menu" role="navigation" itemscope="itemscope" itemtype="http://schema.org/SiteNavigationElement">
                <ul id="main-nav" class="menu"><li id="menu-item-1094" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children"><a href="upload.php?action=creer">Ajouter Article</a>

<li id="menu-item-987" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children"><a href="upload.php?action=gerer">Modifier Article</a>


								</ul></div>
</li>
</ul>
              </nav></div>            
            </header><!-- #masthead -->	
                


            <header class="wrapper entry-header page-header">
                
                
                <div class="title-with-sep single-title">
                    <h1 class="entry-title" itemprop="headline">Page d'administration de www.monsite.fr</h1>
                </div>
            </header>
<div class="wrapper">
<?php
	/*
	Connexion à la BDD
	*/
	require "connect.php";
	mysql_connect($adresse, $nom, $motdepasse);
	mysql_select_db($database);
	

	/*
	Si une action est posté par l'url, on veut faire qqch, on fait un switch pour prévoir tout les cas :
	*/
	if(isset($_GET['action']))
	{
		$action = addslashes(htmlentities($_GET['action']));
		
		
		switch ($action){
		
		/*
		Action = creer, on veut faire une nouvelle news
		*/
		case "creer":
		/*
		Si les variables sont déja posté, on les stockes dans la BDD 
		*/
		if(isset($_POST['post_title']) AND isset($_POST['post_category']) AND isset($_POST['photo']) AND isset($_POST['legende']) AND isset($_POST['post_excerpt']) AND isset($_POST['post_content'])){
		
		extract($_POST);
		$post_title = addslashes(htmlentities($post_title));
		$post_category = addslashes(htmlentities($post_category));
		$photo = addslashes(htmlentities($photo));
		$legende = addslashes(htmlentities($legende));
		$post_excerpt = addslashes($post_excerpt);
		$post_content = addslashes($post_content);
				$sql = 'INSERT INTO mary_posts(post_title, post_category, photo, legende, post_excerpt, post_content) VALUES ("'.$post_title.'", "'.$post_category.'", "'.$photo.'", "'.$legende.'", "'.$post_excerpt.'", "'.$post_content.'") ';
		$req = mysql_query($sql) or die(mysql_error());
		echo "<a href=\"upload.php\">Article publié avec succès</a>";
		
		}
		/*
		Les variables ne sont pas posté, on affiche le formulaire pour créer la news
		*/
		else
		{
		
		?>
		<form method="post" action="upload.php?action=creer">
		
		<table><td><h3>Titre de l'article : </h3> <input type="text" size="100" name="post_title" /></td></table><br/>
		<table><td><h3>Catégorie : </h3> <select name="post_category">
<option value="">Selectionnez une catégorie</option>
<?php
//On selectionne les données
$post_category = mysql_query("SELECT nom_categorie, id FROM mary_categories ORDER BY id ASC");
 
while($affiche = mysql_fetch_array($post_category))
{
	echo '<option value="'.$affiche['nom_categorie'].'">'.$affiche['nom_categorie'].'</option>';
}	
?>
</select>
</p></td></table><br/>

<table><td><h3>Sélectionnez une photo : </h3> <br><input type="hidden" name="MAX_FILE_SIZE" value="1500000">
     Fichier : <input type="file" name="photo"></td></table><br/>

		<table><td><h3>Légende photo : </h3> <input type="text" size="100" name="legende" /></td></table><br/>
		<h1>Chapô :</h1><br/><textarea name="post_excerpt" class="mceEditor"></textarea><br/>
		<h1>Article :</h1><br/><textarea name="post_content" class="mceEditor"></textarea><br/>
		<input type="submit" value="envoyer"/>
		</form>
		

		
		<?php
		}
		break; // creer
		
		/*
		Action = Gerer, on veut lister les news dans le but de les modifier/supprimer
		*/
		case "gerer":
		$sql = 'SELECT * FROM mary_posts ORDER BY id DESC';
		$req = mysql_query($sql) or die(mysql_error());
		
		echo "<ul>";
		while($data = mysql_fetch_assoc($req)){
			
			echo '<li style="list-style-type:disc"><strong>'.$data['id'].'</strong> -- '.$data['post_title'].' -- <a href="upload.php?action=modifier&amp;id='.$data['id'].'">Modifier</a> </li>';
			
		}
		echo "</ul>";
		break;
		
		/*
		Action = Modifier, on veut modifier une news
		*/
		case "modifier":
		
		/*
		Si l'id existe, tout se passe bien :
		*/
		if(isset($_GET['id']))
		{
		$id = intval(htmlentities($_GET['id']));
		
			/*
			Si des données POST sont déja envoyer, il faut les stocké dans la BDD
			*/
		if(isset($_POST['post_title']) AND isset($_POST['post_category']) AND isset($_POST['photo']) AND isset($_POST['legende']) AND isset($_POST['post_excerpt']) AND isset($_POST['post_content'])){
			
				extract($_POST);
		$post_title = addslashes(htmlentities($post_title));
		$post_category = addslashes(htmlentities($post_category));
		$photo = addslashes(htmlentities($photo));
		$legende = addslashes(htmlentities($legende));
		$post_excerpt= addslashes($post_excerpt);
		$post_content = addslashes($post_content);
				$sql = 'UPDATE mary_posts SET post_title="'.$post_title.'", post_category="'.$post_category.'", photo="'.$photo.'", legende="'.$legende.'", post_excerpt="'.$post_excerpt.'", post_content="'.$post_content.'" WHERE id='.$id.'';
				$req = mysql_query($sql) or die(mysql_error());
				
				echo 'Ok, article modifié avec succès';
				
				}
				
			/*
			Les données POST n'existe pas, on recupére les données de la news pour les réafficher dans le formulaire
			*/
			else
			{

					
				$sql = 'SELECT * FROM mary_posts WHERE id='.$id.'';
				$req = mysql_query($sql) or die(mysql_error());
				$data = mysql_fetch_assoc($req);
					
				?>
				<form method="post" action="upload.php?action=modifier&amp;id=<?php echo $data['id'];?>"><div align="center">
					
				<table><td><h3>Titre article : </h3>  <br/><input type="text" size="100" name="post_title" value="<?php echo $data['post_title'];?>"/></td></table><br/>
				<table><td><h3>Catégorie : </h3>  <br/><input type="text" size="100" name="post_category" value="<?php echo $data['post_category'];?>"/></td></table><br/>

				<table><td><h3>Légende photo : </h3>  <br/><input type="text" size="100" name="legende" value="<?php echo $data['legende'];?>"/></td></table><br/>

				<h1>Chapô :</h1><br/><textarea name="post_excerpt" class="mceEditor"><?php echo $data['post_excerpt'];?></textarea><br/>
				<h1>Article :</h1><br/><textarea name="post_content" class="mceEditor"><?php echo $data['post_content'];?></textarea><br/>
				<input type="submit" value="envoyer"/>
				</form>
					
				<?php
			
			}
		}
		
		/*
		Si l'id n'existe pas, on a un problème, on peut rien faire
		*/
		else
		{
		echo "Erreur";
		}
		break; // fin cas modifier
		
		
		/*
		Action = supprimer, on supprime une news
		*/
		case "supprimer":
		
		/*
		Si l'i existe, on fait une simple requète pour supprimer la news
		*/
		if(isset($_GET['id']))
		{
		$id = intval(htmlentities($_GET['id']));
		
		$sql ='DELETE FROM mary_posts WHERE id='.$id.'';
		
		$req= mysql_query($sql) or die(mysql_error());
		echo '<a href="upload.php">Article supprimé avec succès</a>';
		
		}
		/*
		Pas d'id ? Probleme
		*/
		else
		{
		echo "erreur";
		}
		break;
		
		}
	
	}
	/*
	Dans le cas ou il n'y a pas d'action posté dans l'url, on affiche nos choix via une liste
	*/
	else
	{
	?>
	
	<?
	}
	
	
	
	
	?>

</body>
</html>

Puis le second, qui fonctionne parfaitement pour uploader une image sur le serveur ftp (et seulement cela)

Code:
<?php

$ftp = ftp_ssl_connect("ftp", "21")or exit('Erreur : connexion au serveur FTP impossible.');
ftp_login($ftp, "monsite", "mdp");

if(isset($_POST)){
if(isset($_FILES ['photo']) AND $_FILES ['photo']['error']==0){
if($_FILES ['photo']['size']<=150240000){
$infos = pathinfo($_FILES ['photo']['name']);
$extensions = $infos['extension'];
$extensions_autosrisees = array('jpg', 'jpeg', 'png', 'gif', 'JPG');
if(in_array($extensions, $extensions_autosrisees )){
$nom = ''.time().'_'.date('Y-m-d').'.'.$extensions;

move_uploaded_file($_FILES ['photo']['tmp_name'],'img/'.basename($nom));
echo "<center> <img src=http://www.monsite.fr\img/".$nom."><br/><b>http://www.monsite.fr/img/$nom</b></center>";

}
}
}
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head profile="http://gmpg.org/xfn/11">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Upload images</title>
</head>
<body>







<form method="POST" action="upload-image-seule.php" enctype="multipart/form-data">
     <!-- On limite le fichier à 100Ko --><div align="center"><br><br>
     <input type="hidden" name="MAX_FILE_SIZE" value="1500000">
     Fichier : <input type="file" name="photo">
     <input type="submit" name="envoyer" value="Envoyer le fichier"></div>
</form>
</body>
</html>
 
Nouveau WRInaute
Je viens de jeter un oeil sur l'usage de elFinder ou KCFinder et je n'ai pas l'impression qu'ils répondent à mes besoins.
 
Nouveau WRInaute
S'il n'y avait pas de faille dans le code, ça fonctionnerait, ça semble évident.
Je me répète, mes compétences sont limitées dans l'écriture de scripts (ce n'est pas mon job).

En allant sur un forum, en général, c'est souvent pour y obtenir de l'aide (je n'ai pas dit de tout écrire à ma place). On espère être aiguillé par des gens qui ont à coeur de partager leurs compétences, enfin a priori...
 
WRInaute impliqué
un gif avec du code php dedans aura un mime type accepté, donc le bon moyen de se protéger est de désactiver l'exécution du php dans le repertoire où sont stockés les fichiers.
 
Discussions similaires
Haut