[Php-mysql] Problème While qui s'arrête

Résolu
Bonjour,

Sur un de mes sites, j'ai un problème que j'arrive absoluement pas à comprendre. Je m'explique:

J'effectue une requête sql, puis je l'appelle en faisant un While. Le problème est que ce while s'arrête, sans raison, à endroits NON fixes. Le seul point commun que j'ai dégagé semble que la boucle s'arrête après une variable, mais jamais la même, et appelle même des données d'une autre table absoluement pas appellée dans la requête...

Voici le code:

<form name="form" id="form">
  <select name="jumpMenu" id="jumpMenu" onchange="MM_jumpMenu('parent',this,0)">
    <? if ($sous_domaine == "www"){?><option selected="selected">S&eacute;lectionnez</option><? }
	$sous_domaines = mysql_query("SELECT * FROM regions ORDER BY region_repertoire") OR DIE(MYSQL_ERROR()) ; // Requ&ecirc;te SQL
			while ($resultats_sous_domaines = mysql_fetch_array($sous_domaines) )
				{
					$region_nom_reroutage = $resultats_sous_domaines['region_nom'];
					$region_repertoire_reroutage = $resultats_sous_domaines['region_repertoire'];
		echo "<option value=\"";
    	echo $url1;echo $region_repertoire_reroutage;
		echo $url2;
		echo $cat;
		if ($sscat != "")
			{
				echo "/";
				echo $sscat;
			}?>.html"<?
		if ($sous_domaine == $region_repertoire_reroutage)
			{
	        	echo "selected=\"selected\"";
			} 
	echo ">";
	echo $region_nom_reroutage;
   	echo "</option>
	";
				} ?>
  </select>
                        </form>


Avez-vous une idée d'où cela pourrait venir?

6 réponses

  1. Bonjour,

    Déja mets les tags php: <?php ?> au lieu de <? ?> sinon en php5 ça mets la panique

    ensuite il te manquait la fermeture \" de value

    essayes comme ça je t'ai un peu simplifié ton code en concaténant plutot que de faire des echo succéssifs.

    <form name="form" id="form">
      <select name="jumpMenu" id="jumpMenu" onchange="MM_jumpMenu('parent',this,0)">
        <?
    	if ($sous_domaine == "www"){
    	?>
    	<option selected="selected">S&eacute;lectionnez</option><?
    	}
    	$sous_domaines = mysql_query("SELECT * FROM regions ORDER BY region_repertoire") OR DIE(MYSQL_ERROR()) ; // Requ&ecirc;te SQL
    		while ($resultats_sous_domaines = mysql_fetch_array($sous_domaines) ){
    			$option="<option value=\"".$url1.$resultats_sous_domaines['region_repertoire'].$url2.$cat;
    			
    			if ($sscat != ""){
    				$option.= "/".$sscat;
    			}
    			$option.=".html"
    			$option.="\""; // c'est ca qui manquait, la fermeture \" de value
    		if ($sous_domaine == $resultats_sous_domaines['region_repertoire'])
    			{
    	        	$option.= "selected=\"selected\"";
    			} 
    	$option.=">".$resultats_sous_domaines['region_nom'];
       	$option.= "</option>";
    	echo $option;
    				} ?>
      </select>
     </form>
    
    
    0
    1. Merci de ta réponse,

      J'ai modifié les <? en <?php sur toutes mes pages.

      Par contre, y compris avec la modification, cela n'a rien changé, si ce n'est que la boucle s'arrête en fin de <option>. Il manque toujours environ la moitié des données.

      C'est vraiment bizzare car cela ne fait ça que sur ce code...
      0
      1. re,

        $sous_domaines = mysql_query("SELECT * FROM regions ORDER BY region_repertoire") OR DIE(MYSQL_ERROR()) ; // Requête SQL

        essayes:

        <form name="form" id="form">
          <select name="jumpMenu" id="jumpMenu" onchange="MM_jumpMenu('parent',this,0)">
        <?php
        	if ($sous_domaine == "www"){
        		$sous_domaines = mysql_query("SELECT * FROM regions ORDER BY region_repertoire") or die("Pb avec la requette ".mysql_error()) ; // Requ&ecirc;te SQL
        		echo "Nombre d'enr trouves: ".mysql_num_rows($sous_domaines);// ça tu l'enlevera apres
        ?>
        	<option selected="selected">S&eacute;lectionnez</option>
        <?php
        	}
        		while ($resultats_sous_domaines = mysql_fetch_array($sous_domaines) ){
        			$option="<option value=\"".$url1.$resultats_sous_domaines['region_repertoire'].$url2.$cat;
        			
        			if ($sscat != ""){
        				$option.= "/".$sscat;
        			}
        			$option.=".html"
        			$option.="\""; // c'est ca qui manquait, la fermeture \" de value
        			if ($sous_domaine == $resultats_sous_domaines['region_repertoire']){
        	        	$option.= "selected=\"selected\"";
        			} 
        			$option.=">".$resultats_sous_domaines['region_nom'];
        			$option.= "</option>";
        			
        			echo $option;
        		} 
        ?>
          </select>
         </form>
        
        
        


        J'ai déplacé la requette car si message d'erreur il ne se voit pas car il est dans la partie <select> </select>
        0
        1. Résultat: 22 enregistrements trouvés, 7 d'affichés... :-s
          0
          1. Ce ne serait pas la fin du if(........="www"){

            qui génerait ?

            Essayes comme ça, je l'ai mis après la boucle while:

            <form name="form" id="form">
              <select name="jumpMenu" id="jumpMenu" onchange="MM_jumpMenu('parent',this,0)">
            <?php
            	if ($sous_domaine == "www"){
            		$sous_domaines = mysql_query("SELECT * FROM regions ORDER BY region_repertoire") or die("Pb avec la requette ".mysql_error()) ; // Requête SQL
            		echo "Nombre d'enr trouves: ".mysql_num_rows($sous_domaines);// ça tu l'enlevera apres
            ?>
            	<option selected="selected">Sélectionnez</option>
            <?php
            	
            		while ($resultats_sous_domaines = mysql_fetch_array($sous_domaines) ){
            			$option="<option value=\"".$url1.$resultats_sous_domaines['region_repertoire'].$url2.$cat;
            			
            			if ($sscat != ""){
            				$option.= "/".$sscat;
            			}
            			$option.=".html"
            			$option.="\""; // c'est ca qui manquait, la fermeture \" de value
            			if ($sous_domaine == $resultats_sous_domaines['region_repertoire']){
            	        	$option.= "selected=\"selected\"";
            			} 
            			$option.=">".$resultats_sous_domaines['region_nom'];
            			$option.= "</option>";
            			
            			echo $option;
            		} 
            	}// là
            ?>
              </select>
             </form>
            
            
            0
            1. Merci beaucoup ! J'ai rajouté un "else" pour que cela fonctionne sur tous les sous domaines et tout semble fonctionner.

              Merci encore !
              0