Page 1 sur 1

une variable qui ne récupère pas la bonne valeur

Posté : 02 déc. 2005, 19:19
par Zurg
Bonjour tout le monde ;),

je ne dois pas avoir les yeux en face des trous ce soir. Je vous explique mon problème :

Nous sommes sur une page artAjout.php qui traite l'envoi d'un formulaire d'ajout d'article dans une base de données.
Toutes les variables passées (par la méthode POST) sont récupérées, sauf une: $photo qui récupère la variable $_POST['photo'], et dont la valeur est toujours photo000.jpg (à l'éxécution).

Quelqu'un pourrait-il m'expliquer pourquoi ?

Un peu de code : artAjout.php
<?php 
require_once('../../Connections/cnn.php');

// déclaration des variables
if(!isset($_POST['ajoutArticle'])) $ajoutArticle=""; else $ajoutArticle=$_POST['ajoutArticle'];
if(!isset($_POST['reference'])) $reference=""; else $reference=$_POST['reference'];
if(!isset($_POST['titre'])) $titre=""; else $titre=$_POST['titre'];
if(!isset($_POST['auteur'])) $auteur=""; else $auteur=$_POST['auteur'];
if(!isset($_POST['description'])) $description=""; else $description=$_POST['description'];
if(!isset($_POST['prix'])) $prix=""; else $prix=$_POST['prix'];
if(!isset($_POST['rubriqueID'])) $rubriqueID=""; else $rubriqueID=$_POST['rubriqueID'];
if(!isset($_POST['photo'])) $photo=""; else $photo=$_POST['photo'];
$erreur_reference="";

// requête selection rubrik
mysql_select_db($database_cnn, $cnn);
$query_rsSelectTheme = "SELECT * FROM rubriks ORDER BY theme ASC";
$rsSelectTheme = mysql_query($query_rsSelectTheme, $cnn) or die(mysql_error());
$row_rsSelectTheme = mysql_fetch_assoc($rsSelectTheme);
$totalRows_rsSelectTheme = mysql_num_rows($rsSelectTheme);

// vérification statut
if (($logout=="444bcb3a3fcf8389296c49467f27e1d6") || ($_SESSION['statut']!="21232f297a57a5a743894a0e4a801fc3"))
	{
	session_unset();
	header("Location:login.php");
	}

// Ajout d'un nouvel article
if ($ajoutArticle=="ok")
	{
	//selection bdd
	mysql_select_db($database_cnn, $cnn);
	//vérifie si la reference existe déjà dans la base
	$query_rsReference="SELECT reference FROM articles WHERE reference='$reference'";
	$rsReference=mysql_query($query_rsReference, $cnn);
	$totalRows_rsReference=mysql_num_rows($rsReference);
	// si la reference n'existe pas encore, alors :
	if ($totalRows_rsReference==0)
		{
		//teste si un fichier photo est selectionné
		if ($photo!="")
			{
			copy($photo,'../../images/boutique/articles/big/'.$photo);
			}
			else
			{
			$photo="photo000.jpg";
				//photo par défaut
			}
		//enregistrement dans la base du nouvel article
		
				echo $photo;
		
		/*mysql_select_db($database_cnn, $cnn);
		$insertArticles="INSERT INTO articles (reference, libelle, auteur, description, rubrikID, prix, photo ) VALUES ('$reference', '$titre', '$auteur', '$description', '$rubriqueID', '$prix', '$photo_name')";
		mysql_query($insertArticles, $cnn) or die(mysql_error());
		// redirection vers la page articlesgestion.php
		

		?><script type="text/javascript" language="javascript">
					window.location.replace("index.php?page=a16f6c474611dbaad25a00be1d7457d9");
				</script><?php*/
		}
		//si la reference existe déjà, envoie un message d'erreur
		else
		{
		$erreur_reference=1;
		}
	}
// script d'affichage du message d'erreur
if ($erreur_reference==1)
	{
	?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
<link rel="stylesheet" type="text/css" href="../admin.css" />
</head>

<body>
	<p>La r&eacute;f&eacute;rence <?php echo $reference ?> existe d&eacute;j&agrave; dans notre base articles. <br>
	   choisissez une autre r&eacute;f&eacute;rence ou modifiez la fiche de l'article d&eacute;j&agrave; cr&eacute;&eacute;.<br>
	</p>
	
<?php 
	$erreur_reference=0; // R.A.Z du flag d'erreur
	}
	?>
<form action="index.php?page=a16f6c474611dbaad25a00be1d7457d9" method="post" enctype="multipart/form-data" name="form1">
  <br>
  <table width="90%" border="0" cellspacing="0" cellpadding="0">
    <tr> 
      <td width="2%"><img src="../../images/Tablo/hg.gif" /></td>
      <td colspan="2" class="bh">..:: Ajout d'un article dans la base ::..</td>
      <td width="3%"><img src="../../images/Tablo/hd.gif" /></td>
    </tr>
    <tr> 
      <td rowspan="7" class="bg">&nbsp;</td>
      <td width="48%" bgcolor="#FFFFFF" align="right"><strong>R&eacute;f&eacute;rence :</strong></td>
      <td width="47%" bgcolor="#FFFFFF">
<input name="reference" type="text" id="reference" size="30"></td>
      <td rowspan="7" class="bd">&nbsp;</td>
    </tr>
    <tr> 
      <td bgcolor="#FFFFFF" align="right"><strong>D&eacute;signation :</strong></td>
      <td bgcolor="#FFFFFF">
<input name="titre" type="text" id="titre2" size="30"></td>
    </tr>
    <tr> 
      <td bgcolor="#FFFFFF" align="right"><strong>Artiste/Auteur/Origine :</strong></td>
      <td bgcolor="#FFFFFF">
<input name="auteur" type="text" id="auteur2" size="50"></td>
    </tr>
    <tr> 
      <td bgcolor="#FFFFFF" align="right"><strong>Description :</strong></td>
      <td bgcolor="#FFFFFF">
<textarea name="description" cols="30" rows="4" id="textarea"></textarea></td>
    </tr>
    <tr> 
      <td bgcolor="#FFFFFF" align="right"><strong>Prix unitaire :</strong></td>
      <td bgcolor="#FFFFFF">
<input name="prix" type="text" id="prix2" size="6"> <strong>&euro; </strong></td>
    </tr>
    <tr> 
      <td bgcolor="#FFFFFF" align="right"><strong>Rubrique :</strong></td>
      <td bgcolor="#FFFFFF">
<select name="rubriqueID" id="select">
          <?php
do {  
?>
          <option value="<?php echo $row_rsSelectTheme['ID']?>"><?php echo $row_rsSelectTheme['theme']?></option>
          <?php
} while ($row_rsSelectTheme = mysql_fetch_assoc($rsSelectTheme));
  $rows = mysql_num_rows($rsSelectTheme);
  if($rows > 0) {
      mysql_data_seek($rsSelectTheme, 0);
	  $row_rsSelectTheme = mysql_fetch_assoc($rsSelectTheme);
  }
?>
        </select></td>
    </tr>
    <tr> 
      <td bgcolor="#FFFFFF" align="right"><strong>Photo :</strong></td>
      <td bgcolor="#FFFFFF">
<input name="photo" type="file" id="photo2" size="30"></td>
    </tr>
    <tr> 
      <td><img src="../../images/Tablo/bg.gif" /></td>
      <td colspan="2" class="bb" align="center"> <input type="submit" name="Submit" value="Ajouter"> 
        <input name="ajoutArticle" type="hidden" id="ajoutArticle2" value="ok"> 
      </td>
      <td><img src="../../images/Tablo/bd.gif" /></td>
    </tr>
  </table>
  <br>
</form>
</body>
</html>
<?php
mysql_free_result($rsSelectTheme);
?>
Apparemment la variable $photo ne remplit pas la condition $photo!="" , d'où cette valeur, mais pourquoi ?

Merci d'avance

Posté : 02 déc. 2005, 19:24
par ouckileou
Salut,

effectivement ta variable $photo doit être initialisée à vide ici :
if(!isset($_POST['photo'])) $photo=""; else $photo=$_POST['photo']; 
et donc prendre ensuite ta valeur par défaut

fais par exemple ceci en début de script :
echo '<pre>';
print_r($_POST);
echo '</pre>';
cela t'affichera directement le contenu de chaque variable POST, tu verras si $_POST['photo'] existe et ce qu'elle contient

Peut-être que ton champ de formulaire n'a pasle même nom ou qqchose comme ça :)

Posté : 02 déc. 2005, 19:33
par Zurg
Salut ouckileou,

alors j'ai fait un print_r($_POST); pas mal du tout cette petite fonction, je ne connaissait pas :), bref, effectivement je n'ai pas de variable photo j'obtiens ce petit tableau :
  • Array
    (
    [reference] => test
    [titre] => test
    [auteur] => test
    [description] => testtest
    [prix] => 102.00
    [rubriqueID] => 2
    [Submit] => Ajouter
    [ajoutArticle] => ok
    )
Mais j'ai vérifié, le nom du champ est bien photo, comme tu peux le voir puisque le formulaire est un peu plus bas...

J'avais bien pensé à une bêtise de ce genre, de ma part ça m'aurait pas étonné !

Mais là je ne vois pas

EDIT -> à la réflexion, la seule différence ave les autres champs, c'est son type : file, cela change-t-il quelque-chose?

Posté : 02 déc. 2005, 19:35
par ouckileou
Ton champ de formulaire est de type "file", les informations liées à ce fichier se trouvent donc dans le tableau $_FILE, et non $_POST

ressors le print_r() sur $_FILE cette fois, et tu devrais avoir tout ce que tu cherchais ;)

et si tu veux plus d'infos il y a un tuto dans la FAQ : "uploads de fichiers par HTTP"

Posté : 02 déc. 2005, 19:42
par Zurg
Ah oui, exact !!

Je pouvais toujours contempler mon code pendant des heures !! :shock:

Merci mille fois !

je vais egalement jeter un oeil dans la faq...

Et un [résolu] un ! :wink:

Posté : 02 déc. 2005, 20:16
par Zurg
Oups, j'ai parlé trop vite...

maintenant, je passe donc par la variable $_FILES[] , mais là j'ai une erreur : parse error ligne 16

c'est juste au début du script :
<?php 
require_once('../../Connections/cnn.php');
echo '<pre>';
print_r($_FILES);
echo '</pre>';
// déclaration des variables
if(!isset($_POST['ajoutArticle'])) $ajoutArticle=""; else $ajoutArticle=$_POST['ajoutArticle'];
if(!isset($_POST['reference'])) $reference=""; else $reference=$_POST['reference'];
if(!isset($_POST['titre'])) $titre=""; else $titre=$_POST['titre'];
if(!isset($_POST['auteur'])) $auteur=""; else $auteur=$_POST['auteur'];
if(!isset($_POST['description'])) $description=""; else $description=$_POST['description'];
if(!isset($_POST['prix'])) $prix=""; else $prix=$_POST['prix'];
if(!isset($_POST['rubriqueID'])) $rubriqueID=""; else $rubriqueID=$_POST['rubriqueID'];
if(!isset($_FILES['photo']['name'])) $photo=""; else 
	{
	$photo = $_FILES['photo']{'name']; // LIGNE 16
	$photo_name = basename($_FILES['photo']['name'];
	}
J'avoue que je ne comprends pas...

une idée ?

Posté : 02 déc. 2005, 20:21
par Zurg
Bon, je ne dis plus rien, j'ai honte... :oops:

c'était juste qq petites parenthèses...

je remets résolu, et je cours chez mon opticien...

@+ :wink: