Mettre à jour un fichier de variable via un formulaire

Mammouth du PHP | 531 Messages

04 mai 2008, 23:28

Salut

Voilà, j'ai un fichier contenant des variables, par exemple :
define( 'NOM_SITE', "Titre du site" );
define( 'DESCRIPTION_SITE', "Description du site" );
Je voudrais pouvoir le mettre à jour via un formulaire, donc charger dans le formulaire les variables dans les champs et pouvoir écrire dans le fichier au moment de la validation.

Alors pour écrire je peut à la limite envoyer la totalité du fichier, bien que l'idéal serrait d'écrire seulement le contenu des champs au bon endroit, mais par contre pour charger le contenu des variables dans les champs, je sèche complètement.

Si quelqun à un début d'explication ou un petit lien, merci d'avance :wink:

Eléphant du PHP | 112 Messages

05 mai 2008, 00:52

Bonjour,

Ta demande n'est pas très claire.
D'autre part, lorsque tu as quelque chose comme
 define("truc", "machin");
tu n'as des vairiables, mais des constantes....

Mammouth du PHP | 531 Messages

05 mai 2008, 09:18

Bonjour,

Ta demande n'est pas très claire.
D'autre part, lorsque tu as quelque chose comme
 define("truc", "machin");
tu n'as des vairiables, mais des constantes....
Oups c'est vrai constantes pas variables, merci de me reprendre :wink:

Donc ce que je cherche à faire, c'est de mettre à jour un fichier contenant des constantes depuis un formulaire. Par exemple dans mon formulaire si j'ai un champ nom, c'ets à cette endroit que le contenu de la constante nom devrais se charger dans le value. Enssuite lorsque je poste le form, il faudrait que le contenu du champs nom s'écrive dans le fichier .php, sur le bonne ligne et à l'emplacement de la valeur de la constante.

Je sais juste pas par ou commencer et quelle méthode utiliser :?

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

05 mai 2008, 12:11

Première chose, tu ne peux pas éditer partiellement un fichier. Tu peux soit le compléter (en ajoutant des lignes à la fin), soit l'écraser (en recommençant à écrire depuis le début).

Il va donc te falloir regénerer le fichier entier à chaque fois. Pour cela, le plus simple est à mon avis
1. de lire tout le fichier (fopen(), fread(), ...)
2. de construire un tableau associatif à partir de chaque ligne de définition de constante (avec un preg_match() par exemple pour capturer le nom de la constante dans le fichier et la valeur associée)
3. de mettre à jour la valeur associée à la clé en fonction des données spécifiées dans le formulaire
4. de regénérer le fichier en écrivant dedans ligne à ligne (fopen(), fwrite())
5. de boucler sur le tableau associatif mit à jour avec un foreach (clé => valeur) pour reconstituer les lignes de définition et les coller dans le fichier

HTH :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 531 Messages

05 mai 2008, 12:47

Merci pour les explications, maintenant que j'ai la méthode y'a plus qu' a ouvrir notepad... et on va bien voir ce que ça donne

Mais à mon avis vous allez me revoir sur ce topic :D

Mammouth du PHP | 531 Messages

16 mai 2008, 22:24

Ryle je n'ai pas compris comment faire avec preg_match() car il faut que j'étudi un peu ça. Ca n'a pas l'air simple les expressions régulières.
Par contre j'ai un début de résultat avec eregi()

C'est à la fin que ça se passe. Je récupère donc la valeur des constantes qui sont entre des double quote. Il reste juste à supprimer les double quote, pas trop compliqué.

Au final donc il reste plus qu'à définir pour chaque champs de mon formulaire à quelle ligne ( $tableau[$i] il appartient.

C'est correct comme méthode ?
<?php
$fichier = 'config.php';
$DonneesTotal = NULL;

//On ouvre le fichier en mode "lecture seule"
if(file_exists($fichier))
{
    $fd = fopen($fichier, 'r');
    $i = 1; // compteur de ligne
    // Lorsque nous atteindrons la fin du fichier
    // foef($fd) retournera faux
    // et la boucle while s'arrêtera
	$TabLignes = array();
    while (!feof($fd))
    {
        // Il est temps de lire une ligne du fichier
        // et en tout cas au maximum 1024 caractères
        $ligne = fgets($fd, 1024);
        // Si la fin du fichier n'est pas atteinte
        // On peut maintenant afficher la ligne
        if (!feof($fd))
        {
			$DonneesTotal .= $ligne;
			$TabLignes[$i] = $ligne;
        }
        $i++;
    }
    // On a fini, on ferme !!
    fclose($fd);
	print_r($TabLignes);
	// Ligne à traiter
	$chaine = $TabLignes[3];
	// On récupére ce qui commence et qui finni par "
	eregi( '"(.*)"', $chaine, $resultat );
	echo '<p>Resultat :'.$resultat[0].'</p>';
}
?>