2017-09-17 4 views
-1

Donc, lorsque j'utilise une instruction if! Isset dans mon programme, il ne reconnaît pas que la variable a été définie. Je l'ai mis en place de sorte que si une variable $ q n'est pas définie alors pour obtenir une requête de ma base de données mysqli. Cette requête récupérera la dernière entrée de données de ma base de données. Cette donnée est égale à une variable appelée $ row. La variable $ row est appelée plus tard pour récupérer les enregistrements qui sont ensuite affichés sur la page Web. Le problème est que l'instruction if s'exécute à nouveau (lors de l'actualisation/rechargement de la page) même si $ q a été défini à la dernière exécution du fichier .php. Voici le code:Isset ne fonctionne pas avec mysqli_query

$db_user = "root"; 
$db_pass = ""; 
$db_name = "music_reviews_database"; 
$db_host = "localhost"; 

$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name); 
if (!isset($q)) { 
    $q = mysqli_query($conn, 
      "SELECT album.Album, 
      artist.ArtistsName, 
      datereviewed.DateReviewed, 
      features.Features, 
      genre.Genre, 
      rating.Rating, 
      songname.SongName, 
      link.link, 
      songname.ID, 
      comments.Comments 
      FROM songname 
      INNER JOIN album ON album.ID = songname.ID 
      INNER JOIN artist ON artist.ID = songname.ID 
      INNER JOIN datereviewed ON datereviewed.ID = songname.ID 
      INNER JOIN features ON features.ID = songname.ID 
      INNER JOIN genre ON genre.ID = songname.ID 
      INNER JOIN rating ON rating.ID = songname.ID 
      INNER JOIN link ON link.ID = songname.ID 
      INNER JOIN comments ON comments.ID = songname.ID 
      ORDER BY DateReviewed DESC LIMIT 1"); 
    $row = mysqli_fetch_array($q); 
} 

Donc, le code devrait être comme ceci à la place?

$q = mysqli_query($conn, 
     "SELECT album.Album, 
     artist.ArtistsName, 
     datereviewed.DateReviewed, 
     features.Features, 
     genre.Genre, 
     rating.Rating, 
     songname.SongName, 
     link.link, 
     songname.ID, 
     comments.Comments 
     FROM songname 
     INNER JOIN album ON album.ID = songname.ID 
     INNER JOIN artist ON artist.ID = songname.ID 
     INNER JOIN datereviewed ON datereviewed.ID = songname.ID 
     INNER JOIN features ON features.ID = songname.ID 
     INNER JOIN genre ON genre.ID = songname.ID 
     INNER JOIN rating ON rating.ID = songname.ID 
     INNER JOIN link ON link.ID = songname.ID 
     INNER JOIN comments ON comments.ID = songname.ID 
     ORDER BY DateReviewed DESC LIMIT 1"); 
$row = mysqli_fetch_array($q); 
file_put_contents(data.php, return var_export($row,true)); 
if (file_exists(data.php)) { 
    $row = include(data.php); 
} 
+0

Où initialisez-vous $ q? – Michael

+0

Vous ne mentionnez pas $ q variable c'est la raison pour laquelle il ne reconnaît pas – Abhishek

+0

Oh ok serait-il un moyen d'initialiser la requête une seule fois alors que c'est pourquoi j'essayais d'utiliser isset en premier lieu. Parce que si de nouvelles données sont insérées dans la base de données alors la requête écrase les données que je veux avec les dernières données si cela a du sens –

Répondre

0

Vous pouvez simplement supprimer

if (!isset($q)) { 

et le support de fermeture. Ils sont inutiles.

Si vous souhaitez éviter d'exécuter la requête à chaque fois pour obtenir des résultats, essayez de mettre en cache les résultats.

E.g.

après avoir obtenu les résultats de recherche, envoyer le contenu dans un fichier quelque part dans le système de fichiers ($ path)

file_put_contents($path, '<?php return '.var_export($mysql_row,true).';?>'); 

Ensuite, vous pouvez le lire en arrière sur:

if (file_exists($path)) $mysql_row = include($path); 

donc quelque chose comme:

if (file_exists(data.php)) { 
    $row = include(data.php); 
}else{ 
     $q = mysqli_query($conn, 
     "SELECT album.Album, 
     artist.ArtistsName, 
     datereviewed.DateReviewed, 
     features.Features, 
     genre.Genre, 
     rating.Rating, 
     songname.SongName, 
     link.link, 
     songname.ID, 
     comments.Comments 
     FROM songname 
     INNER JOIN album ON album.ID = songname.ID 
     INNER JOIN artist ON artist.ID = songname.ID 
     INNER JOIN datereviewed ON datereviewed.ID = songname.ID 
     INNER JOIN features ON features.ID = songname.ID 
     INNER JOIN genre ON genre.ID = songname.ID 
     INNER JOIN rating ON rating.ID = songname.ID 
     INNER JOIN link ON link.ID = songname.ID 
     INNER JOIN comments ON comments.ID = songname.ID 
     ORDER BY DateReviewed DESC LIMIT 1"); 
     $row = mysqli_fetch_array($q);  
     file_put_contents(data.php, '<?php return '.var_export($row,true).';?>'); 
    } 
+0

Ok. La raison pour laquelle je voulais l'isset était que mysqli_query ne s'exécuterait qu'une seule fois (c'est-à-dire si la page était rafraîchie/rechargée, la requête ne serait plus exécutée). Est-ce qu'il y a un moyen de faire ça? Est-ce que je peux juste soumettre POSET (si oui, comment? –

+0

Génial d'où vient le $ mysql_row –

+0

'$ row = mysqli_fetch_array ($ q);' même chose, juste un autre nom de variable, nommez-le comme vous voulez – Michael

0

le problème est que la si l'instruction s'exécute à nouveau (lors de l'actualisation/du rechargement de la page) même si $q a été défini depuis la dernière fois que le fichier .php a été exécuté.

Chaque script PHP gère une seule requête HTTP. Lorsque le script est terminé, tout son contexte (requête HTTP, réponse HTTP, variables, etc.) est détruit. Une nouvelle requête est gérée par une nouvelle instance du script qui ne sait rien de son invocation précédente.

Si vous devez transmettre des informations d'une exécution du script PHP à la suivante, vous pouvez utiliser sessions. Cependant, expliquer le fonctionnement des sessions est un sujet trop large pour une réponse [so].