diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index d3b24c930fe643c4f415d0d10119feccc38d8b6b..c0b0aac1ba11def238888de42daa5a4f83ab4f92 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -244,12 +244,13 @@ function spip_connect($serveur='') {
 	    : ($install ? (_FILE_CONNECT_INS .  '.php')
 	       : ''));
 
+	unset($GLOBALS['db_ok']);
 	unset($GLOBALS['spip_connect_version']);
 	if ($f AND is_readable($f)) include($f);
 	if (!isset($GLOBALS['db_ok'])) {
 		if ($install) return 'spip_' . $serveur . '_query';
 		spip_log("spip_connect: serveur $index mal defini dans '$f'.");
-		return false;
+		return $connexions[$index]=false;
 	}
 
 	$connexions[$index] = $GLOBALS['db_ok'];
diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php
index 13eaca69a298de65737d45c847d73964f9e1257b..e241825c5793f1e5df1a907d734696775286e6a9 100644
--- a/ecrire/public/compiler.php
+++ b/ecrire/public/compiler.php
@@ -715,7 +715,7 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect='')
 					$boucles[$id]->jointures = $x;
 				if (($type == 'documents') && $boucle->doublons)
 					{ $descr['documents'] = true;  }
-			}
+			} else $boucles[$id]->type_requete = '';
 		}
 	}
 	// Commencer par reperer les boucles appelees explicitement 
@@ -741,13 +741,13 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect='')
 	}
 	foreach($boucles as $id => $boucle) { 
 		$type = $boucle->type_requete;
-		if ($type != 'boucle') {
-		  if ($boucle->param) {
+		if ($type AND $type != 'boucle') {
+			if ($boucle->param) {
 				$res = calculer_criteres($id, $boucles);
 				if (is_array($res)) return $res; # erreur
 			}
-		  $descr['id_mere'] = $id;
-		  $boucles[$id]->return =
+			$descr['id_mere'] = $id;
+			$boucles[$id]->return =
 			  calculer_liste($boucle->milieu,
 					 $descr,
 					 $boucles,
@@ -765,20 +765,24 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect='')
 
 	foreach($boucles as $id => $boucle) {
 		// appeler la fonction de definition de la boucle
-		$f = 'boucle_'.strtoupper($boucle->type_requete);
+		$req = $boucle->type_requete;
+		if ($req) {
+			$f = 'boucle_'.strtoupper($req);
 		// si pas de definition perso, definition spip
-		if (!function_exists($f)) $f = $f.'_dist';
-		// laquelle a une definition par defaut
-		if (!function_exists($f)) $f = 'boucle_DEFAUT';
-		if (!function_exists($f)) $f = 'boucle_DEFAUT_dist';
+			if (!function_exists($f)) $f = $f.'_dist';
+			// laquelle a une definition par defaut
+			if (!function_exists($f)) $f = 'boucle_DEFAUT';
+			if (!function_exists($f)) $f = 'boucle_DEFAUT_dist';
+			$req = $f($id, $boucles);
+		}
 		$boucles[$id]->return = 
 			"function BOUCLE" . strtr($id,"-","_") . $nom .
 			'(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {' .
-			$f($id, $boucles) .
+			$req .
 			"\n}\n\n";
-		if ($GLOBALS['var_mode'] == 'debug')
-		  boucle_debug_compile ($id, $nom, $boucles[$id]->return);
 
+		if ($GLOBALS['var_mode'] == 'debug')
+			boucle_debug_compile ($id, $nom, $boucles[$id]->return);
 	}
 
 	$code = "";
diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index c56b9abb56984d1491e6a43578b5f272a39200bc..af13d4fe4a75df3a7380584f4605b96d8210663c 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -1034,8 +1034,9 @@ function trouver_table($type, $boucle)
 
 	$serveur = $boucle->sql_serveur;
 	$s = $serveur ? $serveur : 0;
-	if (!isset($type_des_serveurs[$s])) spip_connect($serveur);
-
+	if (!isset($type_des_serveurs[$s])) {
+		if (!spip_connect($serveur)) return null;
+	}
 	$spip = ($type_des_serveurs[$s] == 'spip');
 
 	if ($spip AND isset($table_des_tables[$type])) {