> Tous les forums > Forum des Webmasters
 souci de montage avec fopen et fputsSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
ogd
  Posté le 29/06/2010 @ 15:07 
Aller en bas de la page 
Astucien

hello!

Je suis en train de monter mon systeme de création d'albums.

je suis donc dans ma zone membre(protegee) pour administrer mon site.

pour le moment,

J'ai :

-créé et rempli ma table sql avec le nom de l'album, le répertoire où il sera stocké, et divers paramètres de contenu

-créé le répertoire de l'album et ses sous rép. pour les images kingsize et les miniatures

-uploadé mes photos dans le dossier

-généré les mniatures correspondantes dans leur dossier

Maintenant, j'ai besoin de créer ma page.php

-j'arrive à la créer vide dans le bon dossier

là où je suis perdu, c'est que j'ai créé un template.php qui contient mon code html

Après je ne sais plus par où attaquer...

-je pense que pendant que j'y suis, je peux intégrer dans mon template les accès sql pour charger les données

-mais après je ne sais pas comment écrire tout ce template dans le fichier.php généré

voilà le derniere page de mon admin:

<?include("../***"); mysql_connect($host, $user, $pass); mysql_select_db("$bdd") or die("Ouverture base impossible");

{$id = (isset($_GET['id'])) ? abs(intval($_GET['id'])) : 0;$lire=mysql_query("SELECT * FROM photos WHERE id='$id' "); } while ($reponse = mysql_fetch_array($lire)){?><p><b>Création de la page pour l'album <? echo $reponse['titlealbum'] ; ?> :</b></p><?$repertoire = $reponse['nomfolder'] ;$cheminmaxi="../../includes/photos/$repertoire/maxi";$cheminmini="../../includes/photos/$repertoire/mini";$falbum="../../includes/photos/$repertoire/index.php";}?>

</br></br>
<center><p>==============================================================================================</p>

<?
$fp = fopen($falbum,"w");


fclose($fp);
?>

En fait je ne sais pas comment appeler mon fichier template dans ma page d'admin pour écrire ses contenus et appels de variables dans le fichier de destination tout en tenant compte de l'id et des chemins en fonction de cet id

Bon, je suis ne suis plus clair mais si vous pouviez m'aiguiller, che cherait chympa

Publicité
Malcolm
 Posté le 29/06/2010 à 21:52 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

fopen + fread seront tes amis {#}

Voilà une fonction que j'uytilise dans mon logiciel pour récupérer le contenu d'un fichier (code source HTML ou PHP)

$file = '../dossier.fichier.php');

$f = fopen($file,'r');
$txt = fread($f,filesize($file)); // le contenu sera chargé tel quel dans la variable $txt
fclose($f);

// et pour le réécrire ailleurs : fwrite

t'as un exemple bien expliqué là : http://fr.php.net/manual/fr/function.fwrite.php



Modifié par Malcolm le 04/07/2010 16:21
ogd
 Posté le 30/06/2010 à 09:18 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Malcolm a écrit :

// et pour le réécrire ailleurs : fwrite

t'as un exemple bien expliqué là : http://fr.php.net/manual/fr/function.fwrite.php

Et elle s'utilise ainsi :

$monFichier = TextFileReader('../dossier/fichier.php');

et si tu veux l'écrire

Je ne comprends pas d'où sort le textfilereader?

Dans google, il n'y a des réponses que sur ton site?

En plus, tu n'aurais pas oublié de finir ta phrase?

Merci à toi

ogd
 Posté le 30/06/2010 à 16:06 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

ça y est ça marche:

$file = ('template/template.php');
$f = fopen($file,'r');//ouverture du fichier template en lecture
$txt = fread($f,filesize($file)); // le contenu sera chargé tel quel dans la variable $txt
fclose($f);

$fp = fopen($falbum,'w');//ouverture du fichier destination en écriture
fclose($fp);

$somecontent = $txt;
if (is_writable($falbum)) {

// Dans notre exemple, nous ouvrons le fichier $filename en mode d'ajout
// Le pointeur de fichier est placé à la fin du fichier
// c'est là que $somecontent sera placé
if (!$handle = fopen($falbum, 'a')) {
echo "Impossible d'ouvrir le fichier ($falbum)";
exit;
}

// Ecrivons quelque chose dans notre fichier.
if (fwrite($handle, $somecontent) === FALSE) {
echo "Impossible d'écrire dans le fichier ($falbum)";
exit;
}

echo "L'écriture de l'album photos ($falbumtitle) dans le fichier ($falbum) a réussi !";

fclose($handle);

} else {
echo "Le fichier $falbum n'est pas accessible en écriture.";

J'ai quand même un souci:

mon fichier template (donc mon fichier final)commence ainsi:

<?
$file = ('includes/photos/albumtest/id.php');
$f = fopen($file,'r');//ouverture du fichier template en lecture
$txt = fread($f,filesize($file)); // le contenu sera chargé tel quel dans la variable $txt
fclose($f);




include("sql/sql1.inc.php");
mysql_connect($host, $user, $pass);
mysql_select_db("$bdd")
or die("Ouverture base impossible");

{
$lire=mysql_query("SELECT * FROM photos WHERE id='$txt' ");
}
while ($row = mysql_fetch_assoc($lire)) {

?>

autrement dit, je lui dis d'aller chercher l'id dans un fihcier créé dans le même répertoire pour pouvoir accéder à la base de données

Le souci:

mon fichier final est appelé sur le site via include

donc mes chemins partent de la racine du site.

Et donc, en ligne 2 de mon fichier template, je ne sais pas comment lui dire dans quel répertoire aller chercher le fichier id.php ou comment lui dire que c'est dans son propre répertoire

j'ai essayé getcwd() . "\n";
mais comme je suis dans un include, ça me retourne la racine du site

ogd
 Posté le 01/07/2010 à 12:18 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

C'est bon, j'ai trouvé:

//on récupère le chemin relatif du fichier id.php
$monUrl = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

$tab = explode("/", $monUrl);
$var1 = $tab[count($tab)-2]; // pour rep dossier de l'album
$var2 = $tab[count($tab)-3]; // pour rep photos
$var3 = $tab[count($tab)-4]; // pour rep includes
$var3clean = substr("$var3", 17);
$cheminrelatif = $var3clean.'/'.$var2.'/'.$var1.'/id.php'; //chemin relatif de id.php - les 17 premiers caracteres

$file = ($cheminrelatif);
$f = fopen($file,'r');//ouverture du fichier template en lecture
$txt = fread($f,filesize($file)); // le contenu sera chargé tel quel dans la variable $txt
fclose($f);

une dernière question, surlaquelle, je bloque complètement.

Comme je l'ai dit plus haut, mes pages sont appelées en includes dans mon site et pour évité les injection, j'ai fait un array avec les pages autorisées.

Cet array, je l'alimente manuellement...

Mais là je voudrais pouvoir l'alimenter via un fwrite.

Le souci, c'est que je ne sais pas comment faire pour "injecter" mes nouvelles pages dans cet array.

J'avais bien penser écrire les infos dans un fichier puis appeler ce fichier via include, mais il aime pas visiblement

voilà à quoi ressemble mon array:

$pageOK = array('cette_semaine.php' => 'cette_semaine.php',

'mapage.php' => 'mapage.php',

'mapage2.php' => 'mapage2.php',

'mapage3.php' => 'mapage3.php',

[etc...]

);
if ((isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) {
include($pageOK[$_GET['page']]);
}else {
include('cette_semaine.php');
}

si vous avez une idée pour contourner ce problème?

Cedders
 Posté le 01/07/2010 à 14:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour,

Une solution comme une autre :

1) Tu peux imaginer un fichier nav.inc.php :

$pageOK['mapage'] = 'mapage.php';

$pageOK['mapage2'] = 'mapage2.php';

etc ...

2) Tu fais un require_once('nav.inc.php') et non un include

3) Tu fais des tests avec $GET['page'] qui vaudra mapage, mapage2, etc...

4) Si c'est valide tu fais l'include de $pageOK[$GET['page']]


ça m'a juste traversé l'esprit donc c'est certainement pas le must mais tu pourras facilement ajouter/modifier/supprimer des pages dans le fichier

Malcolm
 Posté le 02/07/2010 à 19:37 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

hello

effectivement ya une phrase qui est passée à la trappe.

ogd
 Posté le 19/07/2010 à 11:17 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Hello et de retour sur ce problème de $pageok

Le souci, c'est que dans mon fichier nav.inc.php, lors de la génération de mon album, j'écris ceci:

$pageOK['includes/photos/$nomfolder/index.php' = 'includes/photos/$nomfolder/index.php'];

or, bien sûr il ne sait pas à quoi je fais référence dans ma variable puisque rien ne la rappelle...

Je peut rappeler l'id via un get mais alors au moment du requireonce, il aime pas du tout du tout...

merci pour votre aide

ogd
 Posté le 22/07/2010 à 18:26 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bon, comme je rame méchant, j'ai essayé autre chose, en allant rechercher ma variable dans ma base de données...

<?
include("./fichierdeconnexion.inc.php");
mysql_connect($host, $user, $pass);
mysql_select_db("$bdd")
or die("Ouverture base impossible");

{
$lire=mysql_query("SELECT nomfolder FROM matable ");
}
while ($row = mysql_fetch_assoc($lire))
{
$dossier = $row['nomfolder'] ;
}

$pageOK = array('cette_semaine.php' => 'cette_semaine.php',

'includes/photos/$dossier/index.php' => 'includes/photos/$dossier/index.php',

'includes/jeu.swf' => 'includes/jeu.swf',
'ecartes.swf' => 'ecartes.swf',
'includes/programme.php' => 'includes/programme.php',
'includes/letop.php' => 'includes/letop.php',

...........


);
if ((isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) {
include($pageOK[$_GET['page']]);
}else {
include('cette_semaine.php');
}
?>

donc, là il ne trouve pas de variable, normal puisqueje ne l'indente pas comme telle dans php...

Le souci, c'est que si je l'indente avec des ' ou des ", je reçois une erreur comme quoi il y a une variable innatendue dans la ligne (derniere ligne en bleu)...

Alors, moi,là, je sais plus, j'en ai mal aux cheveux...

si vous avez une idée, ce serait vraiment, vraiment, vraiment, gentil de la partager

Bonne fin de journée

à toutes et tous

Publicité
Cedders
 Posté le 22/07/2010 à 20:14 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
ogd a écrit :

Hello et de retour sur ce problème de $pageok

Le souci, c'est que dans mon fichier nav.inc.php, lors de la génération de mon album, j'écris ceci:

$pageOK['includes/photos/$nomfolder/index.php' = 'includes/photos/$nomfolder/index.php'];

or, bien sûr il ne sait pas à quoi je fais référence dans ma variable puisque rien ne la rappelle...

Je peut rappeler l'id via un get mais alors au moment du requireonce, il aime pas du tout du tout...

merci pour votre aide

Je passe en coup de vent donc je regarderais ta dernière réponse après.

Tu as une erreur dans ton fichier nav.inc.php, tu devrais écrire, par exemple : $pageOK['index'] = 'includes/photos/$nomfolder/index.php'; ou comment dans ton exemple :

$pageOK['includes/photos/$nomfolder/index.php'] = 'includes/photos/$nomfolder/index.php';

Malcolm
 Posté le 22/07/2010 à 22:41 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

c'est pas très judicieux de mettre une variable PHP dans une chaine de caractères commençant par des apostrophes ...

ogd
 Posté le 23/07/2010 à 00:57 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Salut Cedders, Salut Malcolm !

C: j'ai laissé tombé l'idée d'écrire dans un fichier, ça fait pas mal de requêtes à traiter par php alors que mon dossier est répertorié dans ma bdd, donc en une requête, j'y ai accès...

Mais pour ça, il faut que j'arrive à faire une boucle qui sorte tous les dossiers pour qu'ils s'intègrent dans mon array et là, j'ai beau cherché, apparemment, array n'aime pas les boucles...

M: pourquoi pas très judicieux?j'ai pas trop le choix je crois puisque ma base ne contient que le nom du dossier mais que j'ai besoin de tout le chemin dans le cas présent?

où alors j'ai pas tout compris?

Malcolm
 Posté le 23/07/2010 à 20:11 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

ha, c'est juste parce que la variable ne sera pas interprétée ... (contrairement aux guillemets).

ogd
 Posté le 26/07/2010 à 16:36 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Hello!

Bon je rame pas mal sur ce coup là...

J'ai beau essayer tout ce qui me passe par la tête (bon ok elle est petite), tout ce que je lis...rien à faire...

J'ai bien sur tenté de remplacer les ' par des " ce qui me donne

$pageOK = array('cette_semaine.php' => 'cette_semaine.php',

"includes/photos/"$dossier"/index.php" => "includes/photos/"$dossier"/index.php",

j'obtiens alors cette erreur:

Parse error: syntax error, unexpected T_VARIABLE, expecting ')' in /home/users4/f/fplus/www/les_pages.php on line 17

c'est à dire la ligne concernant l'inclusion des albums photos

Malcolm
 Posté le 26/07/2010 à 18:14 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

"includes/photos/$dossier/index.php"

ou bien

"includes/photos/".$dossier."/index.php"

ogd
 Posté le 27/07/2010 à 09:38 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

oups, j'ai encore un peu de mal avec ça...

En fait, le . c'est bien pour "lier" la variable avec le reste du texte?

alors pourqoi on ne devrait pas le mettre dans les 2 cas?

En tous cas, concernant mon problème, il est complètement résolu !

Merci bcp

Malcolm
 Posté le 27/07/2010 à 10:51 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

c'est pour concaténer.

je trouve le 2nd cas plus "propre".

typiquement, quand tu fais :

$var = 50;

echo "une chaine de caractères qui affiche la ligne $var mille";

ça t'affiche une chaine de caractères qui affiche la ligne 50 mille

si tu fais

echo 'une chaine de caractères qui affiche la ligne $var mille';

tu auras

une chaine de caractères qui affiche la ligne $var mille

la concaténation consiste à interrompre la chaine de caractères pour "coller" un affichage de variable, quitte éventuellement à reprendre une chaine de caractères.

par exemple ceci est tout à fait valide :

echo "une chaine de caractères qui affiche la ligne ".$var." mille"

donnera

une chaine de caractères qui affiche la ligne 50 mille

mais on peut tout aussi bien écrire

echo 'une chaine de caractères qui affichera la ligne '.$var." mille";

car mes 2 chaines de caractères (à G et à D de la variable) sont indépendantes.

La différence entre echo "ma chaine $var" et echo "ma chaine ".$var est assez minime, la 2nde forme demande moins de travail au processeur (puisqu'elle n'a pas de variable à parser pour réinjecter dans une chaine). Mais le résultat ne se mesurera pas sur 50 "echo" ... il en faut au moins 10 ou 100 mille pour voir une différence.



Modifié par Malcolm le 27/07/2010 10:52
Publicité
ogd
 Posté le 27/07/2010 à 11:05 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

D'accord.

Merci pour cette leçon de révision.

Mais...

Tu postes en journée toi mmaintenant

T'es pas au boulot???

Malcolm
 Posté le 27/07/2010 à 19:31 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

chut. {#}

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
367,70 €Ecran PC 27 pouces Dell S2721DGFA (WQHD, IPS, 165 Hz, 1 ms, FreeSync/GSync) à 367,70 € livré
Valable jusqu'au 21 Juin

Amazon Allemagne fait une promotion sur l'écran PC 27 pouces Dell S2721DGFA qui passe à 351,93 €. Comptez 15,77 € pour la livraison en France soit un total de 367,70 € livré. On le trouve ailleurs à plus de 440 €. L'écran à cadre fin dispose d'une dalle IPS WQHD (2560x1440 pixels) 1 ms à 165 Hz. Il est compatible Freezync et Gsync via Adaptive Sync et dispose de 4 prises USB 3.0 (fait office de hub), un port DP et 2 prises HDMI. 

Vous pouvez utiliser votre compte Amazon France sur Amazon Allemagne. Il n'y a pas de douane.


> Voir l'offre
84,25 €Disque Dur externe portable Western Digital My Passport 4 To USB 3.0 à 84,25 € livré
Valable jusqu'au 20 Juin

Amazon Espagne propose actuellement le disque dur externe portable Western Digital My Passport 4 To à 79,33 € (avec la TVA ajustée). Comptez 4,93 € pour la livraison en France, soit un total de 84,25 € livré alors qu'on le trouve ailleurs à partir de 100 €. Ce disque dur possède une connectique USB 3.0 pour des transferts plus rapides. Il est également compatible USB 2.0. Avec ses 4 To, vous serez tranquille pour emporter toutes vos données avec vous. 

Vous pouvez utiliser votre compte Amazon France sur Amazon Espagne et il n'y a pas de douane. Une très bonne affaire.


> Voir l'offre
81,99 €Disque dur Seagate BarraCuda 4 To à 81,99 €
Valable jusqu'au 20 Juin

Cdiscount propose actuellement le disque dur Seagate BarraCuda - 4 To (ST4000DM004) à 81,99 €. Ce disque dur 3.5 pouces SATA III tourne à 5400tr/min et possède 256 Mo de cache. On le trouve ailleurs autour de 95 €. 


> Voir l'offre

Sujets relatifs
souci avec recaptcha
mail envoyer souci avec des if et des else
souci avec un gif animé
souci d'include() avec Dreamweaver
nouveau souci avec un update
souci avec des div
souci avec moteur de recherche
[RESOLU]Souci création de table sur MYSQL avec err
Souci Avec Page d'accueil (résolu)
Souci avec des frames
Plus de sujets relatifs à souci de montage avec fopen et fputs
 > Tous les forums > Forum Forum des Webmasters