IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Système] GD Image - Header Problème


Sujet :

Langage PHP

  1. #21
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    oki merci je vais voir avec ca

  2. #22
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Excusez pour le double post mais j'ai encore une tite question:

    J'ai fait comme dit plus haut la séparation entre le script qui affiche l'image et le script qui fait le formulaire et l'affichage marche tres tres bien. Par contre pour pouvoir vérifier si l'utilisateur à bien entrer les lettres de l'image il faudrait que je retienne ces lettres en question. Je me suis dit que j'allais utiliser les sessions (a moins que quelqu'un ait un autre moyen à me proposer).

    Et c'est la que ca coince. J'ai une sorte de décalage avec mes sessions et je sais pas pourquoi. Voici un exemple :
    1) je lance la page
    2) echo sur la session qui retient le code: aZgUij
    3) echo sur cette session,
    erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Notice: Undefined index: antiRobots in d:\program files\easyphp1-8\www\form\form.php on line 46
    4) j'actualise la page
    5) nouveau code : bGhgTa
    6) l'echo sur la session m'affiche : aZgUij

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    class Form {
    
    ...
    
    	function printForm() {
    		echo '<form enctype="multipart/form-data" action="'.$_SERVER['PHP_SELF'].'" method="post"><table>';
    		// Parcours le tableau
    		foreach ($this->form as $label => $field) {
    			foreach ($field as $id => $info) {
    				// Affiche les boutons
    				echo '<tr><td>'.ucfirst($label).'</td><td>'.$info.'</td></tr>';
    			}
    		}
    		if ($this->antiRobots) {
    			echo '<tr><td><img src="antiRobots.php" alt="antiRobot" /></td><td>'.textfield('antiRobots').'</td></tr>';
    		}
    		echo "<tr><td>&nbsp;</td><td>".button('submit', $this->submit)."</td></tr>";
    		echo '</table></form>';
    		
    		echo $_SESSION['antiRobots'];
    	}
    
    ...
    
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    <?php 
    session_start();
    // Var des lettres
    $letters = '';
    // Taille du texte
    $fontSize = 5;
    // Nbre de lettre
    $nbLetter = 6;
    
    // Tableau des lettres
    $tinyLetter = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
    $capLetter = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
    
    // Boucle
    for ($i = 0; $i < $nbLetter; $i++) {
    	// Générateur maj OU min
    	$letterStyle = rand (0, 1);
    	$letterStyle = $letterStyle ? $tinyLetter : $capLetter;
    	
    	// Générateur aléatoire de lettre
    	$nb = rand(0, 23);
    	
    	// Actualise la chaine
    	if (!empty($letters)) { 
    		$letters = $letters.''.$letterStyle[$nb];
    	} else {
    		$letters = $letterStyle[$nb];
    	}
    }
    
    
    
    // Initialisation des variables pour l'img
    // $fontXXX => array($fontSize => taille réelle de la police)
    $fontWidth = array(1 => 5,
    				   2 => 6,
    				   3 => 7,
    				   4 => 8,
    				   5 => 9,
    );
    
    $fontHeight = array(1 => 7,
    					2 => 9,
    					3 => 14,
    					4 => 16,
    					5 => 16,
    );
    
    // Taille de l'img
    $imgWidth = $fontWidth[$fontSize] * strlen($letters);
    $imgHeight = $fontHeight[$fontSize];
    
    // Création de l'img
    $img = @imagecreatetruecolor($imgWidth, $imgHeight) or die('GD is inactive.');
    // Allocation de la couleur de fond - blanc
    $bgColor = imagecolorallocate($img, 255, 255, 255);
    // Allocation de la couleur du texte - noir
    $textColor = imagecolorallocate($img, 0, 0, 0);
    
    // Création du fond
    imagefilledrectangle($img, 0, 0, $imgWidth, $imgHeight, $bgColor);
    // Création du texte
    imagestring($img, $fontSize, 0, 0, $letters, $textColor);
    
    // Affichage de l'img
    header('Content-Type: image/png');
    imagepng($img);
    // Suppression manuelle de l'img
    imagedestroy($img);
    
    $_SESSION['antiRobots'] = $letters;
    ?>

  3. #23
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Ici, il y a un problème de logique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    for ($i = 0; $i < $nbLetter; $i++) {
        // Générateur maj OU min
        $letterStyle = rand (0, 1);
        $letterStyle = $letterStyle ? $tinyLetter : $capLetter;
     
        // Générateur aléatoire de lettre
        $nb = rand(0, 23);
     
        // Actualise la chaine
        if (!empty($letters)) { 
            $letters = $letters.''.$letterStyle[$nb];
        } else {
            $letters = $letterStyle[$nb];
        }
    }
    Tu écrases la variable $letters à chaque itération de la boucle for.

  4. #24
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    $letters doit contenir la séquence de lettre. Pour ne aps créer une autre variable j'ai simplement mis à jour $letters en ajoutant à la fin la nouvelle lettre.

    On peux pas faire ca ?!

  5. #25
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Flûte, j'ai mal lu ton code...
    Je te recommande plutôt cette écriture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?php
     
    define('TINY_LETTERS', 'abcdefghijklmnopqrstuvwxyz');
    define('CAP_LETTERS',  'ABCDEFGHIJKLMNOPQRSTUVWXYZ');
    define('NB_OF_LETTERS', 6);
     
    $letters = '';
    for($i = 0; $i < NB_OF_LETTERS; $i++) {
        // Générateur maj OU min
        if(mt_rand (0, 1)){
            $letterStyle =  TINY_LETTERS;
        }
        else{
            $letterStyle =  CAP_LETTERS;
        }
     
        // Générateur aléatoire de lettre
        $nb = mt_rand(0, strlen($letterStyle) - 1);
     
        // Actualise la chaine
        $letters .= $letterStyle{$nb};
    }
    echo $letters;
     
    ?>
    Bref, ce n'est pas le souci. Donne ton code complet actuel, stp.

  6. #26
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Mon code complet actuelle est celui que j'ai deja donné un peu plus haut. Je préfere garder pour l'instant ma facon de faire (je m'y retrouve mieux lol)

  7. #27
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Non, je souhaite pouvoir tester le code dans les mêmes conditions que toi. Tu as tronqué le code ci-dessus, je ne peux donc pas le faire.
    Met le tout en fichier joint, stp.

  8. #28
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Voila je t'ai mis l'entièreté de ma classe avec tous les ficheir nécessaire.

    [EDIT]Excuse d'enlever la source mais j'ai pas envie de rendre ce projet publique

  9. #29
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Okay, je le tiens.

    Tu affiches le HTML permettant d'afficher l'image mais ton navigateur n'a pas le temps de charger cette image avant que le serveur exécute la ligne 45 de form.php. Du coup, la variable de session est toujours initialisée en décalage.

    Tu as bien fait de séparer form.php et img.php mais souviens-toi que l'un n'inclut pas l'autre, du moins pas au sens d'inclusion serveur. L'un appelle l'autre, c'est différent.

    Du point de vue logique, il faudrait que tu initialises la variable de session dans ta classe et que tu l'utilises dans img.php pour charger la bonne image.

  10. #30
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Citation Envoyé par Yogui
    Du point de vue logique, il faudrait que tu initialises la variable de session dans ta classe et que tu l'utilises dans img.php pour charger la bonne image.
    Je comprend pas tres bien cette partie. J'ai creer une nouvelle fonction aussi bete que ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	 function initSession() {
    	 	$_SESSION['antiRobots'] = '';
    	}
    que je place au tout debut de la fonction execForm()

    Je n'ai plus d'erreur me disant qu'elle n'existe plus par contre ca marche toujours pas lol.

  11. #31
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Non, il faut que tu donnes sa valeur à $_SESSION['antiRobots'] dans ta classe. Actuellement, tu le fais dans img.php et c'est nécessairement décalé.

  12. #32
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Comment dois-je faire ?!

    Je ne peux pas mettre quelque chose comem ca dans la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['antiRobots'] = $letters;

  13. #33
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    C'est pourtant l'idée. D'ailleurs, je n'ai pas vu de constructeur dans ta classe. Tu pourais faire quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     if(empty($_SESSION['antiRobots'])){
       // construire $letters
       $_SESSION['antiRobots'] = $letters;
    }

  14. #34
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Ah je vient de comrpendre ce que tu veux dire, enfin je crois.

    Au lieu de construire la chaine $letters dans le fichier img.php, je creer la chaine dnas la class puis j'enregistre dans une session et apres je recup la session pour en faire l'img.

    [EDIT]C'est bon ca marche comme ca.

  15. #35
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    C'est parfait ^^

  16. #36
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    yep merci encore a toi ^^

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Système] Affichage imag et phpinfo
    Par arti2004 dans le forum Langage
    Réponses: 6
    Dernier message: 29/06/2006, 20h27
  2. Réponses: 1
    Dernier message: 17/05/2006, 21h03
  3. [php-header] problème header téléchargement
    Par nigiri dans le forum Langage
    Réponses: 2
    Dernier message: 06/02/2006, 15h16
  4. Réponses: 8
    Dernier message: 06/07/2004, 18h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo