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 :
Puis le second, qui fonctionne parfaitement pour uploader une image sur le serveur ftp (et seulement cela)
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&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&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>