Menu

Problème d'erreur sur un fichier php [Résolu]

NICOLAS3377 15 Messages postés samedi 20 août 2016Date d'inscription 12 septembre 2018 Dernière intervention - 21 août 2018 à 19:23 - Dernière réponse : jordane45 22528 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 septembre 2018 Dernière intervention
- 12 sept. 2018 à 12:48
BONJOUR
j'ai écrit sur la base du site du zero un programme en php que je vous envoie ci-dessous
<?php
try
{
$bdd= new PDO('mysql:host=localhost;dbname=test','root','');
}
catch (Exception $e)
{
 die('Erreur : '.$e->getMessage());
}
$req =$bdd->prepare('SELECT nom, prix FROM jeux_video WHERE
possesseur = ? AND prix <= ? ORDER BY prix');
$req->execute(array($_GET['possesseur'],$_GET['prix']));
echo '<ul>';
while ($donnees= $req->fetch())
{
echo '<li>'.$donnees['nom'].' ('.$donnees['prix'].'
EUR)</li>';
}
echo '</ul>';
$req ->closeCursor();
?>


EDIT : Ajout des balises de code

Je reçois un message d'erreur :
) SCREAM: Error suppression ignored for
( ! ) Notice: Undefined index: possesseur in C:\wamp\www\ASTUCESVBAEXCEL\selection_jeux.php on line 12
Call Stack
# Time Memory Function Location
1 0.0007 249952 {main}( ) ..\selection_jeux.php:0

( ! ) SCREAM: Error suppression ignored for
( ! ) Notice: Undefined index: prix in C:\wamp\www\ASTUCESVBAEXCEL\selection_jeux.php on line 12
Call Stack
# Time Memory Function Location
1 0.0007 249952 {main}( ) ..\selection_jeux.php:0

D'avance merci pour votre aide. Nicolas
Afficher la suite 

Votre réponse

20 réponses

jordane45 22528 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 septembre 2018 Dernière intervention - Modifié par jordane45 le 21/08/2018 à 21:05
0
Merci
Bonjour (si si .. on commence par ça ici.)

Ensuite pour poster ton code, pense à utiliser les BALISES DE CODE
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Puis, pense à lire (et appliquer) ce qui se trouve dans les liens suivants :
http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code
http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

Et enfin .. ton code revu et corrigé :
<?php
//affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//connexion à la bdd
// il serait mieux de la placer dans un fichier à part que tu n'aurais qu'à inclure dans 
// les pages où tu en as besoin...
try{
 $bdd =new PDO('mysql:host=localhost;dbname=test; charset=utf8', 'root', '');
 // Activation des erreurs PDO
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
 $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
  die('Erreur : ' . $e->getMessage());
}

//Récupération propre des variables AVANT de les utiliser
$possesseur = !empty($_GET['possesseur']) ? $_GET['possesseur'] : NULL;
$prix = !empty($_GET['prix']) ? $_GET['prix'] : NULL;

if($prix && $possesseur){
  //préparation de la requête et des variables
   $sql = "SELECT nom, prix 
          FROM jeux_video 
          WHERE possesseur = ? 
          AND prix <= ? 
          ORDER BY prix";
   $datas = array($possesseur, $prix);

  //Execution de la requete
  try{
    $requete = $bdd -> prepare($sql) ;
    $requete->execute($datas) ;
  }catch(Exception $e){
    // en cas d'erreur :
     echo " Erreur ! ".$e->getMessage();
     echo " Les datas : " ;
    print_r($datas);
  }

  echo '<ul>';
  while ($donnees= $requete->fetch()) {
    echo '<li>'.$donnees['nom'].' ('.$donnees['prix'].' EUR)</li>';
  }
  echo '</ul>';
  $requete->closeCursor();
}



Cordialement, 
Jordane                                                                 
Commenter la réponse de jordane45
NICOLAS3377 15 Messages postés samedi 20 août 2016Date d'inscription 12 septembre 2018 Dernière intervention - 21 août 2018 à 20:27
0
Merci
pardon pour ne pas avoir dit bonjour. je vais tester vos fichiers que vous m'avez envoyés. Merci pour votre aide. Nicolas
Commenter la réponse de NICOLAS3377
NICOLAS3377 15 Messages postés samedi 20 août 2016Date d'inscription 12 septembre 2018 Dernière intervention - 21 août 2018 à 20:33
0
Merci
Bonsoir Jordane45. J'ai bien testé ton code mais php me renvoie une page blanche. A quoi est ce du à ton avis ? Merci pour ta réponse .
jordane45 22528 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 septembre 2018 Dernière intervention - 21 août 2018 à 21:04
Vu que j'ai placé un IF pour m'assurer que tu avais bien tes variables... si tu elles ne sont pas présentes dans ton URL c'est normal que la page reste blanche.
Comment accèdes tu à cette page ? Quelle est son URL ?
Tu passes par un formulaire ? Tu es sûr d'être en GET ?
jordane45 22528 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 septembre 2018 Dernière intervention - 21 août 2018 à 21:06
Au pire, ajoute un ELSE pour voir
<?php
//affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//connexion à la bdd
// il serait mieux de la placer dans un fichier à part que tu n'aurais qu'à inclure dans 
// les pages où tu en as besoin...
try{
 $bdd =new PDO('mysql:host=localhost;dbname=test; charset=utf8', 'root', '');
 // Activation des erreurs PDO
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
 $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
  die('Erreur : ' . $e->getMessage());
}

//Récupération propre des variables AVANT de les utiliser
$possesseur = !empty($_GET['possesseur']) ? $_GET['possesseur'] : NULL;
$prix = !empty($_GET['prix']) ? $_GET['prix'] : NULL;

if($prix && $possesseur){
  //préparation de la requête et des variables
   $sql = "SELECT nom, prix 
          FROM jeux_video 
          WHERE possesseur = ? 
          AND prix <= ? 
          ORDER BY prix";
   $datas = array($possesseur, $prix);

  //Execution de la requete
  try{
    $requete = $bdd -> prepare($sql) ;
    $requete->execute($datas) ;
  }catch(Exception $e){
    // en cas d'erreur :
     echo " Erreur ! ".$e->getMessage();
     echo " Les datas : " ;
    print_r($datas);
  }

  echo '<ul>';
  while ($donnees= $requete->fetch()) {
    echo '<li>'.$donnees['nom'].' ('.$donnees['prix'].' EUR)</li>';
  }
  echo '</ul>';
  $requete->closeCursor();

}else{
  echo "<pre>Variables GET :<br>";
  print_r($_GET);
  echo " </pre> <pre> Variables POST ? <br>";
  print_r($_POST);
  echo "</pre>";
}

Commenter la réponse de NICOLAS3377
NICOLAS3377 15 Messages postés samedi 20 août 2016Date d'inscription 12 septembre 2018 Dernière intervention - 21 août 2018 à 22:36
0
Merci
Pour l'instant mon site est sur mon pc en local. L'adresse est : http://localhost/astucesvbaexcel/index.php.
Mon site n'est pas encore en ligne.
Commenter la réponse de NICOLAS3377
NICOLAS3377 15 Messages postés samedi 20 août 2016Date d'inscription 12 septembre 2018 Dernière intervention - 21 août 2018 à 22:43
0
Merci
J'ai inclus tes nouvelles instructions de la requête et j'ai le message d'erreur suivant :

Variables GET :
Array
(
)

Variables POST ?
Array
(
)

Je ne voie pas où est l'erreur. Merci d'avance pour ton aide. Nicolas
jordane45 22528 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 septembre 2018 Dernière intervention - 21 août 2018 à 23:17
Ben
.tu n'as aucune variable get...
http://localhost/astucesvbaexcel/index.php?possesseur=toto&prix=10
Commenter la réponse de NICOLAS3377
NICOLAS3377 15 Messages postés samedi 20 août 2016Date d'inscription 12 septembre 2018 Dernière intervention - 22 août 2018 à 19:12
0
Merci
bonjour

mon niveau est plutôt faible en php. Qu'est ce que tu appelles variable get ?
jordane45 22528 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 septembre 2018 Dernière intervention - 22 août 2018 à 19:29
Ce que j'ai ecrit dans l'exemple que je t'ai donné... des variables dans l'URL
Commenter la réponse de NICOLAS3377
NICOLAS3377 15 Messages postés samedi 20 août 2016Date d'inscription 12 septembre 2018 Dernière intervention - 6 sept. 2018 à 19:18
0
Merci
Bonjour. J'ai un petit problème. J'ai préparé une requête préparée que j'ai exécutée. Le résultat s'affiche mais avec une erreur en ligne 12. Je vous envoie la requête et son résultat. Merci d'avance pour votre aide.


<?php
try
{https://www.commentcamarche.net/forum/affich-35538076-probleme-d-erreur-sur-un-fichier-php#p35539987
$bdd= new PDO('mysql:host=localhost;dbname=test','root','');
}
catch (Exception $e)
{
die('Erreur : '.$e->getMessage());
}
$req =$bdd->prepare('SELECT nom, prix FROM jeux_video WHERE
possesseur = "Patrick" AND prix <= 60 ORDER BY prix');
$req->execute(array($_GET['possesseur'],$_GET['prix_max']));
echo '<ul>';
while ($donnees= $req->fetch())
{
echo '<li>'.$donnees['nom'].' ('.$donnees['prix'].'
EUR)</li>';
}
echo '</ul>';
$req ->closeCursor();
?>




( ! ) SCREAM: Error suppression ignored for
( ! ) Notice: Undefined index: possesseur in C:\wamp\www\ASTUCESVBAEXCEL\selection_jeux.php on line 12
Call Stack
# Time Memory Function Location
1 0.0006 250312 {main}( ) ..\selection_jeux.php:0

( ! ) SCREAM: Error suppression ignored for
( ! ) Notice: Undefined index: prix_max in C:\wamp\www\ASTUCESVBAEXCEL\selection_jeux.php on line 12
Call Stack
# Time Memory Function Location
1 0.0006 250312 {main}( ) ..\selection_jeux.php:0

Sonic (2 EUR)
Street Fighter 2 (10 EUR)
Aladin (10 EUR)
NBA 2k (12 EUR)
X-FILES (25 EUR)
Actua Soccer 3 (30 EUR)
Star Wars : Jedi outcast (33 EUR)
Final Fantasy X (40 EUR)
Splinter Cell (53 EUR)
Soul Calibur 2 (54 EUR)
Pro Evolution Soccer 3 (59 EUR)
Dead or Alive Xtreme Beach Volley Ball (60 EUR)
Dead or Alive (60 EUR)
jordane45 22528 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 septembre 2018 Dernière intervention - 6 sept. 2018 à 19:59
Commenter la réponse de NICOLAS3377
NICOLAS3377 15 Messages postés samedi 20 août 2016Date d'inscription 12 septembre 2018 Dernière intervention - 11 sept. 2018 à 19:33
0
Merci
Bonjour,

Pour utiliser des ISSET on m'a proposé le code ci-joint:

//avec ISSET
//Si la variable $_POST['truc'] existe, alors $truc = $_POST['truc'] sinon elle vaut NULL
$truc = isset($_POST['truc']) ? $_POST['truc'] : NULL;

//ou avec !EMPTY()
//Si la variable $_POST['truc'] existe et n'est pas vide, alors $truc = $_POST['truc'] sinon elle vaut NULL
$truc = !empty($_POST['truc']) ? $_POST['truc'] : NULL;




Pourrait-tu m'expliquer les ?

Merci d'avance.

Nicolas
jordane45 22528 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 septembre 2018 Dernière intervention - 11 sept. 2018 à 19:53
C'est l'écriture ternaire
Une sorte de if .... tel qu'explique

Si la variable $_POST['truc'] existe et n'est pas vide, alors $truc = $_POST['truc'] sinon elle vaut NULL
Commenter la réponse de NICOLAS3377
NICOLAS3377 15 Messages postés samedi 20 août 2016Date d'inscription 12 septembre 2018 Dernière intervention - Modifié par jordane45 le 11/09/2018 à 21:59
0
Merci
Bonsoir,

j'ai un peu modifié le code précédent en ajoutant un ISSET

J'ai le résultat suivant :
<?php
try
{
$bdd= new PDO('mysql:host=localhost;dbname=test','root','');
}
catch (Exception $e)
{
 die('Erreur : '.$e->getMessage());
}
if (isset($_GET['nom'])AND isset($_GET['prix']))
{ 
$req =$bdd->prepare('SELECT nom, prix FROM jeux_video WHERE
possesseur = \'Patrick\' AND prix <= 60 ORDER BY prix');
$req->execute(array($_GET['possesseur'],$_GET['prix_max']));
echo '<ul>';
while ($donnees= $req->fetch())
{
echo '<li>'.$donnees['nom'].' ('.$donnees['prix'].'
EUR)</li>';
}
echo '</ul>';
$req ->closeCursor();
}
echo 'il faut renseigner un nom et un prix '?>


EDIT : Ajout des balises de code ( encore..... )
Le problème c'est qu'il me renvoie le message suivant : il faut renseigner un nom et un prix

Merci pour ton aide.

Nicolas
jordane45 22528 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 septembre 2018 Dernière intervention - 11 sept. 2018 à 22:07
Comme déjà indiqué à plusieurs reprises :
pour poster ton code, pense à utiliser les BALISES DE CODE
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Ensuite, je t'ai donné des liens... tu ne les as pas lu visiblement.....

Donc... encore une fois :
pense à lire (et appliquer) ce qui se trouve dans les liens suivants :
http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code
http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs


Et dans ton code... tu as oublié le ELSE

Voici ton code corrigé

<?php
//---------------------------------------------------------//
//affichage des erreurs PHP
//---------------------------------------------------------//
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);


//---------------------------------------------------------//
//connexion à la BDD ET activation des erreurs PDO
//---------------------------------------------------------//
try{
  $bdd =new PDO('mysql:host=localhost;dbname=test; charset=utf8', 'root', '');
  // Activation des erreurs PDO
  $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
  $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}
//---------------------------------------------------------//
// Récupération PROPRE des variables AVANT de les utiliser
//---------------------------------------------------------//
$nom = !empty($_GET['nom']) ? $_GET['nom'] : NULL;
$prix = !empty($_GET['prix']) ? $_GET['prix'] : NULL;

if ($nom && $prix) { 
  $sql = 'SELECT nom, prix 
          FROM jeux_video 
          WHERE  possesseur = :nom 
             AND prix <= :prix
          ORDER BY prix';
  $datas = array(':nom'=>$nom, ':prix'=>$prix);

  //Execution de la requete
  try{
    $requete = $bdd -> prepare($sql) ;
    $requete->execute($datas);
    $resultat = $requete->fetchAll(); //on stocke le resultat dans un array
  }catch(Exception $e){
    // en cas d'erreur :
     echo " Erreur ! ".$e->getMessage();
     echo " Les datas : " ;
    print_r($datas);
  }
  
  
  if(!empty($resultat)){
    echo '<ul>';
    foreach($resultat as $R){
      echo '<li>'.$R['nom'].' ('.$R['prix'].'EUR)</li>';
    }
    echo '</ul>';
  
  }

}else{
  echo 'il faut renseigner un nom et un prix ';
}
?>

Commenter la réponse de NICOLAS3377
NICOLAS3377 15 Messages postés samedi 20 août 2016Date d'inscription 12 septembre 2018 Dernière intervention - 11 sept. 2018 à 22:44
0
Merci
Merci Jordan pour ton aide

J'ai compris ce que voulaient dire les ?. C'est lié aux structures ternaires des if
jordane45 22528 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 septembre 2018 Dernière intervention - 11 sept. 2018 à 23:22
Tu comprends ce qu'on t'explique ( https://www.commentcamarche.net/forum/affich-35538076-probleme-d-erreur-sur-un-fichier-php#13 ) ... c'est déjà un bon début.
Commenter la réponse de NICOLAS3377
NICOLAS3377 15 Messages postés samedi 20 août 2016Date d'inscription 12 septembre 2018 Dernière intervention - 12 sept. 2018 à 12:26
0
Merci
Je préfère comprendre à mon rythme contrairement à la majorité qui fait semblant de comprendre.
jordane45 22528 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 septembre 2018 Dernière intervention - 12 sept. 2018 à 12:48
En attendant, si la réponse https://www.commentcamarche.net/forum/affich-35538076-probleme-d-erreur-sur-un-fichier-php#14 a solutionné ton souci, pense à mettre le sujet en résolu stp.
(via l'icone de roue crantée qui se situe en haut, à droite du titre de ta question).
Bonne journée.
Commenter la réponse de NICOLAS3377