Interface d'administration avec upload images

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par cybereco, 22 Août 2014.

  1. cybereco
    cybereco Nouveau WRInaute
    Inscrit:
    19 Août 2011
    Messages:
    32
    J'aime reçus:
    0
    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>
    
    
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 781
    J'aime reçus:
    240
  3. cybereco
    cybereco Nouveau WRInaute
    Inscrit:
    19 Août 2011
    Messages:
    32
    J'aime reçus:
    0
    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.
     
  4. pprem
    pprem WRInaute discret
    Inscrit:
    15 Décembre 2008
    Messages:
    149
    J'aime reçus:
    0
    en gros tu nous demandes de l'écrire pour toi ?

    je comprends pas trop ta question.
     
  5. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 781
    J'aime reçus:
    240
    Avec une méga faille dans le code d'upload.
     
  6. cybereco
    cybereco Nouveau WRInaute
    Inscrit:
    19 Août 2011
    Messages:
    32
    J'aime reçus:
    0
    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...
     
  7. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 781
    J'aime reçus:
    240
    La faille c'est que le script check l'extension mais pas le mime type.
     
  8. baud74
    baud74 WRInaute impliqué
    Inscrit:
    21 Juillet 2014
    Messages:
    586
    J'aime reçus:
    0
    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.
     
Chargement...
Similar Threads - Interface administration upload Forum Date
Google change l'interface des résultats Google : l'entreprise, les sites web, les services 13 Juin 2019
Avis sur nouvelle interface Google Search Console Crawl et indexation Google, sitemaps 27 Septembre 2018
lisibilité/usability interface web. Demandes d'avis et de conseils sur vos sites 6 Février 2018
Possible de fixer le Serial number DNS avec l'interface Gandi expert ? Administration d'un site Web 13 Février 2017
Disparition Campagne Emailing dans nouvelle interface GA ? Google Analytics 2 Mars 2015
Nouvelle interface : Comment Isoler les visites arrivées par une expression clé ? Google Analytics 24 Septembre 2014
Avis sur l'interface d'un blog Fr/En (blog perso, sujet pro) Demandes d'avis et de conseils sur vos sites 2 Juin 2014
[Interface Google Analytics] Manque d'infos suite à la nouvelle version... Google Analytics 10 Mai 2012
Nouvelle interface webmaster tools et robot.txt Crawl et indexation Google, sitemaps 6 Octobre 2011
[résolu] [Paypal] Forcer la langue de l'interface client Monétisation d'un site web 25 Août 2011
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice