Doubt with the include php

1

File nav.php, the one that I use to include it according to the ticket_type of the user after logging in.

<?php
  $active = array();

  for($i=0; $i<7; $i++){

    if($_GET['active']==$i){

      $active[$i] = 'active';
     }
    else{

      $active[$i] = "";
    }
  }

?>

<ul id="sesion" class="dropdown-content">
  <li><a onclick="return confirm('Estas seguro?');" href='scripts/scriptCierraSesion.php'><i class="fa fa-sign-out" aria-hidden="true"></i> Cerrar Sesion</a></li>
</ul>
<ul id="tickets" class="dropdown-content">
  <li><a href='nuevoTicket-0'><i class="fa fa-plus-square" aria-hidden="true"></i> Nueva Solicitud</a></li>
  <li><a href='tickets-sin-revisar-0'><i class="fa fa-pause" aria-hidden="true"></i> Solicitudes Pendientes <?php echo '<div class="notificacion">'.$resultado =$ticket->pendientesporrevisar($conexion).'</div>'; ?></a></li>
  <li><a href='tickets-revisados-0'><i class="fa fa-check-square" aria-hidden="true"></i> Solicitudes Cerradas</a></li>
</ul>

<nav style="margin-top:-10px">
  <div class="nav-wrapper blue darken-1">
    <a href="#" data-activates="mobile-demo" class="button-collapse"><i class="fa fa-bars" aria-hidden="true"></i></a>
    <ul class="right hide-on-med-and-down">
<li class="<?=$active[8]?>"><a href="./index.php"><i class="fa fa-home" ></i> Inicio</a></li>    
<li class="<?=$active[5]?>"><a href="../../index.php"><i class="fa fa-desktop" ></i> Sistemas</a></li>

      <li class="<?=$active[0]?>" style="width:200px;text-align:center;"><a class="dropdown-button" href="#!" data-activates="tickets">Tickets <i class="fa fa-ticket" aria-hidden="true"></i></a></li>
      <li class="<?=$active[3]?>"><a href='usuarios-3'><i class="fa fa-user" aria-hidden="true"></i> Mi perfil</a></li>
      <li class="<?=$active[6]?>"><a href='sugerencias-6'><i class="fa fa-lightbulb-o" aria-hidden="true"></i> Sugerencias</a></li>
      <li><a class="dropdown-button" href="#!" data-activates="sesion"><?=$_SESSION['ticket_usuario']?><i class="fa fa-chevron-down right" aria-hidden="true"></i></a></li>
    </ul>
    <ul class="side-nav" id="mobile-demo">
      <li><a href="#">Sistemas</a></li>
<li><a href="#">Inicio</a></li>
      <li><a href='nuevoTicket-0'>Nueva Solicitud</a></li>
      <li><a href='tickets-sin-revisar-1'>Solicitudes Pendientes</a></li>
      <li><a href='tickets-revisados-2'>Solicitudes Cerradas</a></li>
      <li><a href='usuarios-3'>Mi perfil</a></li>
      <li><a href='sugerencias-6'>Sugerencias</a></li>
      <li><a href='sugerencias-6'>Usuario: <?=$_SESSION['ticket_usuario']?></a></li>
      <li><a onclick="return confirm('Estas seguro?');" href='scripts/scriptCierraSesion.php'>Cerrar Sesion</a></li>
    </ul>
  </div>
</nav>

The ticket.class.php file that I call with include in my index to call the necessary functions

<?php

class Ticket{

    private $idUsuario;
    private $tipoSolicitud;
    private $prioridad;
    private $titulo;
    private $observacion;
    private $archivo;
    private $status;
    public  $fecha;
    private $respuesta;
    public  $hora;

    function setIdUsuario($idUsuario){
        $this->idUsuario = $idUsuario;
    }

    function setTipoSolicitud($TipoSolicitud){
        $this->tipoSolicitud = $TipoSolicitud;
    }

    function setPrioridad($Prioridad){
        $this->prioridad = $Prioridad;
    }

    function setTitulo($Titulo){
        $this->titulo = $Titulo;
    }

    function setObservacion($Observacion){
        $this->observacion = $Observacion;
    }

    function setArchivo($Archivo, $conexion){
        $this->archivo = $Archivo;
        $consulta = mysqli_query($conexion,"UPDATE ticket SET archivo='".$this->archivo."' WHERE id=".mysqli_insert_id($conexion)." ");
    }

    function setStatus($Status){
        $this->status = $Status;
    }

    function setFecha(){

        date_default_timezone_set('America/Manaus');
        $hora = new DateTime();
        $hora->setTimezone(new DateTimeZone('America/Manaus'));

        $this->fecha    = date("Y-m-d");
        $this->hora     = $hora->format("H:i:s");

    }

    function setRespuesta($respuesta){
        $this->respuesta = $respuesta;
    }

    function getId($conexion){
        return mysqli_insert_id($conexion);
    }

    function pendientesporrevisar($conexion){

        $pendientes = (mysqli_query($conexion, "SELECT COUNT(*) AS conteo FROM ticket WHERE tipo_solicitud = 1 && status = 1 ")) or die("Error mostrando  tickets  pendientes: ".mysqli_error($conexion));
        $resultados = mysqli_fetch_row($pendientes);
        return $resultados[0];

    }

    function pendientesporrevisardos($conexion){

        $pendientes = (mysqli_query($conexion, "SELECT COUNT(*) AS conteo FROM ticket WHERE tipo_solicitud = 2 && status = 1 ")) or die("Error mostrando  tickets  pendientes: ".mysqli_error($conexion));
        $resultados = mysqli_fetch_row($pendientes);
        return $resultados[0];

    }

}

?>

And finally the file that shows the slopes

<?php

require ("scripts/scriptValidaSession.php");
require ("clases/ticket.class.php");
require ("clases/baseDatos.class.php");
require ("clases/usuario.class.php");

?>

<style>
.notificacion {
  background: red;
   border-radius: 0.8em;
  -moz-border-radius: 0.8em;
  -webkit-border-radius: 0.8em;
  color: #ffffff;
  display: inline-block;
  font-weight: bold;
  line-height: 1.6em;
  margin-right: 15px;
  text-align: center;
  width: 1.6em; 
}
</style>

<!DOCTYPE html>
<html lang="es">
    <head>

        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>HelpDesk - Solicitudes pendientes</title>

        <link rel="shortcut icon" href="images/favicon.png" />
        <link href="materialize/css/materialize.min.css" rel="stylesheet" media="screen">
        <link href="font-awesome/css/font-awesome.min.css" rel="stylesheet" media="screen">
        <link href="materialize/css/style.css" rel="stylesheet" media="screen">
        <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"><!-- ICONOS DE GOOGLE-->
        <script type="text/javascript" src="js/jquery-1.11.1.min.js"></script>
        <script type="text/javascript" src="js/autoRefresh.js"></script>
        <script type="text/javascript" src="materialize/js/materialize.min.js"></script>
        <script type="text/javascript" src="materialize/js/init.js"></script>
        <script type="text/javascript">

            <?php

                if($_SESSION['ticket_tipo'] == 1){
                    echo "var myVar = setInterval(function(){autoRefresh()}, 3000);";
                }

            ?>

            window.addEventListener('focus', function() {
            document.title = 'HelpDesk - Solicitudes pendientes';
            $("#list").load(location.href+" #list>*","");

        });

        </script>
    </head>
    <body>
        <img src="images/banner-top.png" alt="" width="100%" height="100px">
        <?php

//aqui se van a redireccionar los distintos menus del sistema 
//1 administrador ,2jefe de departamento, 3empleado, 4gerente ,5gerente general

if($_SESSION['ticket_tipo'] ==1 ) include_once("partes/nav.php"); //administrador
if($_SESSION['ticket_tipo'] ==2 ) include_once("partes/nav2.php"); //jefe de departamento
if($_SESSION['ticket_tipo'] ==3 ) include_once("partes/nav2.php");//empleado
if($_SESSION['ticket_tipo'] ==4 ) include_once("partes/nav2.php"); //gerente
if($_SESSION['ticket_tipo'] ==5 ) include_once("partes/nav2.php");//gerente general

        ?>
        <div class="card-panel grey lighten-4" style="padding: 0px 20px 20px 20px !important;">
            <table class="highlight responsive-table centered" id="table">
                <thead>
                    <tr>
                        <th>Ticket</th>
                        <th>Usuario</th>
                        <th>Departamento</th>
                        <th>Sede</th>
                        <th>Solicitud</th>
                        <th>Prioridad</th>
                        <th>Titulo</th>
                        <th>Adjunto</th>
                        <th>Estatus</th>
                        <th>Fecha</th>
                        <th>Hora</th>
                        <?php if($_SESSION['ticket_tipo'] == 1 || ($_SESSION['ticket_tipo'] > 3 && $_SESSION['ticket_tipo'] < 6)): ?>
                        <td><a href="reporte.php" target="_blank"><i title="Descargar PDF" class=" glyphicon glyphicon-floppy-save"></i></a></td>
                        <?php endif; ?>
                    </tr>
                </thead>
                <tbody>
                </tbody>
            </table>
        <?php

            $conexion = new baseDatos();

            if ($conexion->connect_errno) {
                echo "Fallo la conexion: ".$conexion->connect_error;
            }

            $ticket = new Ticket();

            if($_SESSION['ticket_tipo'] == 3){
                $consulta = $ticket->listTicketUnrevisedEmpleado($conexion, $_SESSION['ticket_id']);
            }elseif($_SESSION['ticket_tipo'] == 2){
                $consulta = $ticket->listTicketUnrevisedSupervisor($conexion, $_SESSION['ticket_id_departamento']);
            }elseif($_SESSION['ticket_tipo'] == 4){
                $consulta = $ticket->listTicketUnrevisedGerente($conexion, $_SESSION['ticket_id_cede']);
            }elseif($_SESSION['ticket_tipo'] == 1){
                $consulta = $ticket->listTicketUnrevised($conexion);
                $resultado = $ticket->pendientesporrevisar($conexion);
                if($resultado > 0){ // validamos si es mayor a 0
                    ?>
                    <div align="" class="">TICKETS DE ANULACION PENDIENTES:<?php echo '<div class="notificacion">',$resultado,'</div>'; ?></div>
                    <?php 
                }

                $resultado = $ticket->pendientesporrevisardos($conexion);

                if($resultado > 0){ // validamos si es mayor a 0
                    ?>
                    <div align="" class="">TICKETS DE SOPORTE PENDIENTES:<?php echo '<div class="notificacion">',$resultado,'</div>'; ?></div>
                    <?php 
                }

            }
        ?>

        .....

        </div>
  </body>
</html>

Why in my nav.php file does it not load the same as it loads in the index file? It tells me that the variable ticket is not defined, however I call it in my index and if it appears. What should I add in the nav file to be able to display the $resultado = $ticket->pendientesporrevisar($conexion); information in that file?

    
asked by Juan Ortiz 18.04.2018 в 21:00
source

2 answers

2

I recommend you read a little Differences include, require, include_once and require_once . For that part, as I see there are no problems, but you have not seen your error message well, your error message does not say that the class does not exist, it says that the variable does not exist.

From what I'm seeing in another answer you included the error like this:

Notice: Undefined variable: ticket in C:\xampp\...\nav2.php on line 63 Fatal error: Uncaught Error: Call to a member function pendientesporrevisar() on null in C:\xampp\...\nav2.php:63 Stack trace: #0 

This error is telling you that the $ ticket variable does not exist therefore you would have to initialize it, the error is not because the class does not exist, if you want to statically call the function inside the ticket class you must first declare the function as static and then call the function in a static way:

class ticket{
    static public function pendientesporrevisar($conexion){
        $pendientes = (mysqli_query($conexion, "SELECT COUNT(*) AS conteo FROM ticket WHERE tipo_solicitud = 1 && status = 1 ")) or die("Error mostrando  tickets  pendientes: ".mysqli_error($conexion));
        $resultados = mysqli_fetch_row($pendientes);
        return $resultados[0];
    }
}

And then call the function with:

ticket::pendientesporrevisar($conexion);

Or as you already have it defined but first create the ticket class object to send the function to call:

$lticketObject = new ticket();
$lticketObject->pendientesporrevisar($conexion);

Seeing the edition in the question, the lines of:

        $conexion = new baseDatos();

        if ($conexion->connect_errno) {

            echo "Fallo la conexion: ".$conexion->connect_error;
        }

        $ticket = new Ticket();

You have them after loading the nav.php file, it would be better if that code was after you loaded the class files with the require and before loading the nav.php, you hit it then I will also download a bit your tags according to the html documentation the best place to put those tags would be in the head.

<?php

    require("scripts/scriptValidaSession.php");
    require("clases/ticket.class.php");
    require("clases/baseDatos.class.php");
    require("clases/usuario.class.php");

    $conexion = new baseDatos();

    if ($conexion->connect_errno) {
        echo "Fallo la conexion: ".$conexion->connect_error;
    }

    $ticket = new Ticket();

?>
<!DOCTYPE html>
<html lang="es">
  <head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>HelpDesk - Solicitudes pendientes</title>

    <link rel="shortcut icon" href="images/favicon.png" />
    <link href="materialize/css/materialize.min.css" rel="stylesheet" media="screen">
    <link href="font-awesome/css/font-awesome.min.css" rel="stylesheet" media="screen">
    <link href="materialize/css/style.css" rel="stylesheet" media="screen">
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"><!-- ICONOS DE GOOGLE-->
    <style>

    .notificacion {
      background: red;
       border-radius: 0.8em;
      -moz-border-radius: 0.8em;
      -webkit-border-radius: 0.8em;
      color: #ffffff;
      display: inline-block;
      font-weight: bold;
      line-height: 1.6em;
      margin-right: 15px;
      text-align: center;
      width: 1.6em; 
    }

    </style>
    <script type="text/javascript" src="js/jquery-1.11.1.min.js"></script>
    <script type="text/javascript" src="js/autoRefresh.js"></script>
    <script type="text/javascript" src="materialize/js/materialize.min.js"></script>
    <script type="text/javascript" src="materialize/js/init.js"></script>

... El resto de tu código ...

Something I see in your edition is that you no longer see where you are calling in your nav.php file the line of:

$ticket->pendientesporrevisar($conexion);

I no longer see it in your nav code.

    
answered by 19.04.2018 / 05:41
source
1

Try to validate if the class exists, before calling it in your nav.php :

<?php
if (!class_exists("ticket"))
{
  require ("clases/ticket.class.php");
}
?>
    
answered by 18.04.2018 в 21:04