8797 sujets

Développement web côté serveur, CMS

Bonjour,

J'utilise un système de gestion maison pour gérer mes bbd et mettre à jours certaines pages de mon site web.

Dans ma page de gestion des "mise à jours software", normalement, les nouvelles mise à jours sont ajouté à l'interface automatiquement. C'est que ce situe mon problème. J'ai donc une nouvelle mise à jours à ajouté à ma liste, elle s'enregistre dans ma bbd, mais ne s'affiche pas dans ma page.

Voici le code:

<?php
	$req = mysql_query("SELECT * FROM cameras WHERE camera NOT IN ('Live') ORDER BY annee DESC");
	while($cam = mysql_fetch_assoc($req)) {
		$software = mysql_query("SELECT * FROM software WHERE camera='".$cam['camera']."' AND version REGEXP '^[.0-9]+$' ORDER BY version DESC LIMIT 1");
		if(mysql_num_rows($software) >= 1) {
			$software = mysql_fetch_assoc($software);
			$descriptionFr = explode("\n", $software['descriptionFr']);
			$descriptionEn = explode("\n", $software['descriptionEn']);
		?>
        <div class="update">
            <a id="<?php echo $cam['camera']; ?>"></a>
              <table>
                <thead>
                    <tr>
                      <th height="40" colspan="3" align="center" valign="top">
                          <a onclick="javascript:window.open('software_modif.php?camera=<?php echo $cam['camera']; ?>','modifier','toolbar=no, width=500, height=600, scrollbar=no')"><img class="modif" src="../interface/images/modif.png" width="30" height="30" alt="modifier" /></a>
                          <a onclick="javascript:window.open('software_add.php?camera=<?php echo $cam['camera']; ?>','modifier','toolbar=no, width=500, height=600, scrollbar=no')"><img class="modif" src="../interface/images/update.png" width="30" height="30" alt="ajouter une mise a jour" /></a>
						  <?php echo $cam['camera']; ?>
                      </th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                      <td width="15%" rowspan="5" align="left" valign="top"><img src="../Images/photosProduits/<?php echo $cam['photo']; ?>" alt="" /></td>
                      <td width="15%" height="25" align="left" valign="top"><p>Fichier:</p></td>
                      <td align="left" valign="top"><p><?php echo $software['fichier'];?></p></td>
                    </tr>
                    <tr>
                      <td height="25" align="left" valign="top"><p>Version:</p></td>
                      <td align="left" valign="top"><p><?php echo $software['version'];?></p></td>
                    </tr>
                    <tr>
                      <td height="25" align="left" valign="top"><p>Date:</p></td>
                      <td align="left" valign="top"><p><?php echo $software['dateFr'];?></p>
                      <p><?php echo $software['dateEn'];?></p></td>
                    </tr>
                    <tr>
                      <td height="40" align="left" valign="top"><p>Am&eacute;lioration:</p></td>
                      <td align="left" valign="top">
                          <ul class="upDate">
							  <?php
                              	foreach($descriptionFr as $descfr) {
									echo "<li>" . stripslashes($descfr) . "</li>";	
								}
							  ?>
                          </ul>
                          <ul class="upDate">
                              <?php
                              	foreach($descriptionEn as $descen) {
									echo "<li>" . stripslashes($descen) . "</li>";	
								}
							  ?>
                          </ul></td>
                    </tr>
                    <?php
					$q = mysql_query("SELECT * FROM software WHERE camera = '".$cam['camera']."' AND version <> '".$software['version']."'");
					if(mysql_num_rows($q) > 0) {
					?>
                    <tr>
                      <td colspan="3" align="center">
                      	<h4>Historique des versions</h4>
                        <?php
						while($v = mysql_fetch_assoc($q)) {
						?>
                        	<div class="oldv">
                                <h5>
                               		<span style="cursor:pointer;" onclick="$(this).parent().parent().children('div').slideToggle();">Version <?php echo $v['version']; ?></span>&nbsp;
                                    <span style="font-weight:normal; font-style:italic;">(<?php echo $v['dateFr']; ?>)</span>&nbsp;
                                    <img src="../interface/images/delete.gif" style="display:inline; vertical-align:middle; cursor:pointer;" onclick="var thi = this; $.post('ajax.deleteVersionHistory.php', { id : <?php echo $v['id']; ?> }, function(dat) { if(dat == 'true') { $(thi).parent().parent().hide(); } });" />
                                </h5>
                                
                                <div style="display:none;">
                                <?php
								$am = explode("\n", $v['descriptionFr']);
								echo('<ul>');
								foreach($am as $a) {
									echo('<li>'.stripslashes($a).'</li>');
								}
								echo('</ul>');
								?>
                                </div>
                            </div>
                        <?php
						}
						?>
                      </td>
                    </tr>
                    <?php
					}
					?>
                </tbody>
              </table>
            </div>
        <?php	
		}
	}
	?>

Je tiens à m'excuser d'avance je suis encore en phase d'apprentissage, beaucoup de chose m'échappe encore et mon code n'est pas toujours propre!
J'ai fait quelque test, je sais que le problème ce situe ici, au niveau de where
<?php
	$software = mysql_query("SELECT * FROM software WHERE camera='".$cam['camera']."' AND version REGEXP '^[.0-9]+$' ORDER BY version DESC LIMIT 1");
?>

Si je l'enlève, toutes les mise à jours s'affiche, mais les fichiers associés ne correspondent plus...
Modérateur
Salut Julie,

Avant de répondre à ton souci, j'ai attendu qu'un autre membre vienne t'aider. bref, ton souci se situe bien là où tu dis je pense.

regarde/lis bien ton code et imagine le fond du problème :

requete
boucle
requete
et peut être encore requete (ton code est difficilement lisible)

Tu devrais optimiser ton code.

Peux tu me dire quelle fonction utilises tu pour ta connexion à mySql ?
mysql_pconnect() ou mysql_connect()

Je pense que tu utilises mysql_connect() ?
Modifié par niuxe (10 Oct 2012 - 19:13)
Bonjour Niuxe, merci pour ta réponse!

Je trouve aussi que mon code n'est pas à son meilleur, j'aimerais beaucoup optimiser tout ça mais pour l'instant je suis perdu. C'est que je reviens d'un long congé, alors je suis un peu rouillé.

Mais pour répondre à ta question, oui c'est bien mysql_connect que j'utilise.
Oh! à force de chercher! Je pense avoir réussi à résoudre mon problème!
J'ai remplacé ceci:
<?php
	$software = mysql_query("SELECT * FROM software WHERE camera='".$cam['camera']."' AND version REGEXP '^[.0-9]+$' ORDER BY version DESC LIMIT 1");
?>


Par ceci:
<?php
$software = mysql_query("SELECT * FROM software WHERE camera = '".$cam['camera']."' AND version <> '".$software['version']."'");
?>


Maintenant toutes les mise à jours s'affichent avec les bons fichiers. Reste à savoir si lorsqu'on va en ajouté une nouvelle, cette dernière va s'afficher automatiquement.
Modérateur
Sur le coup, je n'ai pas fait attention à ta RegEx. Mais en effet, ça me parait logique. Une RegEx demande plus d'effort et tu es dans une boucle. Ta requête n'avait surement pas fini qu'il y avait une autre boucle qui s'initialiser. Je pensais que tu pouvais finter en faisant une connexion persistente. Il était évident qu'à la fin de ton script, tu coupais ta connexion (de mémoire -> mysql_close())

D'une manière générale, tu peux surement optimiser ton code.
Modifié par niuxe (11 Oct 2012 - 01:51)
Je l'ignorait pour le RegEx, ce n'est pas moi qui est codé cette partie. C'st évident il va falloir que je fasse le ménage dans le code...

En attendant, il y a un autre problème qui apparaît. D'autres mise à jours n’apparaissent pas dans l'interface, c'est vraiment embêtant...