Problème pour récuperer les donnès de la table avec mysql_fetch_array()

[Résolu]
Signaler
Messages postés
25
Date d'inscription
jeudi 23 avril 2009
Statut
Membre
Dernière intervention
27 novembre 2011
-
Messages postés
25
Date d'inscription
jeudi 23 avril 2009
Statut
Membre
Dernière intervention
27 novembre 2011
-
Bonjour,
Alors voila j'ai un problème pour afficher les donnés de ma tables et je comprend pas si ça viens de ma table ou de mon code car je crois que cela viens des apostrophes...
L’erreur est
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\site_local_request\getInfosFilms.php on line 61


Tandis que mon code est:
<?php
include ("Connect.php");
$tbl_name="film"; 
$dir_nom = "J:\Films HD";

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
mysql_query("SET NAMES 'UTF8'");

set_time_limit(0);

$dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas');
$fichier= array();

while($element = readdir($dir)) 
{
if($element != '.' && $element != '..' && $element != 'desktop.ini' && $element != 'Thumbs.dll' && $element != 'films.ico') 
{
if (!is_dir($dir_nom.'/'.$element)) 
{
$sql1="SELECT * FROM $tbl_name WHERE sid>124 ORDER BY sid ASC";
$result1=mysql_query($sql1);
$rows=mysql_fetch_array($result1);

$position = strpos($element, ".");
$extension = substr($element, 0, $position);
$fichier = $extension;

$titre=$rows['Titre'];
if($titre==$fichier)
{
$filename = $element;
$ext = substr($filename, -3, 3);
$format = strtoupper($ext);

$filesystem = new COM('Scripting.FileSystemObject');
$file = $filesystem->GetFile($dir_nom.'/'.$element);
$taille = $file->Size();

if ($taille >= 1048576)
{
$taille = round($taille / 1048576, -2)/1000 ." Go";
}

$sid=$rows['sid'];
$ids=0;
$Status="Complet";
$datetime=date("d/m/y H:i:s");
$Source="DVB";
$Type="BRDRip";

echo "$sid $ids $titre $taille $Status $datetime $Source $format $Type Ok...
";
}
else
{
$sql="SELECT * FROM $tbl_name WHERE Titre LIKE '$fichier'";
$result=mysql_query($sql);
while($rows=mysql_fetch_array($result))
{
$titre=nl2br(stripslashes($rows['Titre']));
if($titre==$fichier)
{
$filename = $element;
$ext = substr($filename, -3, 3);
$format = strtoupper($ext);

$filesystem = new COM('Scripting.FileSystemObject');
$file = $filesystem->GetFile($dir_nom.'/'.$element);
$taille = $file->Size();

if ($taille >= 1048576)
{
$taille = round($taille / 1048576, -2)/1000 ." Go";
}

$sid=$rows['sid'];
$ids=0;
$Status="Complet";
$datetime=date("d/m/y H:i:s");
$Source="DVB";
$Type="BRDRip";

echo "$sid $ids $titre $taille $Status $datetime $Source $format $Type Ok...
";
}
}
}
}	
}
}
closedir($dir);
mysql_close();	
?>

Voici un extrait d'une ligne qui n'est pas afficher:
bst 	sid 	Titre 	 	
P 	149 	Pirates des Caraibes - Jusqu'au bout du monde 	

9 réponses

Messages postés
25
Date d'inscription
jeudi 23 avril 2009
Statut
Membre
Dernière intervention
27 novembre 2011

Enfaite c'est bon !
J'ai tout simplement fait ceci pour ceux que ça intéresserai:
					$fichier=mysql_real_escape_string($fichier);
$sql="SELECT sid, bst, Titre FROM $tbl_name WHERE Titre LIKE '$fichier' AND bst='$fichier[0]'";
$result=mysql_query($sql);
while($rows=mysql_fetch_array($result))
{
$titre=addslashes($rows['Titre']);
var_dump($titre);
if($titre==$fichier)
{
$filename = $element;
$ext = substr($filename, -3, 3);
$format = strtoupper($ext);

$filesystem = new COM('Scripting.FileSystemObject');
$file = $filesystem->GetFile($dir_nom.'/'.$element);
$taille = $file->Size();

if ($taille >= 1048576)
{
$taille = round($taille / 1048576, -2)/1000 ." Go";
}

$sid=$rows['sid'];
$ids=0;
$Status="Complet";
$datetime=date("d/m/y H:i:s");
$Source="DVB";
$Type="BRDRip";

echo "$sid $ids ".stripslashes($titre)." $taille $Status $datetime $Source $format $Type Ok...
";
}
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
Salut,

Tu viens de découvrir le principe des injection SQL. Bref, utilises mysql_real_escape_string() afin d'échapper le nom du fichier.
Messages postés
25
Date d'inscription
jeudi 23 avril 2009
Statut
Membre
Dernière intervention
27 novembre 2011

Mais je comprend pas cette fonction est utilisée lorsque l'on envoi les données dans la table or ici je vais les récupérer.
Donc je dois reremplir ma table ?
Messages postés
25
Date d'inscription
jeudi 23 avril 2009
Statut
Membre
Dernière intervention
27 novembre 2011

Voila j'ai remplacer la ligne:
$titre=nl2br(stripslashes($rows['Titre']));
par
$titre=mysql_real_escape_string($rows['Titre']);

Mais ça ne marche toujours pas j'ai toujours la même erreur, sachant que je viens de remplir ma table en utilisant mysql_real_escape_string().?
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
Allez je te donne un indice :

$sql="SELECT * FROM $tbl_name WHERE Titre LIKE '$fichier'";

Qu'est-ce que ça donne lorsque $fichier est un nom avec un apostrophe ? En quoi mysql_real_escape_string() peut aider dans ce cas ?

Avec l'indication de la ligne en cause ainsi que ces deux questions tu devrais avoir largement assez de pistes pour trouver par toi même ce qu'il faut corriger.
Messages postés
25
Date d'inscription
jeudi 23 avril 2009
Statut
Membre
Dernière intervention
27 novembre 2011

Ok je crois avoir compris, j'ai fais ça avant la requete:
$fichier=mysql_real_escape_string($fichier);
$sql="SELECT sid, Titre FROM $tbl_name WHERE Titre LIKE '$fichier'";

Donc maintenant je n'ai plus d'erreur mais par contre les lignes qui marquais une erreur sont ignorer...
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
C'est bien ça. Voici un problème de réglé, seulement maintenant tu en as un autre. Essaye d'afficher les résultats à différentes étapes afin de tout décortiquer et isoler le problème. Pour ceci, var_dump() est une alliée précieuse.
Messages postés
25
Date d'inscription
jeudi 23 avril 2009
Statut
Membre
Dernière intervention
27 novembre 2011

Alors enfaite var_dump() renvoi ceci par exemple:
string 'L'Assaut' (length=8)

Et dans la base le Titre est stocker comme cela L'Assaut.
Du coup je pense que c'est à cause de ' qu'il n'est pas afficher car les \' ne sont pas ajouter...
Mais si je change le Titre dans ma table comme ceci: L\'Assaut, alors là la ligne ne s'affiche même pas avec var_dump()...
Messages postés
25
Date d'inscription
jeudi 23 avril 2009
Statut
Membre
Dernière intervention
27 novembre 2011

Merci beaucoup pour votre aide !