Notice: Undefined index: champform in

bcdvd
Invité n'ayant pas de compte PHPfrance

14 juin 2006, 11:16

Bonjour ;

J'ai un probleme sur une page qui me sert à créer des dossiers sur mon serveur. Voici le code :
<form id="form1" name="form1" method="POST">
  <label></label>
  <label>
  <input name="champform" type="text" id="champform" />
  <input type="submit" name="Submit" value="Envoyer" />
</label>
<?php  
$rep=$_POST['champform']; 
if(!file_exists($rep)) mkdir ("./$rep", 0777);
?>
</form>
En fait tout marche bien mais au premier lançement de ma page j'ai un message d'erreur du type :

Code : Tout sélectionner

Notice: Undefined index: champform in c:\web\sim\2.php on line 18
Je pense qu'il faut déclarer "champform" mais si c'est ça je n'arrive pas à trouver le code qui va bien

Si quelqu'un à une idée je suis preneur

Merci d'avance à tous

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

14 juin 2006, 11:19

C'est parce que tu appelle l'index 'champform' de $_POST sans te soucier de vérifier si celui-ci existe (sur les version récentes de php cela génère un warning lorsqu'ils ne sont pas définis). Quand tu arrives sur le formulaire par l'url, ton $_POST ne contient rien, d'où le message.

Il te suffit donc juste de tester si l'index est défini avec isSet() pour pouvoir l'utiliser :
if (isSet($_POST['champform'])) { // l'index est bien défini
  $rep=$_POST['champform']; 
  .. 
}
else { // éventuellement
  ..
} 

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 juin 2006, 11:20

C'est juste qu'au 1er chargement de ta page, comme tu n'as pas encore validé le formulaire, champform est vide.

Pour éviter l'erreur, il faut que tu testes si ce champs existe ou non avec isset.
<?php
  //test l'existence de champform
  if (isset($_POST['champform'])) {
    $rep=$_POST['champform'];
    if(!file_exists($rep)) 
      mkdir ("./$rep", 0777);
  }
?> 
D'une manière générale, il faut toujours tester l'existence des valeurs saisies dans un formulaire ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

bcdvd
Invité n'ayant pas de compte PHPfrance

14 juin 2006, 11:28

ca marche super bien, merci a vous 2

Cordialement