[RESOLU] Retourner une variable dans un flux (structure mvc)

Eléphant du PHP | 61 Messages

14 janv. 2015, 11:42

Bonjour,

Voici mon probléme, je voudrais retourner la variable
$e
se trouvant dans ma class, dans le flux index.php:

index.php:
<!DOCTYPE html>
<?php
include('process/process_weather.php')
?>
<head>
process_weather.php:
<?php
include('../class/Weather.php');

if(isset($_POST['submitChoiceCity'])){
$weather=new Weather;
$weather->publishWeather($_POST['choiceCity']);
}
Weather.php
public function publishWeather($city){
	
	try
	{
		$bdd=new PDO('mysql:host=localhost;dbname=weather','root','');
	}
	catch(Exception $e)
	{
		die('Erreur :'.$e->getMessage());
	}
	
	$req1=$bdd->prepare('SELECT resumeColumn, period, tempMini, tempMaxi, comment FROM weathertable WHERE city=:city AND day=1');
	
	$req1->execute(array(
	'city'=>$city,
	));
	
	while($result=$req1->fetch()){
	$e= '<p>'.$this->getNextDay(1).$city.' ; '.$result['period'].' ; '.$result['resumeColumn'].' ; '.$result['tempMini'].' ; '.$result['tempMaxi'].' ; '.$result['comment'].'</p>';
	return $e;
	}

	$req1->closeCursor();
Voila, donc j'ai tester plusieurs façon mais sans succés...en sachant que la variable affiche bien quelque chose (j'ai tester avec un echo)...

Cordialement

ViPHP
xTG
ViPHP | 7331 Messages

14 janv. 2015, 12:13

Sachant que $e est renvoyé par la fonction, voici le principe :
<!DOCTYPE html>
<?php
$e = NULL;
include('process/process_weather.php');
var_dump($e);
?>
<head>
<?php
include('../class/Weather.php');

if(isset($_POST['submitChoiceCity'])){
$weather=new Weather;
$e = $weather->publishWeather($_POST['choiceCity']);
}

Eléphant du PHP | 61 Messages

14 janv. 2015, 12:18

Voici mes deux messages d'erreurs....

Warning: include(../class/Weather.php): failed to open stream: No such file or directory in C:\wamp\www\meteo\process\process_weather.php on line 2

Warning: include(): Failed opening '../class/Weather.php' for inclusion (include_path='.;C:\php\pear') in C:\wamp\www\meteo\process\process_weather.php on line 2

Pourtant, mes chemins sont bons... :?

ViPHP
xTG
ViPHP | 7331 Messages

14 janv. 2015, 14:28

L'ordinateur ne peut mentir. ;)

Ce que tu tentes de faire représente une architecture de dossier comme ça :

Code : Tout sélectionner

www/ class/ Weather.php meteo/ process/ process_weather.php index.php
Or je suppose que ton dossier class est plutôt dans le dossier meteo.
Donc ton chemin d'include n'est pas correct.

Eléphant du PHP | 61 Messages

14 janv. 2015, 16:22

Pour parer au problème, j'ai mis l'adresse complète...
<!DOCTYPE html>
<?php
$e=NULL;
include('C:\wamp\www\meteo\process\process_Weather.php');
echo $e;
?>
Mais $e me renvoi toujours rien...(enfin si, il me renvoi sur la page process_weather.php...)

En fait, je voudrais que $e s'affiche dans le flux de ma page index...

Faut t'il un header ?

ViPHP
xTG
ViPHP | 7331 Messages

14 janv. 2015, 20:21

Mais $e me renvoi toujours rien...(enfin si, il me renvoi sur la page process_weather.php...)
Si tu as une redirection qui s'effectue c'est que la class en gère une dans certains cas.
Il faudrait la regarder pour comprendre ce qui peut occasionner cela (constante non définie ? paramètre manquant dans l'initialisation ?).

Eléphant du PHP | 61 Messages

15 janv. 2015, 11:35

Je ne définis aucune constantes ni d'attributs dans ma classe :
<?php

class Weather {
	
	public function getNextDay($n){
J'utilise une version classique de structure mvc...( un formulaire sur index.php avec action="process.php", et ensuite dans le fichier process j'"include" mon fichier Class.php...)et ensuite dans mon fichier index.php j'"include" mon fichier process.php...

J'ai ajouté cela à la fin de ma méthode :
$req2->closeCursor();
		header('location:../index.php');
		return $e;
	}
Modifié en dernier par Incognito le 15 janv. 2015, 11:43, modifié 1 fois.

ViPHP
xTG
ViPHP | 7331 Messages

15 janv. 2015, 11:41

Mais $e me renvoi toujours rien...(enfin si, il me renvoi sur la page process_weather.php...)
Si tu as une redirection qui s'effectue c'est que la class en gère une dans certains cas.

Eléphant du PHP | 61 Messages

15 janv. 2015, 11:45

J'ai ajouté cela a la fin de ma méthode :
$req2->closeCursor();
		header('location:../index.php');
		return $e;
	}

ViPHP
xTG
ViPHP | 7331 Messages

15 janv. 2015, 12:37

header('location:../index.php');
C'est une redirection vers le fichier index.php.
Il faut donc l'enlever et vérifier qu'il n'y en a pas d'autres dans ta class qui ne devraient pas être présent.

Eléphant du PHP | 61 Messages

15 janv. 2015, 13:19

Aucune redirection se fait dans ma classe...

Eléphant du PHP | 61 Messages

15 janv. 2015, 16:10

J'ai testé ce code...tout simple mais je me retrouve avec aucun affichage dans mon flux...

index.php:
<?php

<form method="post" action="process.php">

<input type="submit" name="submitChoiceCity" value="Choisir cette ville" />
<?php

include('process.php');
if(isset($e)){
echo $e;
}
else {
echo "erreur";
}
?>
</form>
>
process.php:
<?php
include('Essai.php');

if(isset($_POST['submitChoiceCity']))
{
		$weather=new Essai;
		$weather->essai();
}
Essai.php:
<?php

class Essai {
	
	public function essai(){
			$e="hello";
			return $e;
			}
			
			}

Mammouth du PHP | 688 Messages

15 janv. 2015, 16:21

un peu d'html :
<form method="post" action="process.php">
<input type="submit" name="submitChoiceCity" value="Choisir cette ville" />
</form>
un peu de php (process.php) :
class Essai {       
        public function essai(){
                        $e="hello";
                        return $e;
                        }                      
}

if(isset($_POST['submitChoiceCity'])){
                $weather=new Essai;
                $e = $weather->essai();
echo $e;
}

Eléphant du PHP | 61 Messages

15 janv. 2015, 16:51

OK, mais tu casses ma structure MVC....

ViPHP
xTG
ViPHP | 7331 Messages

15 janv. 2015, 18:32

Tu postes ton formulaire vers process.php qui ne contient aucun affichage.
Le seul code prévu pour gérer cet affichage se trouve dans index.php. ;)
Modifie ton champs action.