erreur "Incorrect key file for table" suite à une requete conditionnelle

Eléphant du PHP | 254 Messages

21 nov. 2008, 10:56

Bonjour !
J'ai suivi un topic posté ici pour construire une requete conditionnelle.
J'ai un formulaire sur une page index.php, les résultats de la requete se font sur recherche.php.
Je récupère les variables en méthode $_GET.

Dans ce formulaire :
champs date_debut et date_fin
trois listes déroulantes

Ma requête :
//récup des variables
if(!isset($_GET['date_debut'])) $date_debut="-1"; else $date_debut= $_GET['date_debut'];
if(!isset($_GET['date_fin'])) $date_fin="-1"; else $date_fin = $_GET['date_fin'];
if(!isset($_GET['langue'])) $ID_langue="langue"; else $ID_langue = $_GET['langue'];
if(!isset($_GET['pays'])) $ID_pays="pays"; else $ID_pays = $_GET['pays'];
if(!isset($_GET['type'])) $ID_type="type"; else $ID_type = $_GET['type'];
//...
//requête
mysql_select_db($database, $base);
$sqlCond = array(); 
$query = "SELECT * FROM table1, table2"; // début de la requête 
if(!empty($date_debut)) // critère date_debut non vide 
  $sqlCond[] = "table1.date_debut >= '".$date_debut."'"; 
if(!empty($date_fin)) // critère date_fin non vide 
  $sqlCond[] = "table1.date_fin <= '".$date_fin."'"; 
if($ID_langue!="langue") // critère langue non vide
  $sqlCond[] = "table1.ID_langue = '".$ID_langue."'";
if($ID_pays!="pays") //critère pays non vide
  $sqlCond[] = "table1.ID_pays = '".$ID_pays."'";
if($ID_type!="type") //critère type non vide
  $sqlCond[] = "table1.ID_type = '".$ID_type."'";

if(count($sqlCond)>0) // s'il ya des critères non vides, les sépares par un AND et complète la requête. 
  $query.= " WHERE " . implode(" AND ", $sqlCond); 
  $query.= " ORDER BY table1.date_debut ASC";
  $result = mysql_query($query, $base) or die(mysql_error());
  $row_result = mysql_fetch_assoc($result);
  $totalRows_result = mysql_num_rows($result);
J'obtiens ce message d'erreur :
Incorrect key file for table '/tmp/#sql_5df6_0.MYI'; try to repair it

Ca vient d'où ? de mon script ou bien de l'hébergeur ?

Merci de m'éclairer ! :-)

ViPHP
ViPHP | 1136 Messages

21 nov. 2008, 19:11

Salut ,

des pistes :

http://www.developpez.net/forums/d49427 ... sharpsql_/

Combien de résultats te retourne ta requête ?
Espace disque ? quota ?

Sans executer ta requete , peut tu nous afficher la requete finale ?

Eléphant du PHP | 254 Messages

22 nov. 2008, 11:26

Bonjour et merci de ta réponse
Pour l'instant 0 résultats juste cette erreur je dois avoir 80 enregistrements pour le moment car le site est en test.

Je ne comprends pas bien ta seconde question, requête finale ??
Je récupère 10 variables.

Voilà ! :-)
Je vais aller consulter le lien que tu me donnes, mais Google, hier, avait l'air de me dire qu'il s'agit d'un pb de serveur :-/

ViPHP
ViPHP | 1136 Messages

22 nov. 2008, 11:47

Je voulais juste voir ta requete complète aprés avoir été formaté par ton code ..

Code : Tout sélectionner

SELECT ... FROM ... WHERE ... ...
Il n'y a que sur cette requête que celà plante , ou sur toutes ? dans ce cas ça serai fort probable effectivement que le serveur ai un souci ..

Eléphant du PHP | 254 Messages

22 nov. 2008, 12:11

ah ok !
non non, juste sur cette requête justement :-(

La requête complète :
$query = "SELECT * FROM table1, table2 WHERE table1.date_debut >= '".$date_debut."' AND table1.date_fin <= '".$date_fin."' AND table1.ID_langue = '".$ID_langue."' AND table1.ID_pays = '".$ID_pays."' AND table1.ID_type = '".$ID_type."' ORDER BY table1.date_debut ASC";
 $result = mysql_query($query, $base) or die(mysql_error());
  $row_result = mysql_fetch_assoc($result);
  $totalRows_result = mysql_num_rows($result);
Je devrais mettre des OR ??
C'est peut etre parce que le serveur mouline trop et qu'il y a trop de choses à explorer ?
Car les variables du formulaire (listes déroulantes) sont facultatives....

Edit : je viens de faire un test en local, et effectivement ça plante aussi
donc ça vient de la requete, mais où?


Edit2 : pfff j'avais oublié un bout de la requete du type : WHERE table1.truc=table2.truc
;-)
merci beaucoup de ton aide ! Ca fonctionne nickel maintenant.