Page blanche après l'importation des données via odbc en php

Résolu/Fermé
user12478 - Modifié le 21 sept. 2021 à 09:38
 user12478 - 24 sept. 2021 à 19:35
Bonjour, je doit récupérer les données de certaines tables, pour la grande majorité j'ai réussi mais il y a quelque table où il est impossible de les récupérer il affiche une page blanche, la table n'est pas vide car mon ami a réussi a le récupérer avec du C++ , mais impossible en php. avez-vous des idées ?

les tables qui rendent la page blanche sont :
Nom_client
Rue1
ville

voici mon programme :

<html>
<body>
<?php
$conn=odbc_connect('test1','user','mdp');
if (!$conn)
{exit("Connection Failed: " . $conn);}
$rs1=odbc_exec($conn,'SELECT * FROM table1');
$rs2=odbc_exec($conn,'SELECT * FROM table2');
$rs3=odbc_exec($conn,'SELECT * FROM table3');
if (!$rs1)
{exit("Error in SQL");}

while (odbc_fetch_row($rs1))
{
$agen = [
//"id" => $id,
"Latitude" => odbc_result($rs1, "CLLATITU_N"),
"Longitude" => odbc_result($rs1, "CLLONGIT_N"),
"No_client" => odbc_result($rs2, "SANCLI"),
"No_de_SAV" => odbc_result($rs2, "SANBON"),
"Motif_1" => odbc_result($rs2, "SAMOT1"),
"Motif_2" => odbc_result($rs2, "SAMOT2"),
"Nom_client" => odbc_result($rs1, "CLNMFA"),
"Rue1" => odbc_result($rs1, "CLSFAM"),
"Cp" => odbc_result($rs1, "CLCPFA"),
"Ville" => odbc_result($rs1, "CLVILFA"),
"Duree_type" => odbc_result($rs3, "SADURPR"),
"Code_activite" => odbc_result($rs3, "SAACTI"),
"No_payeur" => odbc_result($rs2, "SACLIP"),
];
$tableauAgences['agences'][] = $agen;
}


echo json_encode($tableauAgences);

?>
</body>
</html>
A voir également:

4 réponses

jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712
21 sept. 2021 à 17:13
Bonjour,

Déjà, le html est inutile dans ce code.

Ensuite, il faudrait activer l'affichage des erreurs php et ne tester qu'avec une seule requête...
A voir si tu n'aurais pas un souci de timeout (si ton script dure trop longtemps)

Essaye comme ça et dis nous ce que ça donne
<?php

//on fixe le temps max pour le script à 10 minutes
set_time_limit(600);

// Affichage des erreurs php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//connexion
$conn=odbc_connect('test1','user','mdp');
if (!$conn) {
  exit("Connection Failed: " . $conn);
}

$rs1=odbc_exec($conn,'SELECT * FROM table1');
if (!$rs1){
  exit("Error in SQL");
}
// Déjà, avec une seule.. est-ce que ça marche ?
//  $rs2=odbc_exec($conn,'SELECT * FROM table2');
//  $rs3=odbc_exec($conn,'SELECT * FROM table3');



while (odbc_fetch_row($rs1)) {
$agen = [
    //"id" => $id,
    "Latitude" => odbc_result($rs1, "CLLATITU_N"),
    "Longitude" => odbc_result($rs1, "CLLONGIT_N"),
    "Nom_client" => odbc_result($rs1, "CLNMFA"),
    "Rue1" => odbc_result($rs1, "CLSFAM"),
    "Cp" => odbc_result($rs1, "CLCPFA"),
    "Ville" => odbc_result($rs1, "CLVILFA"),
    ];
  $tableauAgences['agences'][] = $agen;
}


echo json_encode($tableauAgences);



A noter que tu fais un odbc_fetch_row sur $rs1 ... et donc, $rs2 et $rs3 ne sont pas disponibles dedans...

Et puis.. quel est le lien entre chaque table ??
Ne serait-ce pas l'id ?

Ne pourrais tu pas faire une requête avec jointure sur les trois tables directement ?

Quel est le SGBD utilisé ?

1
Bonjour, merci de ta réponse.
J'ai bien avancé dans mon programme, j'ai fait une jointure sur 2 tables, et j'ai aussi réussi à afficher les données non problématiques et afficher les points sur une carte mais j'ai toujours le même problème, les données Ville, Rue1, Nom_client, etc, crée la page blanche.

j'ai essayé ton programme mais il m'affiche toujours le même résultat, la page blanche. il n'y a pas de message d'erreur comme si le programme cessait de fonctionner. et il n'y a pas de problème de temps car la page blanche s'affiche quelques secondes après le lancement du programme alors que si je récupère toutes les données non problématiques, cela peux durée quelques dizaines de secondes.

le SGBD utilisé est wipsos et l'id n'est pas utile le liens qui connecte les tables est : W_SO.PCLIENT.CLNCLI = PSAV.SANCLI

j'ai changer la requête car plus tard je voudrai filtrer celle ci

programme :

<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");

$conn=odbc_connect('lien','user','mdp');
if (!$conn)
{exit("Connection Failed: " . $conn);}
$rs1=odbc_exec($conn,'SELECT CLLATITU_N, CLLONGIT_N, SANBON, SARERA FROM W_SO.PCLIENT INNER JOIN PSAV ON W_SO.PCLIENT.CLNCLI = PSAV.SANCLI');

if (!$rs1)
{exit("Error in SQL");}

$id=0;

while (odbc_fetch_row($rs1))
{
$id++;

$agen = [
"id" => $id,
"Latitude" => round(odbc_result($rs1, "CLLATITU_N"), 6),
"Longitude" => round(odbc_result($rs1, "CLLONGIT_N"), 6),
// "No_client" => odbc_result($rs1, "SANCLI"),
"No_de_SAV" => odbc_result($rs1, "SANBON"),
// "Motif_1" => odbc_result($rs1, "SAMOT1"),
// "Motif_2" => odbc_result($rs1, "SAMOT2"),
// "Nom_client" => odbc_result($rs1, "CLNMFA"),
// "Rue1" => odbc_result($rs1, "CLSFAM"),
// "Cp" => odbc_result($rs1, "CLCPFA"),
// "Ville" => odbc_result($rs1, "CLVILFA"),
"code_etat" => odbc_result($rs1, "SARERA"),
// "Duree_type" => round(odbc_result($rs1, "SADURPR"), 6),
// "No_payeur" => odbc_result($rs1, "SACLIP"),
];

$tableauAgences['agences'][] = $agen;
}

// On encode en json et on envoie
echo json_encode($tableauAgences);
?>

les // sont les données problématiques où il affiche la page blanche ( j'enlève les // lorsque je veux tester le programme )

j'ai aussi testé avec 1 seule colonne à récupérer mais j'ai le même souci, est-il possible que les données à récupérer on un caractère spéciale qui casse la suite du programme ? car les autres colonnes fonctionnent.

j'ai différentes jointure pour la 3ème et la 4ème tables et je doit les joindre a la première et a la 2ème tables, aurait-tu une idée ?

merci encore pour l'aide.
0
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712
22 sept. 2021 à 17:59
Dans ta requête SELECT tu ne prends que les colonnes CLLATITU_N, CLLONGIT_N, SANBON, SARERA
Les autres n'y étant pas... forcément ça plante...
0
Le souci c'est que j'ai pris les colonnes dans select, je l'ai juste enlever car je travaille sur une autre partie de mon programme en meme temps si tu veux le programme qui crée la page blanche, le voici :

<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
set_time_limit(600);
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
$conn=odbc_connect('lien','user','mdp');
if (!$conn)
  {exit("Connection Failed: " . $conn);}
$rs1=odbc_exec($conn,'SELECT CLLATITU_N, CLLONGIT_N, SANBON, SAMOT1 FROM W_SO.PCLIENT INNER JOIN PSAV ON W_SO.PCLIENT.CLNCLI = PSAV.SANCLI');

if (!$rs1)
  {exit("Error in SQL");}

$id=0;

while (odbc_fetch_row($rs1))
{
    $id++;

    $agen = [
        "id" => $id,
        "Latitude" => round(odbc_result($rs1, "CLLATITU_N"), 6),
        "Longitude" => round(odbc_result($rs1, "CLLONGIT_N"), 6),
         "No_de_SAV" => odbc_result($rs1, "SANBON"),
         "Motif_1" =>  odbc_result($rs1, "SAMOT1"),

      ];

      $tableauAgences['agences'][] = $agen;
    }
    
    // On encode en json et on envoie
    echo json_encode($tableauAgences);
?>


EDIT : Ajout des BALISES DE CODE !!!! ( merci d'y penser à l'avenir )


je n'arrive pas à trouver la solution, sur internet personne en parle
0
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712
23 sept. 2021 à 09:25
Ben faut essayer de debuguer ...
par exemple, commence par ne laisser dans ton fichier que
<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
set_time_limit(600);
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

echo " La page s'affiche !!" ;



puis, si ça marche,
<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");

set_time_limit(600);
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

$conn=odbc_connect('lien','user','mdp');
if (!$conn){
  exit("Connection Failed: " . $conn);
}

echo "Connexion OK !";


etc ....

NB: Il faudrait également vérifier que ta requête retourne un résultat...
Il se peut que rien ne s'affiche car tu n'a rien à afficher ... pour ça tu peux faire un IF sur le odbc_num_rows
https://www.php.net/manual/fr/function.odbc-num-rows.php
0
user12478 > jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024
Modifié le 23 sept. 2021 à 09:46
je pense savoir où est le problème mais je n'arrive pas a le résoudre j'ai fait comme tu m'a dit et la page blanche s'affiche lorsque je récupère les données du motif, je pense que dans la colonne il y a quelques données vide, se qui donne la page blanche. je vais me renseigné comment ignorer les données vide
0
je n'ai pas trouver de solutions, le problème n'est pas le fait qu'il y a des données vide, c'est les caractère spéciaux, et je n'arrive pas a les ignorés.

c'est peux être aussi car il faut définir les colonnes avec du texte du type varchar mais je n'ai pas trouver la fonction permettant de faire cela.

merci de bien vouloir m'aider svp.
0
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712
24 sept. 2021 à 16:25
Il serait utile que tu nous indiques le SGBD utilisé ....
Si tu fais du odbc, on peut supposer que c'est avec une bdd access non ?
Pour ce qui concerne l'administration de la bdd et la modification éventuelle des types de colonne ( en varchar) il faut demander dans le forum base de données / access (*access ou autre... selon la bdd que tu utilises... )
0
user12478 > jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024
24 sept. 2021 à 19:35
c'est bon j'ai trouver la solution le problème était le UTF-8 qui n'était pas compatible avec tout les caractères, je suis aller dans les paramètres Windows > heure et langue > langue > paramètre de la langue d'administration > modifier les paramètres régionaux et j'ai activé le format unicode utf8 langues mondiale. tout fonctionnes.
merci pour ton aide
0