ouvrir une fenêtre d'info

pat
Eléphant du PHP | 132 Messages

23 oct. 2007, 16:14

Bonjour,

Lors du contrôle de mon formulaire je vérifie que l'image uploadée satisfasse à certains critères.
Si l'image n'est pas conforme, je souhaite ouvrir une petite fenêtre avec le message d'erreur.
Ma question est : Comment ouvrir un petite fenêtre?

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

23 oct. 2007, 16:33

En php, tu ne peux pas :!:

(bon... ça, c'est fait :))

L'ouverture de fenêtre se fait via le navigateur, donc côté client, donc en javascript (ou en html) et pas en php. Du coup si tu veux ouvrir une popup, il faut que lors de l'affichage de la page après ta vérification, intègrer le code javascript qui fera un window.open() avec les paramètres qui vont bien pour ouvrir la page souhaitée (code que tu peux par contre générer avec php)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

lux
Eléphant du PHP | 372 Messages

23 oct. 2007, 18:26

Par contre si le Javascipt est désactivé sur le navigateur, ou les pop-ups bloqués dans le browser, ça passera pas ...

Moi je fais souvent un
header("Location:erreur.php");
exit;
pour gérer mes erreurs, ce qui arrète le script et renvoye vers une page avec le message d'erreur correspondant, tu peux mettre p.ex : erreur.php?message=taille p.ex, et sur la page erreur.php récupérer avec un GET et afficher la bonne erreur :wink:

Mammouth du PHP | 2937 Messages

23 oct. 2007, 18:31

L'ouverture de fenêtre se fait via le navigateur, donc côté client, donc en javascript (ou en html) et pas en php. Du coup si tu veux ouvrir une popup, il faut que lors de l'affichage de la page après ta vérification, intègrer le code javascript qui fera un window.open() avec les paramètres qui vont bien pour ouvrir la page souhaitée (code que tu peux par contre générer avec php)
Afin de tenir compte de ceux qui n'ont pas JavaScript ou l'ont désactivé, il faut éviter d'insérer le code dans le href. Autrement dit :

Code : Tout sélectionner

<a href="ta-pop-up.html" onclick="javascript: window.open ('ta-pop-up.html', 'pop-up'); return false;">Pop-up</a>
On peut même se passer de l'attribut onclick grâce à la technique de l'unobstrusive JavaScript. Autrement dit, tu programmes l'ouverture de ta pop-up dans un fichier .js en sélectionnant l'élément a concerné grâce au DOM. Mais, c'est un peu long à expliquer succintement.

pat
Eléphant du PHP | 132 Messages

23 oct. 2007, 22:33

Mon problème est que la photo fait partie d'un formulaire d'inscription est ce qui me gène est que si l'utilisateur met une photo qui ne convient pas il sera obliger de recommencer la saisie du formulaire, étant donné que j'ouvre une nouvelle page avec toute ces methodes.
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . $_SERVER['QUERY_STRING'];
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) 

{

    $content_dir = '../image/logo_fournisseur/'; // dossier où sera déplacé le fichier

    $tmp_file = $_FILES['monfichier']['tmp_name'];
	$monfichier = $_FILES['monfichier']['type'];
	
	
	/* si l'utilisateur a uploadé un fichier, je verifie le fichier */	
	if ($monfichier <> "" )
        {
    if( !is_uploaded_file($tmp_file) )
    {
		
		echo $_FILES['monfichier']['type'];
		exit("Le fichier est introuvable");
		
    }

    // on vérifie maintenant l'extension
    $type_file = $_FILES['monfichier']['type'];

    if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') )
    {
		
       header("Location:erreur.php");
exit;
    }

    // on copie le fichier dans le dossier de destination
    $name_file = $_FILES['monfichier']['name'];

    if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
    {
        exit("Impossible de copier le fichier dans $content_dir");
    }

    echo "Le fichier a bien été uploadé";
	
	}
		
		/* si l'utilisateur n'a pas uploadé de photo. $monfichier est nul et je lui donne une valeur par default*/
else
        {  
		$_FILES["monfichier"]["name"] = "logo_default.jpg";
		echo $_FILES["monfichier"]["name"];
			
		}

  $insertSQL = sprintf("INSERT INTO t_fournisseur (NomFourn, Adres1, BP, CP, Ville, Cedex, Pays, Tel, Fax, Mail, Site, identifiant, LogoFourn, pass, civilite, nom, prenom, fonction, portable) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['societe'], "text"),
                       GetSQLValueString($_POST['Adres1'], "text"),
                       GetSQLValueString($_POST['BP'], "text"),
                       GetSQLValueString($_POST['CP'], "int"),
                       GetSQLValueString($_POST['Ville'], "text"),
                       GetSQLValueString($_POST['Cedex'], "int"),
                       GetSQLValueString($_POST['Pays'], "text"),
                       GetSQLValueString($_POST['Tel'], "text"),
                       GetSQLValueString($_POST['Fax'], "text"),
                       GetSQLValueString($_POST['Mail'], "text"),
                       GetSQLValueString($_POST['Site'], "text"),
                       GetSQLValueString($_POST['identifiant'], "text"),
					   GetSQLValueString($_FILES["monfichier"]["name"], "text"),
                       GetSQLValueString($_POST['motpass'], "text"),
                       GetSQLValueString($_POST['civilite'], "text"),
                       GetSQLValueString($_POST['nom'], "text"),
                       GetSQLValueString($_POST['prenom'], "text"),
                       GetSQLValueString($_POST['fonction'], "text"),
                       GetSQLValueString($_POST['portable'], "text"));

  mysql_select_db($database_connectgl, $connectgl);
  $Result1 = mysql_query($insertSQL, $connectgl) or die(mysql_error());
@$identifiant=$_POST['identifiant'];
@$pass=$_POST['motpass'];
  $insertGoTo = "valid_log.php?id=$identifiant&pass=$pass";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}

ViPHP
AB
ViPHP | 5818 Messages

24 oct. 2007, 01:40

Bonsoir,

Tu peux par exemple enregistrer tes $_POST dans une variable de session. Tu pourras donc les récupérer et les remettre dans le formulaire si l'image ne convient pas.

Une autre solution serait de faire ton formulaire principal sans le chargement d'image, et que le visiteur puisse mettre son avatar une fois inscrit.

pat
Eléphant du PHP | 132 Messages

24 oct. 2007, 08:47

j'ai remarqué que si je reculé d'une page après l'affichage de la page erreur je garde le formulaire avec les donnés de l'utilisateur.
Est il possible de faire un bouton ayant pour fonction de faire un retour en arrière.

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

24 oct. 2007, 10:34

C'est possible en javascript (avec la fonction history.back() ou history.go(-1) ) mais la restitution dans les champs du formulaire n'est qu'un effet de cache et n'est pas du tout fiable.

Le mieux est effectivement de récupérer les variables envoyer (éventuellement les stocker en session) et les réutiliser dans les attributs value="" de tes champs. Concernant le fichier tu ne pourras pas pré-renseigner le chemin (pour des raisons de sécurité) mais si l'utilisateur n'a que ça à renseigner pour indiquer un fichier correct, il devrait s'y faire ;)

Personnellement, le script qui traite les données de mes formulaires sont dans la même page (ou dans un include si trop long) que le formulaire et s'exécute si le formulaire a été envoyé (et donc que j'ai des données en $_POST). Ainsi je peux facilement en cas d'erreur poursuivre l'exécution du script et afficher à nouveau le formulaire en pré-renseignant les champs avec les valeurs saisies et disponible dans $_POST sans avoir à les stocker dans une session :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
AB
ViPHP | 5818 Messages

24 oct. 2007, 12:48

Personnellement, le script qui traite les données de mes formulaires sont dans la même page (ou dans un include si trop long) que le formulaire et s'exécute si le formulaire a été envoyé (et donc que j'ai des données en $_POST). Ainsi je peux facilement en cas d'erreur poursuivre l'exécution du script et afficher à nouveau le formulaire en pré-renseignant les champs avec les valeurs saisies et disponible dans $_POST sans avoir à les stocker dans une session :)
C'est cette méthode que j'utilise dans mes parties administrateur.
Par contre je l'évite un peu dans les parties clients car en cas de retour à cette page avec le bouton retour arrière du navigateur on se prend le traditionnel message "Cette page contient des données post ..." et ça me plait pas. D'où l'utilisation d'une variable de session. Bon j'suis peut-être un peu trop perfectionniste...

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

24 oct. 2007, 14:13

Bah euh.. non... s'il y a des erreurs j'affiche le formulaire prérenseigné, mais lorsque le traitement est correct, je fais un header() pour rediriger l'utilisateur sur une autre page (un listing en général où je lui affiche un message de confirmation) via un get.

Donc pas de retour possible sur la page de traitement, le navigateur ne pouvant le ramener que sur le formulaire avant saisie ou sur la page de confirmation, soit deux pages ouvertes en get, et du coup pas de renvoi de données ou de message de confirmation pour le renvoi des données :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...