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!!!
