Problème de Fonction php

Résolu/Fermé
David987 Messages postés 121 Date d'inscription samedi 19 décembre 2015 Statut Membre Dernière intervention 16 octobre 2022 - Modifié le 4 août 2019 à 01:38
 Utilisateur anonyme - 5 août 2019 à 08:35
Bonjour,

J'ai un souci sur une fonction, ça me dis qu'un champ ne peux pas être null alors que normalement elle devrais contenir quelques chose.
Voici mon code :

function select_liste_poke_peche_normal_jour() {
 $bdd = conection_bdd();
 //selection des différents pokemon a mettre dispo
 $select_time_actu = $bdd->query("SELECT * FROM capture_eau ORDER BY time_affichage_poke DESC")->fetch();
 $date_actu = $select_time_actu['time_affichage_poke'];
 if (time() - $date_actu <= 1){
  echo 'Aucun pokemon de disponible pour le moment';   
 } 
 else { 
  if ($map == "bolina")
  {
  $poke_dispo_map = array('magicarpe', 'ecayon', 'Corayon', 'poissirene', 'magicarpe'); // A mettre pour chaque map par zone de capture.
  }
  elseif ($map == "metropolis"){
  $poke_dispo_map = array('magicarpe', 'denticriss', 'leviator', 'poissoroy', 'relicanth'); // A mettre pour chaque map par zone de capture.
  }
  $update_date_actu = $bdd->exec("UPDATE capture_eau SET affiche_poke='1'");
  $nombre_poke = 1;
  while($nombre_poke <= 20) {
   $input = $poke_dispo_map; //mettre les poke dans cette variable pour chaque zone et chaque map
   $selection_poke = array_rand($input, 2);
   $choix_chromatique = rand(1,4096);
   if ($choix_chromatique == 1) {
    $chromatique = 'Chromatique';
   }
   else {
    $chromatique = '';
   }
   $sexe = rand(1,2);
   if ($map == "bolina"){
    $niveau = rand(2,5);
   }
   elseif ($map == "metropolis"){
    $niveau = rand(6,9);
   }
   $info_poke = $bdd->query("SELECT * FROM pokemon WHERE nom = '".$selection_poke."' ")->fetch();
   $nom = $info_poke['nom'];
   $type1 = $info_poke['type1'];
   $type2 = $info_poke['type2'];
   $insert_pok = $bdd->prepare("INSERT INTO `capture_eau` (`ai`, `id_poke`, `nom_poke`, `Chromatique`, `niveau_poke`, `sexe_poke`, `type1_poke`, `type2_poke`, `lieu`, `lieu2`, `affiche_poke`, `time_affichage_poke`) 
          VALUES (:ai, :id_poke, :nom_poke, :Chromatique, :niveau_poke, :sexe_poke, :type1_poke, :type2_poke, :lieu, :lieu2, :affiche_poke, :time_affichage_poke)");
   $insert_pok -> bindvalue(':ai', '');
   $insert_pok -> bindvalue(':id_poke', $niveau);
   $insert_pok -> bindvalue(':nom_poke', $nom);
   $insert_pok -> bindvalue(':niveau_poke', $niveau);
   $insert_pok -> bindvalue(':sexe_poke', $sexe);
   $insert_pok -> bindvalue(':Chromatique', $chromatique);
   $insert_pok -> bindvalue(':time_affichage_poke', time());
   $insert_pok -> bindvalue(':affiche_poke', '0');
   $insert_pok -> bindvalue(':lieu', $map);
   $insert_pok -> bindvalue(':lieu2', 'chromaland');
   $insert_pok -> bindvalue(':type1_poke', $type1);
   $insert_pok -> bindvalue(':type2_poke', $type2);
   $insert_pok -> execute(); 
   $nombre_poke++; 
  } 
 }
}


Alors la connection se fais nickel et ce qui me dis qui ne peux pas être null c'est $nom.
Help me please.
A voir également:

3 réponses

yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
4 août 2019 à 11:03
bonjour, je me demande si la ligne 21 fait bien ce que tu imagines. je suggère que tu examines le contenu de $selection_poke.
0
David987 Messages postés 121 Date d'inscription samedi 19 décembre 2015 Statut Membre Dernière intervention 16 octobre 2022 1
Modifié le 4 août 2019 à 11:38
quand je fais un var_dump() ça me met rien du tous.

Je comprend pas.
Ce que je cherche à faire c'est selectionner 20 parmis la liste de 5 définis dans la variable $poke_dispo_map et de les enregistrer dans une table tous en prenant les infos de chaque pokemon dans la table pokemon.

Tu aurais une idée pour corriger le problème ?
0
yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > David987 Messages postés 121 Date d'inscription samedi 19 décembre 2015 Statut Membre Dernière intervention 16 octobre 2022
4 août 2019 à 12:00
peux-tu montrer ton code avec le var_dump(), ainsi que ce qui est affiché? peut-être utile aussi d'examiner le contenu de $input.
une idée pour corriger une de tes erreurs: lire et comprendre la documentation de array_rand()
0
David987 Messages postés 121 Date d'inscription samedi 19 décembre 2015 Statut Membre Dernière intervention 16 octobre 2022 1
Modifié le 4 août 2019 à 12:12
J'ai essayé ça :

function select_liste_poke_peche_normal_jour() {
  $bdd = conection_bdd();
 //selection des différents pokemon a mettre dispo
 $select_time_actu = $bdd->query("SELECT * FROM capture_eau ORDER BY time_affichage_poke DESC")->fetch();
 $date_actu = $select_time_actu['time_affichage_poke'];
 if (time() - $date_actu <= 1){
  echo 'Aucun pokemon de disponible pour le moment';   
 } 
 else { 
  if ($map == "bolina")
  {
  $poke_dispo_map = array("a" => 'magicarpe', "b" => 'ecayon', "c" =>'Corayon', "d" =>'poissirene', "e" =>'magicarpe'); // A mettre pour chaque map par zone de capture.
  }
  elseif ($map == "metropolis"){
  $poke_dispo_map = array( "a" => 'magicarpe',  "b" =>'denticriss',  "c" =>'leviator',  "d" =>'poissoroy',  "e" =>'relicanth'); // A mettre pour chaque map par zone de capture.
  }
  $update_date_actu = $bdd->exec("UPDATE capture_eau SET affiche_poke='1'");
  $nombre_poke = 1;
  while($nombre_poke <= 20) {
   $input = $poke_dispo_map; //mettre les poke dans cette variable pour chaque zone et chaque map
   $selection_poke = array_rand($input, 2);
   $choix_chromatique = rand(1,4096);
   if ($choix_chromatique == 1) {
    $chromatique = 'Chromatique';
   }
   else {
    $chromatique = '';
   }
   var_dump($selection_poke);
   $sexe = rand(1,2);
   if ($map == "bolina"){
    $niveau = rand(2,5);
   }
   elseif ($map == "metropolis"){
    $niveau = rand(6,9);
   }
   $info_poke = $bdd->query("SELECT * FROM pokemon WHERE nom = '".$selection_poke."' ")->fetch();
   $nom = $info_poke['nom'];
   $type1 = $info_poke['type1'];
   $type2 = $info_poke['type2'];
   $insert_pok = $bdd->prepare("INSERT INTO `capture_eau` (`ai`, `id_poke`, `nom_poke`, `Chromatique`, `niveau_poke`, `sexe_poke`, `type1_poke`, `type2_poke`, `lieu`, `lieu2`, `affiche_poke`, `time_affichage_poke`) 
          VALUES (:ai, :id_poke, :nom_poke, :Chromatique, :niveau_poke, :sexe_poke, :type1_poke, :type2_poke, :lieu, :lieu2, :affiche_poke, :time_affichage_poke)");
   $insert_pok -> bindvalue(':ai', '');
   $insert_pok -> bindvalue(':id_poke', $niveau);
   $insert_pok -> bindvalue(':nom_poke', $nom);
   $insert_pok -> bindvalue(':niveau_poke', $niveau);
   $insert_pok -> bindvalue(':sexe_poke', $sexe);
   $insert_pok -> bindvalue(':Chromatique', $chromatique);
   $insert_pok -> bindvalue(':time_affichage_poke', time());
   $insert_pok -> bindvalue(':affiche_poke', '0');
   $insert_pok -> bindvalue(':lieu', $map);
   $insert_pok -> bindvalue(':lieu2', 'chromaland');
   $insert_pok -> bindvalue(':type1_poke', $type1);
   $insert_pok -> bindvalue(':type2_poke', $type2);
   $insert_pok -> execute(); 
   $nombre_poke++; 
  } 
 }
}



ça me met l'erreur suivante :

Warning: array_rand() expects parameter 1 to be array, null given


L'erreur correspond à la ligne 21 sur la fonction du code qui bloque ci-dessus.

Help me please
0
yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
4 août 2019 à 12:16
merci de toujours indiquer la ligne où se produit une erreur.
si c'est sur la ligne 21, le message t'indique que $input est null. dans quel cas $input serait-il nul?
0
David987 Messages postés 121 Date d'inscription samedi 19 décembre 2015 Statut Membre Dernière intervention 16 octobre 2022 1
Modifié le 4 août 2019 à 18:19
Il ne devrait pas indiquer NULL puisque $input correspond à la variable $poke_dispo_map qui est un array et qui contient 5 entrées.
0
yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > David987 Messages postés 121 Date d'inscription samedi 19 décembre 2015 Statut Membre Dernière intervention 16 octobre 2022
4 août 2019 à 20:53
as-tu examiné la variable $poke_dispo_map?
0
Utilisateur anonyme
Modifié le 5 août 2019 à 09:13
Salut,

Alors la connection se fais nickel et ce qui me dis qui ne peux pas être null c'est $nom.
Help me please.


Dans ta table
pokemon
, vérifie si ta colonne
nom
existe, et si elle est correctement remplie. Je te conseille (si ce n'est pas déjà fait) d'afficher toutes les erreurs pour PDO :

$bdd = conection_bdd();
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);


Après un query tu peux utiliser rowCount() pour vérifier le nombre de résultats. Je te conseille de le faire systématiquement avant de vouloir traiter le résultat.

   $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
   $info_poke = $bdd->query("SELECT * FROM pokemon WHERE nom = '".$selection_poke."' ")->fetch();

   if($info_poke->rowCount() > 0){
       //un petit message pour dire que tout va bien
       echo "La requête contient {$info_poke->rowCount()} résultats ! :-)"; 
   } else {
       //un petit die() pour stopper le script et afficher une erreur
       die("<h1>Oups, aucun résultat ?!</h1>");
   }

   $nom = $info_poke['nom'];
   $type1 = $info_poke['type1'];
   $type2 = $info_poke['type2'];


Si tu as un doute, le mieux est de faire ta requête directement dans phpmyadmin pour voir si tu as le résultat attendu.

Petite précision sans lien direct, je me permets de rappeler que fetch() retourne la première ligne de résultats. Si tu veux récupérer toutes les lignes, tu peux utiliser un fetchAll().
0