Signaler

Probleme avec $conn->query($sql) [Résolu]

Posez votre question Laeti_NR - Dernière réponse le 12 juil. 2017 à 11:32 par jordane45
Bonjour,

Voila mon probleme : j'ai un fichier qui contient des numero d'identification et la permissions (ex : 559238/yes). Dans ma base de donnees, j'ai une table user avec en attribut le nom prenom, etc et le numero d'identification et j'aimerai recuperer le nom de la personne via son numero d'identification.
Du coup dans mon code est le suivant :
<?php 
session_start();
include("connection_DB.php");
$user_tmp = $_SESSION['user'];

function enregistrerInfos($perms, $user) {
      $fichier = @fopen("perms.txt", "a+"); 
      fputs($fichier, $user."/".$perms."\n");
      fclose($fichier);
}

if (isset ($_POST ["save"])) {
 if ((!empty( $_POST ["perms"])) && (!empty( $_POST ["id"]))) {
  enregistrerInfos($_POST["perms"], $_POST['id']);
  echo "ok";
 }
}
 
function checkPermissions() {
 $p = array();
 $Champ = array();
 $file = @fopen("perms.txt", "r+");
     while (! feof($file)) {
      $line = fgets($file);
      $Champ = explode("\n",$line);
         for ($j=0;$j<count($Champ)-1;$j++) {
          $var=explode("/", $Champ[$j]);
          if ($var[1] == 'yes') 
           array_push($p, $var[0]);
         }
 }

 $u = substr($_SESSION['user'],0,-1);   
   
 try {   
  for ($l=0;$l<count($p);$l++){
   $sql_perms = "SELECT ufirstname FROM user WHERE uid='".$p[$l]."'";
   if ($sql_perms) {
    $result_perms = $conn->query($sql_perms);
    $row_perms = $result_perms->fetch_assoc();
    if ($row_perms['ufirstname'] == $u)
     echo "true";
   }
  }
 } catch (Exception $e) {
  die('Erreur : '.$e->getMessage());
 }
}    
 
checkPermissions();
?>


EDIT : Ajout des balises de code (la coloration syntaxique).

Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
Jordane45


$p est l'array qui contient les numero d'identification.
Le probleme est le suivant :
la ligne $result_perms = $conn->query($sql_perms); retourne une erreur (erreur 500, blabla) lorsque je lance mon application sur Internet..

Est-ce ce quelqu'un sait pourquoi ?

Afficher la suite 
Utile
+1
plus moins
bonjour,
- peux-tu partager le détail de l'erreur "blabla" ?
- es-tu certain que $conn est correctement initialisé?
- je ne comprends pas le lien entre ta description et ton code. veux-tu vraiment récupérer le nom de la personne via son numéro d'identification? si oui, veux-tu faire cela pour un seul numéro d'identification, ou pour tous?
Donnez votre avis
Utile
+0
plus moins
Pour $p c'est le tableau qui contient les ID dont la permission est "yes". Il est initialise au debut de la fonction checkPermissions.
Effectivement je pourrais ajouter son ID, il faut que je trouve ou.. J'ai reprit un projet en cours et c'est pas toujours simple de savoir par ou commencer !!
yg_be 2821Messages postés lundi 9 juin 2008Date d'inscription ContributeurStatut 21 juillet 2017 Dernière intervention - 7 juil. 2017 à 18:17
si tu veux retrouver où ajouter son ID, tu peux rechercher tous les endroits où tu as une instruction:
$_SESSION['user']=...
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour,
- Voici l'erreur :
500 - Internal server error.
There is a problem with the resource you are looking for, and it cannot be displayed.

- $conn = new mysqli($servername, $username, $password, $dbname);
Je pense que c'est ca, non ?

- En fait dans mon fichier perms.txt il y a tous les ID avec les permissions (ex : 521456/yes ; 563218/no ; etc). Quand un utilisateur se connecte, je veux verifier s'il a la permission (d'acceder a une autre page). Du coup, je compare avec tous les IDs qui ont la permission (dans le tableau $p il n'y a que les IDs avec "yes" comme permission -> c'est un premier tri). Le probleme c'est que $_SESSION['user'] me retourne le nom de la personne, pas son ID.. Donc il faut que je check dans ma base de donnees quel nom va avec quel ID..
yg_be 2821Messages postés lundi 9 juin 2008Date d'inscription ContributeurStatut 21 juillet 2017 Dernière intervention - 7 juil. 2017 à 17:00
en ce qui concerne l'erreur 500 avec $conn, je pense que d'autres pourront mieux t'aider.
cependant, j'ai une suggestion pour le reste de ton code: comme, au départ, tu connais le nom, ne serait-il plus simple et plus clair de commencer par chercher, dans la base de données, l'ID correspondant au nom (
SELECT uid FROM user WHERE ufirstname  = $_SESSION['user']
). et d'ensuite parcourir le fichier pour trouver la ligne contenant ce uid.
ne penses-tu pas?
Répondre
Laeti_NR- 8 juil. 2017 à 11:05
Merci pour le conseil, je vais essayer comme ca
Répondre
Donnez votre avis
Utile
+0
plus moins
Il faudrait que tu nous montres le contenu de ton fichier "connection_DB.php"

Il faudrait aussi que tu gères correctement les erreurs avec mysqli ....
par exemple, pour une requête il faut faire :
$sql_perms = "SELECT ufirstname FROM user WHERE uid='".$p[$l]."'";
if (!$mysqli->query($sql_perms)) {
    printf("Message d'erreur : %s\n", $mysqli->error);
}


et pour une connexion à la bdd "propre" il faut écrire un truc du genre
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* Vérification de la connexion */
if ($mysqli->connect_errno) {
    printf("Echec de la connexion: %s\n", $mysqli->connect_error);
    exit();
}


Ensuite.... il est conseillé de remplacer ton
include("connection_DB.php");

par
require_once "connection_DB.php";



Et enfin.... activer l'affichage des erreurs PHP en plaçant, au début de tes pages php, le code suivante
<?php
error_reporting(E_ALL);
ini_set('display-errors','on');

Donnez votre avis
Utile
+0
plus moins
Voici le contenu de mon fichier connection_BD.php
<?php
$servername = "******";
$username = "********";
$password = "********";
$dbname = "********";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$conn->set_charset("utf8"); //Encoding for the database
?>

Ok je vais modifier tout ca, merci pour les conseils
Laeti_NR- 8 juil. 2017 à 11:21
J'ai fait toutes les modifications mais quand je met la ligne $conn->query($sql_perms) ca fonctionne toujours pas..
Répondre
yg_be 2821Messages postés lundi 9 juin 2008Date d'inscription ContributeurStatut 21 juillet 2017 Dernière intervention - 8 juil. 2017 à 11:38
peux-tu ajouter
print_r($conn);
et
print_r($sql_perms);
juste avant
$conn->query($sql_perms);
, et partager le résultat?
Répondre
Laeti_NR- 11 juil. 2017 à 11:13
Ca renvoie la meme erreur.. 500 blablabla
Je pense que le probleme c'est $conn mais dans les autres fichiers il est utilise et il fonctionne tres bien..
Répondre
Donnez votre avis
Utile
+0
plus moins
pourquoi as-tu -1 dans la ligne ci-dessous?
for ($j=0;$j<count($Champ)-1;$j++)
yg_be 2821Messages postés lundi 9 juin 2008Date d'inscription ContributeurStatut 21 juillet 2017 Dernière intervention - 11 juil. 2017 à 12:48
je suggère plutôt:
         for ($j=0;$j<count($Champ);$j++) {
          $var=explode("/", $Champ[$j]);
          if ((count($var)>1) and  ($var[1] == 'yes') )
           array_push($p, $var[0]);
         }
Répondre
Laeti_NR- 11 juil. 2017 à 12:56
Merci, as-tu une idee pour le $conn qui ne fonctionne pas ?
Répondre
yg_be 2821Messages postés lundi 9 juin 2008Date d'inscription ContributeurStatut 21 juillet 2017 Dernière intervention - 11 juil. 2017 à 15:56
qu'affichent
print_r($conn);
et
print_r($sql_perms);
(comme suggéré en #13) ?
Répondre
Laeti_NR- 12 juil. 2017 à 11:25
C'est bon j'ai trouve, il fallait ramettre include("connection_DB.php") dans la fonction checkPermissions().
Répondre
jordane45 17902Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 21 juillet 2017 Dernière intervention - 12 juil. 2017 à 11:32
C'est ce qu'on appelle la portee des variables...
Tu aurais simplement pu mettre
Global $conn;

Au debut de ta fonction...
Répondre
Donnez votre avis
Utile
-1
plus moins
Bonjour,


Question bête ...
Sachant que tu stockes, sûrement lors de l'authentification le nom du user en session... $_SESSION['user']; ... pourquoi, à ce moment là ne mets tu pas non plus son uid ??


Ensuite.. concernant ton code actuel...
Dans ta boucle
 for ($l=0;$l<count($p);$l++){

Que contient $p ? Tu ne l'a initialisé nul part dans ton code....
La variable $p se trouvant dans la fonction checkpermission ayant une portée restreinte à cette fonction....


Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !