[RESOLU] Internal Server Error

Eléphant du PHP | 53 Messages

13 oct. 2016, 16:45

Je ne suis pas assez précis. En gros je me situe sur une page ou les employés entre leurs heures par taches.

A ce moment la, je dois récupérer les heures par taches dans mon foreach et les placer dans la base de données. S'il suffisait de récupérer la tache correspondante effectivement je me prendrai pas mal la tête :p !

C'est pour cela que je parcours ma liste de tache avec le foreach, mais je ne peux pas appliquer ma methode getHeures() afin de récupérer les heures par tache (mais pas sur la base de données, sur le site !).

J'ai trouvé un seul moyen pour que ca marche c'est de réecrire ma class Tache dans le fichier saisieOtp.php, je récupère bien les heures mais ensuite page blanche ... Il faut juste que je puisse utiliser la méthode dans cette page.

Je m'en veux j'ai l'impression que tu pars sur d'autres pistes pour rien :( !

En gros je dois importer ma classe dans ce fichier pour utiliser les méthodes, seul problème l'include et le require ne marche pas ... Je ne vois donc pas trop d'autres méthodes j'ai tout essayé ...

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

14 oct. 2016, 10:02

incluce / require : ça fonctionne tout le temps c'est juste que tu ne donnes pas le bon chemin :)

un autoloader peu te mâcher le boulot :-)~

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 53 Messages

14 oct. 2016, 10:11

J'ai tout testé, tu as ma parole, autoload, include require, et le chemin est bon j'ai vérifié avec d'autres fichiers qui faisaient des includes dans le meme dossier...

Et autoload pareil, des que je place un include require ou autoload, je prend un internal server error ... Ou alors carrément une page blanche sans code source. Quand je met un mauvais chemin il m'affiche une erreur claire.

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

14 oct. 2016, 10:42

tu as quoi comme code maintenant ? (il faut le fichier serveur seulement et le contenu de ce qui est inclus)

peux tout fournir un exemple de données pour le faire fonctionner ? (ce qu'il y a dans $_SESSION['matriceTachesConduite'] doit suffire a priori)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 53 Messages

14 oct. 2016, 10:57

Avec ce code la :
<?php
    require_once('../Ressources/Modele/class/Tache.php');
    // require_once('../Ressources/Modele/class/Tache.php');
    // require_once('../Ressources/Modele/class/Employe.php');

  if (isset($_POST['idEmploye']) && isset($_POST['idTache'])) {

    session_start();

    $i = 0;

    $employe = $_POST['idEmploye'];
    $machine = $_SESSION['idMachineEnCours'];
    $site = $_SESSION['site'];

    $idMachineEnCours = $machine;
    $res = json_decode($_POST['idTache']);
    var_dump($_SESSION['matriceTachesConduite']);
    foreach ($_SESSION['matriceTachesConduite'][$idMachineEnCours] as $cle => $tache) {
      //var_dump($tache);
      if ($_SESSION['matriceDureesTachesConduite'][$idMachineEnCours][$tache->getId()]->getHeures() > 0) {
        saveOtp($_SESSION['matriceDureesTachesConduite'][$idMachineEnCours][$tache->getId()]->getHeures(), $tache->getId(), $machine, 'otp', $employe, $site->getId());
       }
      $i++;
    }
  }
Le résultat de l'affichage du $_SESSION['matriceTachesConduite'] me donne :


<br />
<font size='1'><table class='xdebug-error xe-warning' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Warning: require_once(../Ressources/Modele/class/Tache.php): failed to open stream: No such file or directory in C:\wamp\www\Pointage\SaisiePointage\vue\ressources\saisieOtp.php on line <i>3</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0000</td><td bgcolor='#eeeeec' align='right'>150056</td><td bgcolor='#eeeeec'>{main}( )</td><td title='C:\wamp\www\Pointage\SaisiePointage\vue\ressources\saisieOtp.php' bgcolor='#eeeeec'>..\saisieOtp.php<b>:</b>0</td></tr>
</table></font>
<br />
<font size='1'><table class='xdebug-error xe-fatal-error' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Fatal error: require_once(): Failed opening required '../Ressources/Modele/class/Tache.php' (include_path='.;C:\php\pear') in C:\wamp\www\Pointage\SaisiePointage\vue\ressources\saisieOtp.php on line <i>3</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0000</td><td bgcolor='#eeeeec' align='right'>150056</td><td bgcolor='#eeeeec'>{main}( )</td><td title='C:\wamp\www\Pointage\SaisiePointage\vue\ressources\saisieOtp.php' bgcolor='#eeeeec'>..\saisieOtp.php<b>:</b>0</td></tr>
</table></font>

Le truc bizarre c'est que sur mon Mac je n'ai pas cette erreur. Enfin l'important est que ca marche sur le PC et j'obtiens ca :)
Modifié en dernier par tlalaguedulac le 14 oct. 2016, 11:32, modifié 1 fois.

Eléphant du PHP | 53 Messages

14 oct. 2016, 11:01

Et ce qui est très bizarre c'est que quand je met le path require_once('../Ressources/Modele/class/Tache.php'); la console affiche une erreur mais la page est ok! Alors que quand je change le chemin par ../../Ressources/Modele/class/Tache.php, la j'obtiens l'erreur affichée (orange et rouge) sans page:

Warning: Uncaught exception 'Exception' with message 'Erreur PHP n°2 : require_once(../../../Ressources/Modele/class/Tache.php): failed to open stream: No such file or directory dans C:\wamp\www\Pointage\SaisiePointage\vue\ressources\saisieOtp.php ligne 4' in C:\wamp\www\Pointage\SaisiePointage\index.php:21 Stack trace: #0 C:\wamp\www\Pointage\SaisiePointage\vue\ressources\saisieOtp.php(4): errorHandler(2, 'require_once(.....', 'C:\\wamp\\www\\Poi...', 4, Array) #1 C:\wamp\www\Pointage\SaisiePointage\vue\ressources\saisieOtp.php(4): require_once() #2 C:\wamp\www\Pointage\SaisiePointage\vue\tachesConduite.php(9): require_once('C:\\wamp\\www\\Poi...') #3 C:\wamp\www\Pointage\SaisiePointage\index.php(368): include_once('C:\\wamp\\www\\Poi...') #4 {main} thrown in C:\wamp\www\Pointage\SaisiePointage\index.php on line 21

En fait cela marche pareil sur mac et pc, simplement le pc affiche plus d'erreur :) ! Je viens de retenter autoload, include etc sur le pc, aucun résultat ... Toujours cette erreur d'ouverture. Je me demande si cela ne vient pas d'une autorisation, car l'erreur indique failed opening, or quand le chemin est mauvais la page ne s'affiche pas et quand il fail (avec le message d'erreur que je t'ai envoyé en premier), la page s'affiche.

Pour info quand je n'inclus rien, la variable $_SESSION['matriceTacheConduite'] contient:

<pre class='xdebug-var-dump' dir='ltr'>
<b>array</b> <i>(size=1)</i>
7 <font color='#888a85'>=></font>
<b>array</b> <i>(size=1)</i>
9 <font color='#888a85'>=></font>
<b>object</b>(<i>__PHP_Incomplete_Class</i>)[<i>56</i>]
<i>public</i> '__PHP_Incomplete_Class_Name' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'Tache'</font> <i>(length=5)</i>
<i>private</i> 'id' <small>(Tache)</small> <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'9'</font> <i>(length=1)</i>
<i>private</i> 'nom' <small>(Tache)</small> <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'Découverte'</font> <i>(length=11)</i>
</pre>

Et pour finir tu voulais le contenu de ce qui est inclus, par exemple pour tache.php (la class tache) :
<?php


/*
** Cette classe représente une tache. Se reporter au schéma de la base pour plus de détails.
*/
class Tache{



	/* -------------------- ATTRIBUTS -------------------- */

	private $id;
	private $nom;


	/* -------------------- CONSTRUCTEUR -------------------- */


	/* Construit l'objet à partir des données présentes dans la base
	** ENTREES: - id : identifiant de la tache à construire
	**			- type : type de tache à récuperer. Peut prendre les valeurs 'conduite' ou 'entretien'.
	** CONTRAT: id est un identifiant valide et présent dans la base (et dans la bonne table, à savoir tachesconduite ou tachesentretien).
	** EXCEPTION : Lève une exception en cas d'erreur
	*/
	public function __construct($id, $type){

		global $DATABASE;

		if ( $type == 'conduite' ) {
			$table = 'tachesconduite';
		} elseif ( $type == 'entretien' ) {
			$table = 'tachesentretieninstallation';
		}

		$requete = $DATABASE->prepare("SELECT * FROM " . $table . " WHERE id = ? ");
		$requete->execute(array($id));

		$resultat = $requete->fetch();
		$requete->closeCursor();

		if($resultat == false) {
			throw new Exception( 'DATABASE ERROR');
		}

		$this->id = $id;
		$this->nom = $resultat['nom'];

	}




	/* -------------------- ACCESSEURS -------------------- */

	public function getId(){
		return $this->id;
	}

	public function getNom(){
		return $this->nom;
	}



	/* -------------------- MUTATEURS -------------------- */

	public function setNom($nom){
		$this->nom = $nom;
	}



	/* -------------------- METHODES -------------------- */


}


?>
Desolé des pavés :p Mais je prefere que ce soit bien précis :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

15 oct. 2016, 13:34

Moi je serai toi pour debuguer facilement, je remplacerai les variables en $_POST par des $_GET comme ça tu peux appeler directement ton script en lui passant les variables en paramètres dans l'url car tu as l'air de galérer et ça serait + pratique pour toi.

Concernant le message d'erreur, "failed to open stream: No such file or directory " ce n'est pas un problème d'autorisation mais de fichier inexistant, tu t'es donc trompé dans le chemin relatif qui va à ton fichier depuis le script php qui l'appelle
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 53 Messages

17 oct. 2016, 09:42

J'ai placé le chemin absolu en partant de C:, ca marche ! J'aurai du tenter ça depuis le début !

Merci pour les conseils @arthur, je peux maintenant manipuler mes variables à travers les fichiers et appeler les méthodes correspondantes :)

Bonne journée ! Merci Moogli aussi