Page 1 sur 1

Php / Mysql mise à jours base de données / fin de traitement

Posté : 02 sept. 2005, 12:13
par fredo35m
Bonjour,

j'ai 2 requetes un select et un update. Les 2 requetes semblent bien fonctionner car dans ma table les infos sont bien insérées en revanche, j'ai l'impression que le traitement ne s'arrête jamais.
Car ma table est mise à jours mais la page de fin ne s'affiche jamais !!
Voici mon code, me manque t-il quelque chose ou bien est-ce mes boucles qui ne sont pas correctes??
//VERIFICATION CONNEXION SERVEUR
$fich = basename (substr ($newfichier, 0, -4));
echo $fich;
echo $date;
$link=mysql_connect($hostname, $username, $password);
if (!mysql_connect($hostname, $username, $password))
{
echo "ERREUR PASSWORD SERVEUR";
}
//VERIFICATION CONNEXION BASE
if (!mysql_select_db($reference, $link))
{
echo "ERREUR BASE REFERENCE";
exit();
}
if (!mysql_select_db($sirene, $link))
{
echo "ERREUR BASE SIRENE";
exit();
}
?>

<?php
//DECLARATION POUR EPCI
$reqaepci=mysql_query("select $nomtablesir.id_unique, $tabledtgrp.CODE_ELT, $tablegrp.CODE_GROUPE, $nomtablesir.INSEE from $sirene.$nomtablesir, $reference.$tabledtgrp, $reference.$tablegrp where $tablegrp.code_regroupt='epci' and $tablegrp.type_elt='comm' and $tabledtgrp.date_geree='oui' and $tabledtgrp.date_entree <= '$date' and $tabledtgrp.date_sortie >= '$date' and $tabledtgrp.TYPE_ELT='comm' and $tabledtgrp.CODE_GROUPE=$tablegrp.CODE_GROUPE and $nomtablesir.INSEE=$tabledtgrp.CODE_ELT and $nomtablesir.DATE='$fich'");
if (!$reqaepci)
{ die('Requête invalide : ' . mysql_error());
exit(); }
if ($reqaepci)
{ echo "OK REQ A EPCI";}
//$dataepci = mysql_fetch_array($reqaepci);

while ($dataepci = mysql_fetch_array($reqaepci))
{
$reqbepci=mysql_query("update $sirene.$nomtablesir set epci='$dataepci[CODE_GROUPE]' where $dataepci[id_unique]");
}
if (!$reqbepci)
{ die('Requête invalide B ECPI: ' . mysql_error()); exit();}
if ($reqbepci)
{ echo "OK REQ B EPCI";}

mysql_free_result ($reqaepci);
mysql_free_result ($reqbepci);
mysql_close ($link);

?>

Time OUT

Posté : 14 sept. 2005, 09:20
par HiSy
J'ai parcouru ton code en diagonale mais je ne trouve pas d'erreur. Tu as en plus mis des traces de retour partout ...

Je ne connais pas la taille de table ni le nombre de réponses fournies par ton SELECT mais j'opterai pour un probleme de temps de réponse.

Si le temps d'execution de ta page coté serveur dépasse le set_time_limit ta page est retournée sans être achevée ...

Tu peux essayer de forcer ce critère à infini en mettant en début de page :

set_time_limit(0);

Posté : 14 sept. 2005, 09:49
par Cyrano
Salut,
pour arriver à corriger du code, une base essentielle est un code propre et lisible, ça aide beaucoup. Et je ne vois nulle part dans ce code un quelqconque include qui ferait afficher une page: il n'y a que l'affichage du résultat de la réussite ou de l'échec de l'exécution de la requête de mise à jour.

À ce propos, ton système n'est pas logique puisque tu testes cette exécution en dehors du while, ce qui signifie que s'il y a plusieurs mises à jours, tu ne vérifies que la dernière: la seconde partie de ton code devrait donc logiquement ressembler à ceci:
<?php
//DECLARATION POUR EPCI
$sql1 = "SELECT ". $nomtablesir .".id_unique, ". $tabledtgrp .".CODE_ELT, ". $tablegrp .".CODE_GROUPE, ". $nomtablesir .".INSEE
        FROM $sirene.$nomtablesir, $reference.$tabledtgrp, $reference.$tablegrp 
        WHERE $tablegrp.code_regroupt='epci' 
        AND $tablegrp.type_elt='comm' 
        AND $tabledtgrp.date_geree='oui' 
        AND $tabledtgrp.date_entree <= '$date' 
        AND $tabledtgrp.date_sortie >= '$date' 
        AND $tabledtgrp.TYPE_ELT='comm' 
        AND $tabledtgrp.CODE_GROUPE=$tablegrp.CODE_GROUPE 
        AND $nomtablesir.INSEE=$tabledtgrp.CODE_ELT 
        AND $nomtablesir.DATE='$fich'";
$reqaepci = mysql_query($sql1);
if (!$reqaepci)
{
    die('Requête invalide : ' . mysql_error());
    exit();
}
if ($reqaepci)
{
    echo "OK REQ A EPCI";
}
//$dataepci = mysql_fetch_array($reqaepci);

while ($dataepci = mysql_fetch_array($reqaepci))
{
    $sql2 = "UPDATE $sirene.$nomtablesir SET epci='$dataepci[CODE_GROUPE]' WHERE $dataepci[id_unique]";
    $reqbepci = mysql_query($sql2);
    if (!$reqbepci)
    {
        die('Requête invalide B ECPI: ' . mysql_error()); exit();
    }
    else
    {
        echo "OK REQ B EPCI";
    }
}
mysql_free_result ($reqaepci);
mysql_free_result ($reqbepci);
mysql_close ($link);
?>