首页 > 解决方案 > 如何解决 php 7.1.3 和 jpgraph 4.2.6 中的“Uncaught TypeError: Argument 1 passed to JpGraphException::defaultHandler()”问题?

问题描述

我正在使用带有 jpgraph 的数据库的 Satisfaction 表单来处理图表,并且遇到了一些处理程序错误的问题。

这是我的程序:

<?php
    require_once("./src/jpgraph.php");
    require_once("./src/jpgraph_pie.php");
    require_once("./src/jpgraph_pie3d.php");

    $db="questionnaire";
    try
    {
    $bdd=new PDO('mysql:host=localhost;dbname='.$db,'root','');
    }
    catch(Exception $exception)
    {
    die('Erreur :'.$exception->getMessage());
    }
    //var
    $req=$bdd->prepare('SELECT Adaptation1 FROM s3');
    // on execute la requete avec le contenu saisi 'user'

    $req->execute();    
    $valpour = 100;
    $comptage=array(
    "Vide"=>0,
    "Satisfaisante"=>0,
    "Inadaptee"=>0,
    "Incomplete"=>0);   
    /*$vide = cal_pour($comptage["Vide"],$comptage,$valpour);
    $Satisfaisante = cal_pour($comptage["Satisfaisante"],$comptage,$valpour);
    $Inadaptee = cal_pour($comptage["Inadaptee"],$comptage,$valpour);
    $Incomplete = cal_pour($comptage["Incomplete"],$comptage,$valpour);*/
    while ($donnees=$req->fetch(PDO::FETCH_ASSOC))
       {
        foreach ($donnees as $indice=>$valeur){
        echo $valeur."<br/>";
        if ($valeur=="") $comptage["Vide"]++;
        else    $comptage[$valeur]++;
        }
    }

    /*function cal_pour($nombre,$total,$pourcentage)
    { 
     $resultat = ($nombre/$total) * $pourcentage;
    return round($resultat); // Arrondi la valeur
    } */

    $data = array($comptage["Vide"],$comptage["Satisfaisante"],$comptage["Inadaptee"],$comptage["Incomplete"]);
    //print_r($data);
    $graph = new PieGraph(400,300);
    $theme_class= new VividTheme;
    $graph->SetTheme($theme_class);

    $graph->title->Set("Résultat Question PPN");

    $p1 = new PiePlot3D($data);
    $graph = Add($p1);
    $p1->ShowBorder();
    $p1->SetColor("green");
    $p1->ExplodeSlice(1);
    $graph->Stroke();
?>

这是我遇到的错误:

致命错误:未捕获的 TypeError:传递给 JpGraphException::defaultHandler() 的参数 1 必须是 Exception 的实例,C:\Users\Stric\Documents\projet-tut\projet-tut\src\jpgraph_errhandler.inc 中给出的错误实例.php:158 堆栈跟踪:#0 [内部函数]:JpGraphException::defaultHandler(Object(Error)) #1 {main} 在 C:\Users\Stric\Documents\projet-tut\projet-tut\src\ 中抛出jpgraph_errhandler.inc.php 在第 158 行

这是各自的第 158 行:

 static public function defaultHandler(Exception $exception) {
        global $__jpg_OldHandler;
        if( $exception instanceof JpGraphException ) {
            $exception->Stroke();
        }
        else {
            // Restore old handler
            if( $__jpg_OldHandler !== NULL ) {
                set_exception_handler($__jpg_OldHandler);
            }
            throw $exception;
        }
    }
}

标签: phphtmlmysqljpgraph

解决方案


只需更改$graph = Add($p1);$graph->Add($p1);,您的图表就会起作用。

$p1 = new PiePlot3D($data);
$graph->Add($p1);  // this is where the change is
$p1->ShowBorder();
$p1->SetColor("green");
$p1->ExplodeSlice(1);
$graph->Stroke();

推荐阅读