Aller au contenu

Appeler plusieurs fois une fonction


Sujets conseillés

Posté

Bonjour, j'ai mis en place un script d'upload d'image, le code de ce script est mit dans un ficher, Dans un autre fichier, je veux y afficher le contenu pour qu'on puisse uploader les images. Seulement il faut que je l'affiche 3 fois dans ma page pour pouvoir mettre 3 articles à jours en changeant les images à chaque fois, le problème c'est que lorsque je veux le mettre 2 fois j'ai ce code d'erreur:

Fatal error: Cannot redeclare get_extension() (previously declared in /homepages/45/d237713167/htdocs/blue/admin/index.php:87) in /homepages/45/d237713167/htdocs/blue/admin/index.php on line 247

Je ne sais pas du tout comment faire pour appeler la fonction get_extension plusieurs fois....

Voici le contenu du fichier ou j'ai mis le script:

<?php
/**
* Script d'upload d'image PHP
* http://damienalexandre.fr/
* Novembre 2007 - v1.3
* http://damienalexandre.fr/Upload-d-image-en-PHP.html
*/
get_extension($nom) {
$nom = explode(".", $nom);
$nb = count($nom);
return strtolower($nom[$nb-1]);
}

// --------------------- Options diverses //

// Extensions images autorisé (pour le moment, que du jpeg)
$extensions_ok = array('jpg', 'jpeg');
// MimeType autorisé
/* 1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, 7 = TIFF (Ordre des octets Intel), 8 = TIFF (Ordre des octets Motorola), 9 = JPC, 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC, 14 = IFF */
$typeimages_ok = array(2);

$taille_ko = 1024; // Taille en kilo octect (ko)
$taille_max = $taille_ko*1024; // En octects
$dest_dossier = 'img/'; // Creez ce dossier et chmoodez le !
print_r($_FILES['photo']);
if(isset($_FILES['photo'])) // Formulaire envoyé
{
// Les erreurs que PHP renvoi
if($_FILES['photo']['error'] !== "0") {
switch ($_FILES['photo']['error']) {
case 1:
$erreurs[] = "Votre image doit faire moins de $taille_ko Ko !";
break;
case 2:
$erreurs[] = "Votre image doit faire moins de $taille_ko Ko !";
break;
case 3:
$erreurs[] = "L'image n'a été que partiellement téléchargé.";
break;
case 4:
$erreurs[] = "Aucun fichier n'a été téléchargé.";
break; // Pas de 5, ne pas demander pourquoi (voir doc PHP)
case 6:
$erreur[] = "Un dossier temporaire est manquant.";
break;
case 7:
$erreurs[] = "Ãchec de l'écriture du fichier sur le disque.";
break;
}
}
// getimagesize arrive à traiter le fichier ?
if(!$getimagesize = getimagesize($_FILES['photo']['tmp_name'])) {
$erreurs[] = "Le fichier n'est pas une image valide.";
}
// on vérifie le type de l'image
if( (!in_array( get_extension($_FILES['photo']['name']), $extensions_ok ))
or (!in_array($getimagesize[2], $typeimages_ok )))
{
foreach($extensions_ok as $text) { $extensions_string .= $text.', '; }
$erreurs[] = 'Veuillez sélectionner un fichier de type '.substr($extensions_string, 0, -2).' !';
}
// on vérifie le poids de l'image
if( file_exists($_FILES['photo']['tmp_name'])
and filesize($_FILES['photo']['tmp_name']) > $taille_max)
{
$erreurs[] = "Votre fichier doit faire moins de $taille_ko Ko !";
}

// copie du fichier si aucune erreur !
if(!isset($erreurs) or empty($erreurs))
{
$dest_fichier = basename($_FILES['photo']['name']);
$dest_fichier = strtr($dest_fichier, 'ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃà áâãÀåçÚéêëìíîïðòóÎõöùúûÌÜÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
// un chtit regex pour remplacer tous ce qui n'est ni chiffre ni lettre par "_"
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);

// pour ne pas ecraser un fichier existant
while(file_exists($dest_dossier . $dest_fichier)) {
$dest_fichier = rand().$dest_fichier;
}


function redimage($img_src,$dst_w,$dst_h) {
// Lit les dimensions de l'image
$size = GetImageSize($img_src);
$src_w = $size[0]; $src_h = $size[1];
// Teste les dimensions tenant dans la zone
$test_h = round(($dst_w / $src_w) * $src_h);
$test_w = round(($dst_h / $src_h) * $src_w);
// Si Height final non précisé (0)
if(!$dst_h) $dst_h = $test_h;
// Sinon si Width final non précisé (0)
elseif(!$dst_w) $dst_w = $test_w;
// Sinon teste quel redimensionnement tient dans la zone
elseif($test_h>$dst_h) $dst_w = $test_w;
else $dst_h = $test_h;

// Affiche les dimensions optimales
echo "WIDTH=".$dst_w." HEIGHT=".$dst_h;
}




// copie du fichier
if(move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier)) {
$valid[] = "Image uploadé avec succés (<a href='".$dest_dossier . $dest_fichier."'>Voir</a>)";
} else {
$erreurs[] = "Impossible d'uploader le fichier.<br />Veuillez vérifier que le dossier ".$dest_dossier." existe avec un chmod 755 (ou 777).";
}
}
}
?>

<form method="POST" action="" enctype="multipart/form-data">
<?php
if(!empty($erreurs)) {
echo '<ul class="erreur">';
foreach($erreurs as $erreur) {
echo '<li>'.$erreur.'</li>';
}
echo '</ul>';
}
if(!empty($valid)) {
echo '<ul class="validation">';
foreach($valid as $text) {
echo '<li>'.$text.'</li>';
}
echo '</ul>';
}

?>
<fieldset>
<legend>Envoi d'image</legend>
<p>
<label for="photo">Image : </label>
<input type="file" name="photo" id="photo" />
</p>
<p>
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $taille_max; ?>" />
<input type="submit" name="envoi" value="Envoyer l'image" />
</p>
</fieldset>
</form>

Voici le contenu du fichier ou je veux faire apparaître le script 3 fois:

<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test</title>
<meta name="keywords" content="blue, marble, design, theme, web, free templates, website templates, CSS, HTML" />
<meta name="description" content="Blue Marble Theme is a free website template provided by templatemo.com" />
<link href="templatemo_style.css" rel="stylesheet" type="text/css" />

<link rel="stylesheet" href="nivo-slider.css" type="text/css" media="screen" />
<script src="js/jquery.min.js" type="text/javascript"></script>
<script src="js/jquery.nivo.slider.js" type="text/javascript"></script>



</head>




<body>

<div id="templatemo_header_wrapper">
<div id="templatemo_header">

<div id="site_title">
<a href="http://www.templatemo.com"><span>YOUR TAGLINE GOES HERE</span></a>
</div> <!-- end of site_title -->

<div id="social_box">

<a href="http://www.facebook.com/profile.php?id=1261530221" target="_blank"><img src="images/facebook.png" alt="facebook" /></a><p>
  <h5>Rejoignez-nous</h5>
</div>

<div id="templatemo_menu">
<ul>
<li><a href="index.html" class="current">Accueil</a></li>
<li><a href="about.html">Acc?/a></li>
<li><a href="gallery.html">Photos</a></li>
<li><a href="gallery.html">Lostra</a></li>
<li><a href="gallery.html">Le Cara?</a></li>
<li><a href="contact.html">Contact</a></li>
</ul>
</div> <!-- end of templatemo_menu -->

</div> <!-- end of header -->
</div> <!-- end of header wrapper -->

<div id="templatemo_main_wrapper">
<div id="templatemo_main">

<div id="templatemo_content">
<h2>Mise à jour du site</h2>
<div class="cleaner h40"></div>


<div id="contact_form">

<img src="images/edition1.gif" alt="Moussier Tombola" />
<form method="POST" action="add.php">

<input type="text" name="titre" size="20" value="titre du site" maxlength="70"> <br><textarea name="url" size="20" value="url du site" maxlength="255"></textarea><br>

<input type="submit" value="Envoyer" name="envoyer">

</form>
[color="#006400"][size="5"][b]Ici je veux mettre le script[/b][/size][/color]
<img src="images/edition2.gif" alt="Moussier Tombola" />

<form method="POST" action="add2.php">

<input type="text" name="titre" cols="200" value="titre du site" maxlength="70"> <textarea name="url" cols="200" value="url du site" maxlength="255"></textarea><br>

<input type="submit" value="Envoyer" name="envoyer">

</form>

<br />
[color="#006400"][size="5"][b]Ici je veux mettre le script[/b][/size][/color]



<img src="images/edition3.gif" alt="Moussier Tombola" />

<form method="POST" action="add3.php">

<input type="text" name="titre" size="20" value="titre du site" maxlength="70"> <textarea name="url" size="20" value="url du site" maxlength="255"></textarea><br>

<input type="submit" value="Envoyer" name="envoyer">

</form>

[color="#006400"][size="5"][b]Ici je veux mettre le script[/b][/size][/color]

<img src="images/edition4.gif" alt="Moussier Tombola" />

<form method="POST" action="playlistupdate.php">

<textarea name="url" size="20" value="url du site" maxlength="1000"></textarea><br>

<input type="submit" value="Envoyer" name="envoyer">

</form>


</div> <!-- end of content -->
</div>

<div id="templatemo_sidebar">

<div class="sidebar_box">
<h4>Recent comments</h4>
<div class="recent_comment_box">
NE PAS OUBLIER DE CLIQUER SUR VALIDER LORSQUE LE CHAMP TEXTE EST REMPLIT!!!!
</div>


</div>



</div>

<div class="cleaner"></div>
</div> <!-- end of main -->
</div> <!-- end of main wrapper -->

<div id="templatemo_footer_wrapper">
<div id="templatemo_footer">



<div class="cleaner"></div>
</div> <!-- end of templatemo_footer -->
</div> <!-- end of templatemo_footer wrapper -->

</body>
</html>

Merci à tout le monde pour votre aide qui me sera très precieuse. :)

Posté

ton script, tu l'appelles comment ? avec un include ou un require ?

si c'est ça, il faut mettre à la place include_once ou require_once

Posté

Ça ne marche pas dans quel sens ? Si c'est parce que le script ne s'exécute qu'une fois, c'est qu'il faut séparer l définition de la fonction (à n'insérer qu'une fois) de son appel (à insérer autant de fois que tu le souhaites).

  • 2 months later...
Posté

bonjour,

Ce message d'erreur exprime une erreur de syntaxe. Il montre que quand tu fais plusieurs inclusion de la page du script d'upload. Si tu l'inclue plusieurs fois de la manière dont tu le fais, le script trouve plusieurs fonctions différentes portant le même nom. Du coup il arrête tout et renvoie une erreur fatale.

Je remarque également une incohérence au niveau de l'endroit de l'appel à ton script. C'est au moment de la validation de ton formulaire (sur la page add.php) qu'il faut l'utiliser et non juste après le code HTML de ton formulaire. Sur cette page tu n'as ni besoin de faire appel à ta page de fonctions, ni de l'utiliser.

Posté

include_once et require_once devraient fonctionner, si tu peux l'entourer, c'est moche mais ça fonctionnera :

if(!function_exists('get_extension')){
function get_extension(){
//
}
}

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...