Savoir si on a voulu uploadé un fichier - en php

salut, jai un formulaire avec 3 champs :
un titre, un contenu et une photo. le titre est obligatoire, par contre, il faut obligatoirement que le contenu ou la photo soit mise. si y a pas de photo, faut que y ait un contenu. Si y a pas de contenu, faut que y ait une photo. Mais jarive pas a verifier. Jai testé comme ceci :

$ok=true;
if(isset($_POST['titre']))
{
	if($_POST['titre']=="")
	{
  $ok=false;	
  echo"<p class='erreur'>Vous n'avez pas mis de titre</p>";
	}
}
if(isset($_POST['contenu']))
{
	if($_POST['contenu']=="")
	{
  $ok=false;	
  echo"<p class='erreur'>Vous n'avez pas mis de contenu</p>";
	}
	if(($_POST['contenu']=="") && ($_FILES['fichier']['error']==4) )
	{
  $ok=false;	
  echo"<p class='erreur'>Vous n'avez pas mis de contenu</p>";
	}
}
if($ok==false)
  	{
    include("form.inc.php");
  	}
if($ok==true)
{
	$content_dir = 'rep

...

Mais ca ne marche, je mets justre le titre et ca rentre.

Comment je peux faire, merci

Je n’ai pas tout regardé en détail car je ne sais pas tellement comment on contrôle l’upload d’un fichier en php, mais j’ai repéré plusieurs erreurs de code.

Déjà, la manière dont tu contrôles les variables :

if(isset($_POST['titre']))
{
	if($_POST['titre']=="")
	{
  $ok=false; 
  echo"<p class='erreur'>Vous n'avez pas mis de titre</p>";
	}
}

Tu ne vérifie qu’elle est vide que si elle définie. Autrement dit, si on ne la précise pas, elle sera vide et pourtant ne sera pas contrôlée. Écris plutôt quelque chose comme :


$titre = "";
if (isset($_POST['titre']))
	$titre = $_POST['titre'];

if ($titre == "")
{
  $ok=false; 
  echo"<p class='erreur'>Vous n'avez pas mis de titre</p>";
}

Pour le contenu, on a la même erreur, mais après je ne vois pas trop ce que tu as essayé de faire.

D’abord, si le contenu est vide, on met $ok sur false, ça me va.
Ensuite, si le contenu est vide et qu’il y a eu une erreur, on met $ok sur false. A quoi sert cette ligne vu qu’on a déjà mit $ok sur false au précédent test ? :neutre:

Plus simple :

if (! isset($_POST['titre']) || ! $_POST['titre']) {
  $ok=false;
  echo"<p class='erreur'>Vous n'avez pas mis de titre</p>";
}

PHP n’évaluera la seconde partie de l’expression que si la première est fausse, c’est à dire si la variable existe, pas de risque donc d’avoir une notice variable indéfinie.

En ce qui concerne le fait d’avoir obligatoirement une photo ou du contenu, tu peux faire ceci, je pense :

if ((! isset($_POST['contenu']) || ! $_POST['contenu'])
     && (! isset($_FILES['fichier']) || ! is_uploaded_file($_FILES['fichier']['tmp_name']))) {

  $ok = false;
  echo"<p class='erreur'>Vous n'avez pas mis de contenu</p>";
}

Tu peux remplacer le && par un XOR tout en inversant l’expression complète à l’aide de l’opérateur ! si tu veux qu’il y ait soit une photo, soit du contenu, mais pas les deux.