[RESOLU] Internal Server Error

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Internal Server Error

Re: Internal Server Error

par tlalaguedulac » 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

Re: Internal Server Error

par @rthur » 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

Re: Internal Server Error

par tlalaguedulac » 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 :)

Re: Internal Server Error

par tlalaguedulac » 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 :)

Re: Internal Server Error

par moogli » 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)

@+

Re: Internal Server Error

par tlalaguedulac » 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.

Re: Internal Server Error

par moogli » 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 :-)~

@+

Re: Internal Server Error

par tlalaguedulac » 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é ...

Re: Internal Server Error

par moogli » 13 oct. 2016, 16:28

tu veux la tache qui correspond à $_POST['idTache'] ?
tu n'as pas un moyen plus simple pour la trouver ?
ce serait aussi simple de faire des requêtes sql que de triturer des tableaux ;)

si les taches sont bien dans les machines contenue dans $_SESSION['matriceTachesConduite']
ça peux être comme ça
<?php
if (!empty($_POST['idEmploye']) && !empty($_POST['idTache'])) {
    session_start();
    $site = $_SESSION['site'];

    if (!isset($_SESSION['matriceTachesConduite'][$_SESSION['idMachineEnCours']])) {
        // message d'erreur
    } else {
        // tu peux directement mettre la machine en cours en session c'est quand même plus simple :)
        $res = json_decode($_POST['idTache']);
        $employe = getEmploye($_POST['idEmploye']);
        $machineEnCours = $_SESSION['matriceTachesConduite'][$_SESSION['idMachineEnCours']];
        foreach ($res as $k => $v) {
            $tache = getTacheFromMachine($machineEnCours[$v], $_POST['idTache']);
            if ($tache->getHeures()>0) {
                // bon pour l'employe je pense que y a p'tet un soucis, sauf si tu t'attend a passer l'objet employé :)
                saveOtp($tache->getHeures(), $tache->getId(), $machineEnCours, 'otp', $employe, $site->getId());
            }
        }
    }
}

function getEmploye($id)
{
    foreach ($_SESSION['listeEmployes'] as $key => $value) {
        if ($value->getId()== $id) {
            return $value;
        }
    }
}
function getTacheFromMachine($m, $tacheID)
{
    foreach ($m as $tache) {
        if ($tache->getId() == $tacheId) {
            return $tache;
        }
    }
}
function getTache($tacheId)
{
    foreach ($_SESSION['matriceTachesConduite'] as $m) {
        $tache = getTacheFromMachine($m, $tacheId);
        if ($tache->getId() == $tacheId) {
            return $tache;
        }
    }
}
@+

Re: Internal Server Error

par tlalaguedulac » 13 oct. 2016, 15:26

J'ai édit mon message (au cas ou tu n'ai pas vu). Je dois employer ta méthode mais pour utiliser getId() sur $tache (dans mon foreach). Je ne pense pas posséder l'équivalent de $_SESSION['listeEmploye'] pour $tache, j'essaye et je te dis !

Re: Internal Server Error

par moogli » 13 oct. 2016, 15:22

de rien


@+

Re: Internal Server Error

par tlalaguedulac » 13 oct. 2016, 15:16

Non t'en fais pas j'ai besoin de rien afficher, je dois simplement entrer les variables voulues dans la base de données donc c'est nickel. Je vais essayer ta méthode de récréer une fonction getEmploye(). Le seul hic étant que j'aimerai utiliser le getId() et le getHeures() sur le $tache de mon foreach, et non sur le $employe.

Je marque résolu si c'est okay sinon je t'embete encore ! Haha :)

Merci pour toutes les infos en tout cas !

Re: Internal Server Error

par moogli » 13 oct. 2016, 14:33

du coup avec ce que tu indiques tu dois pouvoir faire un truc dans le genre
<?php
if (!empty($_POST['idEmploye']) && !empty($_POST['idTache'])) {
    session_start();
    $site = $_SESSION['site'];

    if (!isset($_SESSION['matriceTachesConduite'][$_SESSION['idMachineEnCours']])) {
        // message d'erreur
    } else {
        // tu peux directement mettre la machine en cours en session c'est quand même plus simple :)
        $res = json_decode($_POST['idTache']);
        $employe = getEmploye($_POST['idEmploye']);
        $machineEnCours = $_SESSION['matriceTachesConduite'][$_SESSION['idMachineEnCours']];
        foreach ($res as $k => $v) {
            $tache = $machineEnCours[$v];
            if ($tache->getHeures()>0) {
                // bon pour l'employe je pense que y a p'tet un soucis, sauf si tu t'attend a passer l'objet employé :)
                saveOtp($tache->getHeures(), $tache->getId(), $machineEnCours, 'otp', $employe, $site->getId());
            }
        }
    }
}

function getEmploye($id)
{
    foreach ($_SESSION['listeEmployes'] as $key => $value) {
        if ($value->getId()== $id) {
            return $value;
        }
    }
}
reste a tester.
avec ce script il n'y a pas d'affichage (a moins que saveOtp le fasse) et du coup tu va rien avoir coté JS pour ton alerte :)


@+

Re: Internal Server Error

par tlalaguedulac » 13 oct. 2016, 13:33

Merci pour les tuyaux, je t'accorde qu'avec une image c'est deguelasse même :) ! (Tu peux le dire haha)

J'ai oublié d'update le code de mon appel ajax sur le post car j'envoie l'idEmploye, et donc il existe, car je peux le récupérer par la suite.

Mon code n'a pas beaucoup changé, j'envoie presque tout ce dont j'ai besoin.
<script>
		var nom = '<?php echo $employe;?>';
		var res = '<?php echo json_encode($res); ?>';

			$(function(){
				$("#retourNavBar").click(function() {
					$.ajax({
						url: 'vue/ressources/saisieOtp.php',
						type: 'POST',
						dataType: 'html',
						data: { idEmploye: nom,
										idTache: res
						},
						success: function(msg) {
							alert(msg);
						},
						error: function(resu, statut, erreur) {
							alert(erreur);
						}
					});
				});
			});

		</script>
Sauf la méthode getId(), car effectivement je ne peux pas utiliser getId() sur ma page d'appel Ajax pour ensuite l'envoyer, il faut que j'effectue ce traitement à la reception et non à l'envoi. Et ce qui est bizarre c'est que sur ma page d'envoi, la methode getId() marche, mais quand je suis dans la reception plus rien.

Au cas ou, ma reception ressemble à ça et j'ai besoin d'utiliser le getId() dans mon foreach pour récupérer l'id ainsi que getHeures pour récupérer les heures. Peut etre verras tu mieux le but de ma recherche :)
if (isset($_POST['idEmploye']) && isset($_POST['idTache'])) {

    session_start();

    $i = 0;

    var_dump($_SESSION);
    $employe = $_POST['idEmploye'];
    $machine = $_SESSION['idMachineEnCours'];
    $site = $_SESSION['site'];
    //var_dump($site->getId());
    $idMachineEnCours = $machine;
    $res = json_decode($_POST['idTache']);

    foreach ($_SESSION['matriceTachesConduite'][$idMachineEnCours] as $cle => $tache) {
      // if ($_SESSION['matriceDureesTachesConduite'][$idMachineEnCours][$res[$i]]->getHeures() > 0) {
      //   saveOtp($_SESSION['matriceDureesTachesConduite'][$idMachineEnCours][$tache->getId()]->getHeures(), $tache->getId(), $machine, 'otp', $employe, $site->getId());
      //  }
      $i++;
    }
  }

Re: Internal Server Error

par moogli » 13 oct. 2016, 12:41

alors pour l'affichage, tu ouvres les outils de développement de ton navigateur (ctrl + i ou F12), dans l'onglet réseau tu verra la requête et toutes les données dans le corps de réponse :-)~

sinon utilise un client rest pour tester.

c'est po simple avec une image :)

par contre elle confirme ce que dit php et ce que je soupconne $_SESSION['employe'] n'existe pas !

tu as une liste d'employé, peux être qu'il te faut chercher dans cette liste pour récupérer le bon utilisateur ?

@+