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

Petit nouveau ! | 1 Messages

02 sept. 2005, 12:13

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);

?>

Eléphanteau du PHP | 20 Messages

14 sept. 2005, 09:20

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);
Take it HiSy !
Quand je vois ce que je développais il ya dix ans et ce que je développe aujourd'hui ... Je me dis que je serai super fort ... Dans Dix ans ....

Mammouth du PHP | 19672 Messages

14 sept. 2005, 09:49

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);
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: