Redirection vers page et valeur [Résolu]

Messages postés
114
Date d'inscription
samedi 27 juillet 2013
Statut
Membre
Dernière intervention
7 mai 2014
- - Dernière réponse : jordane45
Messages postés
27059
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 décembre 2019
- 31 mars 2014 à 10:44
Bonjour,

J'aimerai savoir comment transférer sur une page html une valeur php

voici mon formulaire

<form action="form.php" method="POST" enctype="multipart/form-data">
<p>Répertoire du blog : <input type="text" name="blog" /></p>
<p>Avatar : <input type="file" name="avatar" /></p>
<p>Nom du Blog : <input type="text" name="titre" /></p>

<input type="submit" name="submit" value="Valider">
<input type="reset" name="reset" value="Effacer">


jusque là tout va bien ça se complique quand je fais appelle à une page html externe dans laquelle je pose une image avatar et que je dois récupérer la valeur du name "titre"

Le fichier form.php :


// là je crée le répertoire du blog
mkDir($_POST['blog']);
$rep_dest=$_POST['blog'];

// là je place une image avatar
imageJpeg($dst_img, $_POST['blog'].'/avatar.jpeg');
imageDestroy($dst_img);

//je copie le fichier dans le répertoire créé plus haut
copy ("index.html", "$rep_dest/index.html");

//je dis d'aller sur l'url du répertoire que je viens de créer avec son fichier
header('Location:'.'http://www.blog-machine.fr/dev/blog/'.$_POST['blog'].'/index.html');

// là je ressort la valeur du nom du blog mais problème il devrait être dans le fichier index.html
$titre=isset($_POST["titre"])?$_POST["titre"];
echo "Le Blog: ".$titre;

Comment faire pour avoir dans ma page html Index.html ma variable $titre ? quel est le chemin ?
Afficher la suite 

12 réponses

Messages postés
27059
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 décembre 2019
318
0
Merci
Bonjour,

Si tu rediriges vers une autre page..

//je dis d'aller sur l'url du répertoire que je viens de créer avec son fichier
header('Location:'.'http://www.blog-machine.fr/dev/blog/'.$_POST['blog'].'/index.html');

...Tu n'est donc plus dans ta première page (celle qui contient actuellement le Echo de ton titre)... donc forcément... une fois redirigé les lignes qui se déroulent après ta redirection ne se lanceront pas........

C'est DANS ta page index.html qu'il faut que tu fasses ton ECHO.
Par contre;. pour récupérer la valeur de ton titre deux solutions :
1 - Tu sauvegardes dans ta BDD le titre (ainsi que le chemin de l'image que tu viens de créer) puis dans ta nouvelle page, tu requêtes la BDD pour récupérer les infos.

2 - (plus simple) tu passes ta variable en GET (via l'URL).

$titre=isset($_POST["titre"])?$_POST["titre"];
//je dis d'aller sur l'url du répertoire que je viens de créer avec son fichier
header('Location:'.'http://www.blog-machine.fr/dev/blog/'.$_POST['blog'].'/index.php?titre='.$titre);



Et dans ta page index :
$titre=isset($_GET["titre"])?$_GET["titre"];
echo $titre;



Commenter la réponse de jordane45
Messages postés
114
Date d'inscription
samedi 27 juillet 2013
Statut
Membre
Dernière intervention
7 mai 2014
0
Merci
J'ai choisis la seconde solution pas parce qu'elle est plus simple mais parce j'opte pour une solution avec un minimum de bdd mais ça ne marche pas le fichier html devient un fichier php et l'instruction est passé en get mais ça bloque ici
jordane45
Messages postés
27059
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 décembre 2019
318 -
Bonjour,
Vu que tu utilises du PHP dans tes pages... autant nommer ces pages en " .php "..c'est pour ça que lors de la copie de ton fichier... je le renomme en index.php....

Après pour le passage de variables d'une page à l'autre.. ben.. c'est toujours la même chose :
http://fr.html.net/tutorials/php/lesson10.php
http://www.commentcamarche.net/contents/793-php-recuperation-de-donnees
Commenter la réponse de blog-machine
Messages postés
114
Date d'inscription
samedi 27 juillet 2013
Statut
Membre
Dernière intervention
7 mai 2014
0
Merci
tel quel le fichier php ne passe pas

<html>
<head>
<title>TEST</title>
</head>
<body>
<?php

$titre=isset($_GET["titre"])?$_GET["titre"];
echo "Le Blog de" $titre ;

?>
</body>
</html>


Il doit y avoir un problème de parenthèse mais je ne sais pas où
jordane45
Messages postés
27059
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 décembre 2019
318 -
Il doit y avoir un problème de parenthèse mais je ne sais pas où
Hummm.. n'aurais tu pas un message d'erreur ??? si oui...merci de nous l'indiquer !

En attendant... tu peux déjà tester :
$titre=isset($_GET["titre"])?$_GET["titre"]:'ERREUR';
echo "Le Blog de" . $titre ;

Commenter la réponse de blog-machine
Messages postés
114
Date d'inscription
samedi 27 juillet 2013
Statut
Membre
Dernière intervention
7 mai 2014
0
Merci
J'ai un début de réponse

avec ça le fichier php existe


<?php
if (isset($_GET['titre'])){
$titre=$_GET['titre'];
echo "Le Blog de" .$titre. "le bloggeur"; }
?>

mais dans le problème donné ça ne marche pas encore
jordane45
Messages postés
27059
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 décembre 2019
318 -
mais dans le problème donné ça ne marche pas encore
C'est à dire ????
"Ca ne marche pas" .. n'est pas vraiment très clair comme explication ... non ??.!!

Peux-tu détailler ?

Par exemple : Est ce que tu as du texte qui s'affiche lorsque tu appels ta page ? Si oui.. lequel ?

Peux tu aussi nous montrer "comment" tu appelles ta page ? ( via une URL ? ... Laquelle ?? ) ?
Commenter la réponse de blog-machine
Messages postés
114
Date d'inscription
samedi 27 juillet 2013
Statut
Membre
Dernière intervention
7 mai 2014
0
Merci
Voilà le problème
j'ai un formulaire en post avec une valeur name="titre" à récupérer.

Le fichier en post formu.php appelle trois choses
- d'une part
a) la création d'un répertoire mkdir
b) la copie d'un fichier index.php dans le répertoire fraichement créer
et c) la création d'un avatar avec le upload d'une image qui se copie dans le répertoire et est présent dans le fichier index.php

et puis et voilà là où ça coince
une redirection (location) vers la page copier index.php avec un appel en get, dans l'url la voici :

header('Location: '.'http://www.blog-machine.fr/dev/blog/'.$_POST['blog'].'/index.php?titre=$titre');
voilà ce que fait formu.php

dans le fichier index.php qui reçoit la variable voilà l'instruction

<?php 
if (isset($_GET['titre'])){
$titre=$_GET['titre'];
echo "Le Blog de" .$titre. "le bloggeur"; }
?>
dans le fichier php il y a du html et tout s'affiche bien, le répertoire est créer, la copie s'effectue, l'avatar jpeg s'affiche bien mais la variable s'affiche mal comme ceci :

Le Blog de$titrele bloggeur

et j'y suis presque mais malgré les liens que tu as donné et les conseils, je coince presque au but
jordane45
Messages postés
27059
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 décembre 2019
318 -
Tu dois concatener ton url avec ta variable $titre et non juste l'ecrire dans ta chaine.... (comme tu l'as fait avec $_POST ['blog']
Commenter la réponse de blog-machine
Messages postés
114
Date d'inscription
samedi 27 juillet 2013
Statut
Membre
Dernière intervention
7 mai 2014
0
Merci
tu veux dire comme ça ?

<?php
if (isset($_GET["nom-blog"])){
$titre=$_GET["nom-blog"];
echo 'le blog' . $_GET["nom-blog"] . 'du bloggeur Marcel'; }
?>

ça donne ça

le blog$titredu bloggeur Marcel

qu'est ce que tu veux dire par concaténation, j'ai eu beau chercher je n'ai pas compris
Commenter la réponse de blog-machine
Messages postés
27059
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 décembre 2019
318
0
Merci
Dans ta première page... tu fais ta redirection de la manière suivante :
header('Location: '.'http://www.blog-machine.fr/dev/blog/'.$_POST['blog'].'/index.php?titre=$titre');

As-tu remarqué ?? ... $titre n'est pas en Bleu dans la coloration syntaxique.... un peu normal.. vu que tu l'as mis directement dans ta chaine de caractères... au lieu de le concaténer avec.

Tu peux d'ailleurs vite t'en rendre compte... regardes quelle est l'URL indiquée dans ton navigateur internet lorsque tu arrives sur ta seconde page.....

Bref.. tu devrais avoir ceci :
header('Location: '.'http://www.blog-machine.fr/dev/blog/'.$_POST['blog'].'/index.php?titre='.$titre);




Pour ta seconde page :
<?php
 $titre=isset($_GET["titre"])? $_GET["titre"]:'error';
  echo 'le blog ' .$titre. ' du bloggeur Marcel'; 
 ?>


Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
Commenter la réponse de jordane45
Messages postés
114
Date d'inscription
samedi 27 juillet 2013
Statut
Membre
Dernière intervention
7 mai 2014
0
Merci
ça ne fonctionne pas

dans la barre d'adresse j'ai ça

/index.php?titre=

et ça s'arrête là

et dans la page j'ai ça :

le blog du bloggeur Marcel

J'ai essayé en changeant de place les virgule dans l'url mais là aussi ça bloque

ne serait ce pas parce que c'est une instruction : header location ?
jordane45
Messages postés
27059
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 décembre 2019
318 -
Avant ton header.. tu initalise $titre ??
blog-machine
Messages postés
114
Date d'inscription
samedi 27 juillet 2013
Statut
Membre
Dernière intervention
7 mai 2014
-
non je n'utilise que le header
jordane45
Messages postés
27059
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 décembre 2019
318 -
Tu fais bien un truc du genre non ?
$titre=isset($_POST["titre"])?$_POST["titre"];
//je dis d'aller sur l'url du répertoire que je viens de créer avec son fichier
header('Location:'.'http://www.blog-machine.fr/dev/blog/'.$_POST['blog'].'/index.php?titre='.$titre);

Dans ton Header.... tu lui demande d'aller sur l'URL :
http://www.blog-machine.fr/dev/blog/'.$_POST['blog'].'/index.php?titre='.$titre


$titre etant le text que tu souhaites récupérer sur ta seconde page......
Commenter la réponse de blog-machine
Messages postés
114
Date d'inscription
samedi 27 juillet 2013
Statut
Membre
Dernière intervention
7 mai 2014
0
Merci
Je crois que nous nous sommes mal compris;

dans mon fichier formu.php qui appelle mes instructions mkdir, copy et l'avatar image il y a le header et , c'est à dire :
header('Location: '.'http://www.blog-machine.net/dev/blog/'.$_POST['blog'].'/index.php?titre='.$titre);
Dans le corps html du fichier formulaire.htm il est déclaré avec :
<form action="formu.php" method="POST" enctype="multipart/form-data">
j'ai une série d'instruction en post mais rien d'autre et quand j'essaye avec ça dans le fichier :
$titre=isset($_POST["titre"])?$_POST["titre"];
ça ne marche pas, le fichier index.php dans le header ne s'affiche pas et la valeur pas renseigné
jordane45
Messages postés
27059
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 décembre 2019
318 -
Il faut que dans ton header ta varible $titre contienne....ton titre.
Le isset..est a mettre dans ton formu.php avant le header.
Commenter la réponse de blog-machine
Messages postés
114
Date d'inscription
samedi 27 juillet 2013
Statut
Membre
Dernière intervention
7 mai 2014
0
Merci
Je continu à croire que nous ne nous sommes pas compris reprenons
j'ai un fichier formulaire.htm

<html>
<head>
<title>Page d'inscription</title>
</head>
<body>
<form action="ins.php" method="POST" enctype="multipart/form-data">
<p>Nom du blog : <input type="text" name="blog" /></p>
<p>Avatar : <input type="file" name="avatar" /></p>
<p>Nom du Blog : <input type="text" name="titre" /></p>
<input type="submit" name="submit" value="Valider">
<input type="reset" name="reset" value="Effacer">
</form>
</body>
</html>

jusqu'ici tout va bien

ensuite j'ai le fichier php appelé par le formulaire :


<?php

include('include/conf.php');
include('include/fonctions.php');
$error=false;
$errors=array();
if (isset($_POST['blog'])){
if(!preg_match('/^[0-9a-z_\-\.]{5,48}$/i', $_POST['blog'])){

$error=true;
$errors[]='Le nom du blog ne doit comporter que des caractères alphanumériques, et les caractères suivants : "_", "-", ".". Il doit aussi être composé de moins de 49 caractères, mais de 5 caractères ou plus.';
}
}else{
$error=true;
$errors[]='Vous n\'avez pas posté le nom du blog !';
}

if (is_dir($_POST['blog'])){
$error=true;
$errors[]='Le blog existe déjà !';
}
if (isset($_FILES['avatar'])){
$im=@imageCreateFromString(file_get_contents($_FILES['avatar']['tmp_name']));
if ($im===NULL){
$error=true;
$errors[]='Vous n\'avez pas posté une image valide !';
}
$x1=imagesX($im); // On récupère les dimentions de l'image
$y1=imagesY($im);
$xdest=200; // Taille d'un avatar
$ydest=200; //
$k1=$xdest/$x1;
$k2=$ydest/$y1;
$k=min($k1,$k2, 1);
(int)$x2=$k*$x1;
(int)$y2=$k*$y1;
$dst_img= ImageCreateTrueColor($x2,$y2);
ImageCopyResized($dst_img,$im,0,0,0,0,$x2,$y2,$x1,$y1);
imageDestroy($im);
}else{
$error=true;
$errors[]='Vous n\'avez pas posté d\'avatar !';
}
if ($error){
echo '<html>
<head>
<title>Erreur !</title>
</head>
<body>
<h1>Erreur lors de l\'inscription !</h1>
<p>Vous avez fait une erreur (ou plusieurs erreurs) lors de l\'inscription...</p>
<ul>';
foreach ($errors as $er)
echo '
<li>'.$er.'</li>';
echo '
</ul>
<a href="javascript:history.go(-1);">Page précédente.</a>
</body>
</html>';
}
mkDir($_POST['blog']);
$rep_dest=$_POST['blog'];
imageJpeg($dst_img, $_POST['blog'].'/avatar.jpeg');
imageDestroy($dst_img);
copy ("index.php", "$rep_dest/index.php");

$titre=isset($_POST["titre"])?$_POST["titre"];

header('Location: '.'http://www.blog-machine.fr.net/dev/blog/'.$_POST['blog'].'/index.php?titre='.$titre);
?>

et le fichier index.php qui est appelé par le header


<html>
<head>
<title>TEST</title>
</head>
<body>
<table width="100%" border="1">
<tr>
<td id="titre">TESTING</td>
<td style="text-align: center;" id="avatar" width="20%"><img src="avatar.jpeg" alt="Avatar"/></td>

</tr>
<tr>
<td id="content" colspan="3">
<hr />
<!-- //--CONTENT--// --></td>
</tr>
<tr>
<td colspan="4" id="footer">
<a href="index.html">Page d'accueil de ce blog</a> |
<a href="../">Créer un blog</a> |
<a href="admin.html">Administrer ce blog</a> |
<a href="../contact.html">Contacter le webmaster</a>
</td>
</tr>
</table>
<?php
$titre=isset($_GET["titre"])?$_GET["titre"]:'erreur';
echo 'le blog ' .$titre. ' du bloggeur Marcel';
?>
</body>
</html>


et avec cette configuration le fichier index.php ne s'affiche pas
Commenter la réponse de blog-machine
Messages postés
27059
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 décembre 2019
318
0
Merci
Bonsoir,
Le fichier index.php ne s'affiche pas ?
Il ne s'affiche pas du tout ?
- Tu as quoi dans la barre d'adresse de ton navigateur ?
- Il se passe quoi si tu saisis manuellement dans la barre d'adresse de ton navigateur l'URL correspondante à la page que tu viens de créer ?

Tu peux tester ceci et me dire ce que ça t'affiche ?
// TOUJOURS initialiser ses variables POST/GET !!
$blog = isset($_POST['blog'])?$_POST['blog']:FALSE;
echo "<br> Blog = " . $blog;

if($blog){
  mkDir($blog);
  $rep_dest=$blog;
  imageJpeg($dst_img, $blog.'/avatar.jpeg');
  imageDestroy($dst_img);

  /* Tu avais oublié de concaténer $rep_dest..
   -> copy ("index.php", "$rep_dest/index.php");
  */
  copy ("index.php", $rep_dest."/index.php");

  $titre=isset($_POST["titre"])?$_POST["titre"]:'AUCUN TITRE';
  echo "<br>Le titre est : ".$titre;

  $url = 'http://www.blog-machine.fr.net/dev/blog/'.$blog.'/index.php?titre='.$titre;
  echo "<br> L'url sera : " .$url;

/*--------------------------------------------
   Le temps du test.. on commente cette partie 
    Si l'URL affichée correspond à ce que tu devrais avoir, 
    alors tu pourras dé-commenter la ligne suivante */
  //header('Location: '.$url);

}else{

echo "<p><h1>
        blog : ne contient rien !
         </h1></p>";
}
?>


NB : Depuis le temps qu'on te le dit... n'oublies pas de vérifier avec ISSET que tes variables POST/GET existent !

NB2 : Pour savoir ce qui cloche dans un programme... la première chose à faire est d'utiliser des ECHO ( ou des PRINT_R) pour connaitre le contenu de nos variables et essayer de déterminer où ça bloque...

NB3 : Je persiste.. mais je reste persuadé que l'utilisation d'une Base de données pour réaliser ton site serait largement préférable....( Créer des pages pour chaque personnes...argghh..;je trouve ça peu fiable...peu efficace...et compliquer : A mettre en Oeuvre et à maintenir...)


Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
Commenter la réponse de jordane45
Messages postés
114
Date d'inscription
samedi 27 juillet 2013
Statut
Membre
Dernière intervention
7 mai 2014
0
Merci
9a va mieux comme ça, mais tu sais même si je suis lent je progresse (un peu)

en effet je vais plutôt opter pour la solution avec une base mais autant lire, relire ça va à peu près mais écrire c'est plus difficile
jordane45
Messages postés
27059
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 décembre 2019
318 -
Le tout c'est de progresser. ..peu importe à quelle vitesse. :-)

Pour les bdd..tu verras ce n'est pas si compliqué.
Commenter la réponse de blog-machine