Catchable fatal error: Argument 1 passed to DOMNode::appendChild() must be an instance of DOMNode, null given, called in C:\Users\jcirc\Dropbox\JORDI\WWW\dompdf\include\table_frame_decorator.cls.php on line 304 and defined in C:\Users\jcirc\Dropbox\JORDI\WWW\dompdf\include\frame.cls.php on line 726
Y si tienen una fila o ninguna se crea el pdf perfectamente.
Por lo que he leído es un error en el php, pero he hecho un test de validación y todo esta correcto, ya no se que hacer. Os dejo el código de la pagina php, a ver si vosotros veis algo que a mi se me escapa.
Código PHP :
<?php ob_start(); include('convertToPDF.php'); ?> <?php session_start(); /* $idPerfil = $_SESSION['idPerfil']; */ $idProj = $_GET['idProjecte']; $ref = $_GET['ref']; $style = $_GET['style']; include_once "conexion.php"; $admin = $_SESSION['admin']; /////Si no hi ha sessio...//// if ($admin != "no" & $admin != "si") { header("location:index.php"); } //Consulta que ens retornara totes categories del perfil corresponent $liniesOperari = mysql_query("SELECT * FROM liniaoperari WHERE idProjecte = ".$idProj); $liniesMaquina = mysql_query("SELECT * FROM liniamaquina WHERE idProjecte = ".$idProj); $liniesMaterial = mysql_query("SELECT * FROM liniamaterial WHERE idProjecte = ".$idProj); //Consulta que ens retornara tots els operaris $operaris = mysql_query("SELECT * FROM operaris"); //Consulta que ens retornara totes les maquines $maquines = mysql_query("SELECT * FROM maquines"); $horesOperaris = 0; $horesMaquines = 0; $material = 0; //Consulta que ens retornara el preu total de les hores d'operaris calculades segons el projecte seleccionat $sumaHoresOperaris = mysql_query("SELECT SUM(operaris.preuHora * liniaoperari.hores) AS Total FROM operaris, liniaoperari WHERE operaris.id = liniaoperari.idOperari AND liniaoperari.idProjecte = ".$idProj); $sumaHoresOperaris = mysql_fetch_assoc($sumaHoresOperaris); $sumaHoresOperaris = $sumaHoresOperaris['Total']; //Consulta que ens retornara el preu total de les hores de maquines calculades segons el projecte seleccionat $sumaHoresMaquines = mysql_query("SELECT SUM(maquines.preuHora * liniamaquina.hores) AS Total FROM maquines, liniamaquina WHERE maquines.id = liniamaquina.idMaquina AND liniamaquina.idProjecte = ".$idProj); $sumaHoresMaquines = mysql_fetch_assoc($sumaHoresMaquines); $sumaHoresMaquines = $sumaHoresMaquines['Total']; //Consulta que ens retornara el preu total dels materials calculades segons el projecte seleccionat $sumaMaterial = mysql_query("SELECT SUM(import) AS Total FROM liniamaterial WHERE idProjecte = ".$idProj); $sumaMaterial = mysql_fetch_assoc($sumaMaterial); $sumaMaterial = $sumaMaterial['Total']; //total sera la variable que guardara la suma dels 3 valors anteriors $total = $sumaHoresOperaris + $sumaHoresMaquines + $sumaMaterial; //Guardem els calculs de l'iva i total amb iva $iva = $total * 0.21; $totalAmbIva = $total * 1.21; //preu del pressupost entrat al crear el projecte $pressupost = mysql_query("SELECT pressupost AS importPresu FROM projectes WHERE id = ".$idProj); $pressupost = mysql_fetch_assoc($pressupost); $pressupost = $pressupost['importPresu']; //Guardarem tots els valors amb 2 digits decimals $sumaHoresOperaris = number_format($sumaHoresOperaris,2,".",","); $sumaHoresMaquines = number_format($sumaHoresMaquines,2,".",","); $sumaMaterial = number_format($sumaMaterial,2,".",","); $totalAmbIva = number_format($totalAmbIva,2,".",","); $iva = number_format($iva,2,".",","); $pressupost = number_format($pressupost,2,".",","); //Calcularem el 10% i el 20% del pressupost $diferencia = $pressupost - $totalAmbIva; $total20 = (20 * $pressupost) / 100; $total10 = (10 * $pressupost) / 100; ?> <html> <head> <meta charset="UTF-8"> <?php //Depenent de si ens envien style=pdf o no carregarem uns estils o uns altres if($style != "pdf"){ echo ' <link rel="stylesheet" type="text/css" href="style/css/index.css" /> <link rel="stylesheet" type="text/css" href="style/css/projecte.css" />'; } else { echo ' <link rel="stylesheet" type="text/css" href="style/css/indexPDF.css" /> <link rel="stylesheet" type="text/css" href="style/css/projectePDF.css" />'; } ?> <script language="javascript"> //BORRAR LINIA OPERARI// function borrarLiniaOperari(id) { if (confirm("Estas segur de borrar?")) { //Inicialització de l'objecte de petició de la pàgina. xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function(){ if (xmlhttp.readyState == 4 && xmlhttp.status == 200){ //Cargarem tota la pagina dins de body document.getElementById("body").innerHTML = xmlhttp.responseText; } } xmlhttp.open("GET","liniaOperariDelete.php?idLiniaOperari="+id+"&idProjecte=<?= $idProj ?>",true); xmlhttp.send(); } } //BORRAR LINIA MAQUINA// function borrarLiniaMaquina(id) { if (confirm("Estas segur de borrar?")) { //Inicialització de l'objecte de petició de la pàgina. xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function(){ if (xmlhttp.readyState == 4 && xmlhttp.status == 200){ //Cargarem tota la pagina dins de body document.getElementById("body").innerHTML = xmlhttp.responseText; } } xmlhttp.open("GET","liniaMaquinaDelete.php?idLiniaMaquina="+id+"&idProjecte=<?= $idProj ?>",true); xmlhttp.send(); } } //BORRAR LINIA MATERIAL// function borrarLiniaMaterial(id) { if (confirm("Estas segur de borrar?")) { //Inicialització de l'objecte de petició de la pàgina. xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function(){ if (xmlhttp.readyState == 4 && xmlhttp.status == 200){ //Cargarem tota la pagina dins de body document.getElementById("body").innerHTML = xmlhttp.responseText; } } xmlhttp.open("GET","liniaMaterialDelete.php?idLiniaMaterial="+id+"&idProjecte=<?= $idProj ?>",true); xmlhttp.send(); } } //CREAR NOVA LINIA OPERARI// function crearLiniaOperari() { // inicialització de l'objecte de petició de la pàgina. xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { //Cargarem tota la pagina dins de body document.getElementById("body").innerHTML=xmlhttp.responseText; } } //Agafa els valors del formulari i ho enviem a maquinaNew.php xmlhttp.open("GET","liniaOperariNew.php?idOperari="+ document.getElementById("idOperari").value +"&hores="+ document.getElementById("horesOperari").value +"&feinaFeta="+ document.getElementById("feinaFetaOperari").value +"&idProjecte="+ document.getElementById("idProjecte").value,true); xmlhttp.send(); } //CREAR NOVA LINIA MAQUINA// function crearLiniaMaquina() { // inicialització de l'objecte de petició de la pàgina. xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { //Cargarem tota la pagina dins de body document.getElementById("body").innerHTML=xmlhttp.responseText; } } //Agafa els valors del formulari i ho enviem a maquinaNew.php xmlhttp.open("GET","liniaMaquinaNew.php?idMaquina="+ document.getElementById("idMaquina").value +"&hores="+ document.getElementById("horesMaquina").value +"&feinaFeta="+ document.getElementById("feinaFetaMaquina").value +"&idProjecte="+ document.getElementById("idProjecte").value,true); xmlhttp.send(); } //CREAR NOVA LINIA MATERIAL// function crearLiniaMaterial() { // inicialització de l'objecte de petició de la pàgina. xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { //Cargarem tota la pagina dins de body document.getElementById("body").innerHTML=xmlhttp.responseText; } } //Agafa els valors del formulari i ho enviem a maquinaNew.php xmlhttp.open("GET","liniaMaterialNew.php?material="+ document.getElementById("material").value +"&import="+ document.getElementById("import").value +"&idProjecte="+ document.getElementById("idProjecte").value,true); xmlhttp.send(); } //AL FER DOBLE CLICK SOBRE L'IMPORT function dbleClickImport(id,idProjecte) { //alert("Me haz dado un click"+id); // inicialització de l'objecte de petició de la pàgina. xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { //Cargarem tota la pagina dins de body document.getElementById("import"+id).innerHTML=xmlhttp.responseText; } } //Agafa els valors del formulari i ho enviem a maquinaNew.php xmlhttp.open("GET","importEditar1.php?id="+ id +"&idProjecte="+ idProjecte,true); xmlhttp.send(); } //MODIFICAR IMPORT EN CONCRET// function modImport(id,idProjecte) { // inicialització de l'objecte de petició de la pàgina. xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { //Cargarem tota la pagina dins de body document.getElementById("body").innerHTML=xmlhttp.responseText; } } //Agafa els valors del formulari i ho enviem a importEditar2.php xmlhttp.open("GET","importEditar2.php?id="+ id +"&import="+ document.getElementById("import").value +"&idProjecte="+ idProjecte,true); xmlhttp.send(); } </script> </head> <body id="body"> <div id="nav"> <form id="cerrarSesion" action="logout.php"><button type="submit">Cerrar sesión</button></form> <a hreF="perfil.php" class="boton"> <div class="botoMenu"> <img src="img/icons/perfil.png" width="80" height="80" alt=""/> </div> </a> <a hreF="projectes.php" class="boton"> <div class="botoMenu"> <img src="img/icons/serveis.png" width="80" height="80" alt=""/> </div> </a> <a hreF="operaris.php" class="boton"> <div class="botoMenu"> <img src="img/icons/operaris.png" width="80" height="80" alt=""/> </div> </a> <a hreF="maquines.php" class="boton"> <div class="botoMenu"> <img src="img/icons/maquines.png" width="80" height="80" alt=""/> </div> </a> <a hreF="generarPDF.php" class="boton"> <div> Imprimir PDF / Marcar com inactiu </div> </a> </div> <!-------- TAULA DE LA FEINA DELS OPERARIS --------> <div class="taulaProjectes1"> <table border="1px"> <tr> <th width="140px">OPERARIO</th> <th width="52px">HORAS</th> <th width="264px">TRABAJO REALIZADO</th> <th width="115px">FECHA Y HORA</th> <th width="30px"></th> </tr> <tr> <?php //Bucle per recorrer totes les liniesOperari while($liniaOperari = mysql_fetch_array($liniesOperari)) { //Consulta per buscar el nom de l'operari segons el seu id $operariis = mysql_query("SELECT nom,cognom FROM operaris WHERE id = ".$liniaOperari['idOperari']); $operarii = mysql_fetch_array($operariis); $operariNom = $operarii['nom']; $operariCognom = $operarii['cognom']; //Sumarem les hores a cada volta i les guardarem a la variable $horesOperaris $horesOperaris = $horesOperaris + $liniaOperari['hores'] ; ?> <td><?= $operariNom ." ". $operariCognom ?></td> <td><?= $liniaOperari['hores'] ?></td> <td><?= $liniaOperari['feinaFeta'] ?></td> <td><?= $liniaOperari['dataHora'] ?></td> <td class="iconoBorrar"><a href="javascript:borrarLiniaOperari(<?= $liniaOperari['id'] ?>)"><img src="img/icons/delete.png" width="25" height="25" alt=""/></a></td> </tr> <?php } ?> </table> <form name="formLiniaOperari" action="javascript:crearLiniaOperari()" method="POST"> <select id="idOperari" name="idOperari"> <?php //Bucle per recorrer tots els operaris while($operari = mysql_fetch_array($operaris)) { ?> <option value="<?= $operari['id'] ?>"><?= $operari['nom'] ?> <?= $operari['cognom'] ?></option> <?php } ?> </select> <input size="2" type="text" id="horesOperari" name="horesOperari" placeholder="Horas"> <input size="50" type="text" id="feinaFetaOperari" name="feinaFetaOperari" placeholder="Descripción del trabajo realizado"> <input type="hidden" id="idProjecte" name="idProjecte" value="<?= $idProj ?>"> <input class="botoOk" type="submit" value="OK"> </form> </div> <!-------- TAULA DE LA FEINA DE LES MAQUINES --------> <div class="taulaProjectes2"> <table border="1px"> <tr> <th width="150px">MAQUINA</th> <th width="52px">HORAS</th> <th width="264px">TRABAJO REALIZADO</th> <th width="115px">FECHA Y HORA</th> <th width="30px"></th> </tr> <tr> <?php //Bucle per recorrer totes les liniesMaquina while($liniaMaquina = mysql_fetch_array($liniesMaquina)) { //Consulta per buscar el nom de la maquina segons el seu id $maquinees = mysql_query("SELECT nom FROM maquines WHERE id = ".$liniaMaquina['idMaquina']); $maquinaa = mysql_fetch_array($maquinees); $maquinaNom = $maquinaa['nom']; //Sumarem les hores a cada volta i les guardarem a la variable $horesMaquines $horesMaquines = $horesMaquines + $liniaMaquina['hores']; ?> <td><?= $maquinaNom ?></td> <td><?= $liniaMaquina['hores'] ?></td> <td><?= $liniaMaquina['feinaFeta'] ?></td> <td><?= $liniaMaquina['dataHora'] ?></td> <td class="iconoBorrar"><a href="javascript:borrarLiniaMaquina(<?= $liniaMaquina['id'] ?>)"><img src="img/icons/delete.png" width="25" height="25" alt=""/></a></td> </tr> <?php } ?> </table> <form name="formLiniaMaquina" action="javascript:crearLiniaMaquina()" method="POST"> <select id="idMaquina" name="idMaquina"> <?php //Bucle per recorrer totes les maquines while($maquina = mysql_fetch_array($maquines)) { ?> <option value="<?= $maquina['id'] ?>"><?= $maquina['nom'] ?></option> <?php } ?> </select> <input size="2" type="text" id="horesMaquina" name="horesMaquina" placeholder="Horas"> <input size="50" type="text" id="feinaFetaMaquina" name="feinaFetaMaquina" placeholder="Descripción del trabajo realizado"> <input type="hidden" id="idProjecte" name="idProjecte" value="<?= $idProj ?>"> <input class="botoOk" type="submit" value="OK"> </form> </div> <!--------------- TAULA DEL MATERIAL ---------------> <div class="taulaProjectes3"> <table border="1px"> <tr> <th width="188px">MATERIAL</th> <th width="35px">IMPORTE</th> <th width="30px"></th> </tr> <?php //Bucle per recorrer totes les liniesMaterial while($liniaMaterial = mysql_fetch_array($liniesMaterial)) { ?> <tr> <td><?= $liniaMaterial['material'] ?></td> <td id="import<?= $liniaMaterial['id'] ?>" ondblclick="dbleClickImport(<?= $liniaMaterial['id'] ?>,<?= $idProj ?>)"><?= $liniaMaterial['import'] ?></td> <td class="iconoBorrar"><a href="javascript:borrarLiniaMaterial(<?= $liniaMaterial['id'] ?>)"><img src="img/icons/delete.png" width="25" height="25" alt=""/></a></td> </tr> <?php } ?> </table> <form name="formLiniaMaterial" action="javascript:crearLiniaMaterial()" method="POST"> <input size="21" type="text" id="material" name="material" placeholder="Material"> <input size="4" type="text" id="import" name="import" placeholder="Importe €"> <input type="hidden" id="idProjecte" name="idProjecte" value="<?= $idProj ?>"> <input class="botoOk" type="submit" value="OK"> </form> </div> <!-- Capa on es mostraran els resultats, calculs i comparacions del projecte --> <div id="calculs"> <table> <tr> <td><?= $horesOperaris ?> h</td><td>OPERARIOS</td><td align="right"><?= $sumaHoresOperaris ?> €</td><td> </td><td>TOTAL</td><td align="right"><?= $total ?> €</td> </tr> <tr> <td><?= $horesMaquines ?> h</td><td>MAQUINARIA</td><td align="right"><?= $sumaHoresMaquines ?> €</td><td></td><td>IVA</td><td align="right"><?= $iva ?> €</td> </tr> <tr> <td></td><td>MATERIAL</td><td align="right"><?= $sumaMaterial ?> €</td><td></td><td>IMPORTE TOTAL</td><td align="right"><?= $totalAmbIva ?> €</td> </tr> <tr> <td></td><td></td><td></td><td></td><td>PRESUPUESTO</td> <?php //Si el pressupost es menor de un 20% (taronja) si es menor de 10% (vermell) if(($diferencia <= $total20) and ($diferencia > $total10)){ echo "<td align='right' style='color:#FFA500'>".$diferencia." €</td>"; } if($diferencia <= $total10){ echo "<td align='right' style='color:#F00'>".$diferencia." €</td>"; } if($diferencia > $total20) { echo "<td align='right'>".$diferencia." €</td>"; } ?> </tr> </table> </div> <?php $html = ob_get_contents(); ob_end_clean(); if ( isset($_POST['PDF_4']) ) doPDF('nombre'.$_POST['PDF_4'],$html,true,'',false,'letter','landscape'); ?> <?php echo $html ?> <form action="<?php echo $_SERVER['PHP_SELF'] ?>?idProjecte=<?= $idProj ?>&ref=<?= $ref ?>&style=pdf" method="POST"> <input name="PDF_4" type="submit" value="CREAR" /> </form> </body> </html>
Gracias y un saludo!!!