probleme array

Eléphant du PHP | 299 Messages

23 janv. 2010, 23:44

Salut a tous!

J' ai l' habitude d' utiliser le tp de script de news, et j' ai decidé de le melanger avec celui sur l' upload.

Ca fonctionne a un detail prés, j' ai dans ma bdd les chaps ID CAT et IMAGE

IMAGE est juste censé enregistrer le nom de l' image modifié. Je ne sais pas pourquoi j' ai juste un gros "Array" a la place du nom de l' image.

id bigint(20)
cat varchar(255)
image text


voici le code:
<?php
//-----------------------------------------------------
// Vérification 1 : est-ce qu'on veut poster une cat ?
//-----------------------------------------------------
if (isset($_POST['titre2']))
{
    $titre2 = addslashes($_POST['titre2']);
    $photo = $_FILES['photo'];
	$dossier = '../themes/'.$config['theme'].'/images/miniatures/';
	$fichier = time()."_".$_FILES['photo']['name'];
	$taille_maxi = 5000000;
	$taille = filesize($_FILES['photo']['tmp_name']);
	$extensions = array('.png', '.gif', '.jpg', '.jpeg');
	$extension = strrchr($_FILES['photo']['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...<br><br> Taille de la photo maxi : 500 Ko';
}
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);
	 }
     move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $fichier) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
	 
?>
	
	<?php
    // On vérifie si c'est une modification de cat ou pas
    if ($_POST['id_cat'] == 0)
    {
        // Ce n'est pas une modification, on crée une nouvelle entrée dans la table
        mysql_query("INSERT INTO cat VALUES('', '" . $titre2 . "', '" . $_FILES['photo'] . "')");
		
		
		
    }
    else
    {
        // On protège la variable "id_cat" pour éviter une faille SQL
        $_POST['id_cat'] = addslashes($_POST['id_cat']);
        // C'est une modification, on met juste à jour le titre et le contenu
        mysql_query("UPDATE cat SET titre='" . $titre2 . "', image='" . $photo . "' WHERE id='" . $_POST['id_cat'] . "'");
    }
}
 
//--------------------------------------------------------
// Vérification 2 : est-ce qu'on veut supprimer une cat ?
//--------------------------------------------------------
if (isset($_GET['supprimer_cat'])) // Si on demande de supprimer une cat
{
    // Alors on supprime la cat correspondante
    // On protège la variable "id_cat" pour éviter une faille SQL
    $_GET['supprimer_cat'] = addslashes($_GET['supprimer_cat']);
    mysql_query('DELETE FROM cat WHERE id=\'' . $_GET['supprimer_cat'] . '\'');
}
?>
<table width="700">
  <tr>
<th width="112" align="left" valign="top">Modifier</th>
<th width="138" align="left" valign="top">Supprimer</th>
<th width="434" align="center" valign="top">Titre</th>
</tr>
<?php
$retour = mysql_query('SELECT * FROM cat ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les cat
{
?>
<tr>
<td align="left" valign="top"><?php echo '<a href="rediger_cat.php?modifier_cat=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td align="left" valign="top"><?php echo '<a href="liste_cat.php?supprimer_cat=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<td align="left" valign="top"><?php echo stripslashes($donnees['cat']); ?></td>
</tr>
<?php
} // Fin de la boucle qui liste les cat
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 janv. 2010, 00:11

C'est parce que lorsque tu insères ton enregistrement dans ta base, à la place du nom de l'image, tu passes la valeur $_FILES['photo'] qui est un tableau... du coup php concatene la chaine "array()" à ta requête.

Il te faut utiliser $_FILES['photo']['name'] dans ta requête si tu veux récupérer le nom du fichier uploadé :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...