Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

inserir numero sequencial

Pessoal estou tentando desenvolver um numero sequencial para os registros. Para tal eu fiz um botão que (teoricamente) quando o cliente clica ele gera um numero do BD sequencial na coluna "numero" e aproveito também para inserir o id do cliente. Para testes estou inserindo os values, um no perfil do cliente e um "hidden" no numero. Mas antes de inserir o numero sequencial eu tenho que verificar qual é o atual no BD e somar mais 1. Fiz isso na classe caso mas não está funcionando. Porque e como resolver?

este é o var_dump do adiciona-caso

Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\Bitnami\wampstack-7.1.13-1\apache2\htdocs\mvpbx\php\caso.php on line 30

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in C:\Bitnami\wampstack-7.1.13-1\apache2\htdocs\mvpbx\php\caso.php on line 31
string(52) "INSERT INTO caso (numero, perfil_id) VALUES (1, '4')"

botão:

 <form action="php/adiciona-caso.php"  method="post" >
<li><button type="submit" value="4"
     name="perfil_id" id="perfil_id" class="btn btn-success btn-sm">Novo Atendimento</li></a>
     <input type="hidden" value="" name="numero" id="numero">

adiciona-caso

<?php

$caso = new caso();
$caso->setNumero($_POST["numero"]);
$caso->setPerfil(new Perfil());
$caso->setPerfil($_POST["perfil_id"]);

var_dump($caso);exit;

$dao = new casoDAO($conexao);

if ($dao->insereCaso($caso)) {   

caso

<?php

class Caso
{

    public $id;
    public $numero;
    public $perfil;



    public function getId()
    {
        return $this->id;
    }

    public function setId($id)
    {
        $this->id = $id;
    }

    public function getNumero()
    {
        return $this->numero;
    }

    public function setNumero($numero)
    {
-linha 30:        $query = mysqli_query("SELECT * FROM caso ORDER BY numero DESC LIMIT 1");
        $array = mysqli_fetch_array($query);
        $ultimo  = $array["numero"];
        $numero = $ultimo+1; // Peguei o ultimo numero e somei 1
        $this->numero = $numero;
    }

    public function getPerfil()
    {
        return $this->perfil;
    }

    public function setPerfil($perfil)
    {
        $this->perfil = $perfil;

    }


}

dao

function insereCaso($caso) {

$query =  "INSERT INTO caso (numero, perfil_id) VALUES ({$caso->getNumero()}, '{$caso->getPerfil()}')";

     //var_dump($query);exit;
       return $caso;
         }
4 respostas

Não entendi bem o que está tentando fazer, mas eu posso abordar a exceção da linha 30: ''"mysqli_query() expects at least 2 parameters"''.

O mysqli_query exige como primeiro parâmetro uma conexão com o banco de dados, e somente o segundo parâmetro que é a query... você tá passando apenas a query.

Como vi que na sua instância do objeto $dao você passa a variável "$conexao", que imagino ser sua conexão com o banco de dados, o código da linha 30 da classe "Caso" deveria ficar assim (supondo que todo o resto esteja correto):

$query = mysqli_query($conexao, "SELECT * FROM caso ORDER BY numero DESC LIMIT 1");

Só não esqueça de passar a conexão como parâmetro para o método também, e já que você pega o número direto da consulta não vejo finalidade de ser passado o parâmetro "$numero":

public function setNumero($conexao)

Aproveitando seu código, ele poderia ficar assim:

public function setNumero($conexao)
 {
    $ultimo = 0; //define a variável como 0 caso a consulta não retorne resultados
    $query = "SELECT * FROM caso ORDER BY numero DESC LIMIT 1";
    $resultado = mysqli_query($conexao, $query);
    while($row = mysqli_fetch_assoc($resultado)){
        $ultimo = $row['ultimo'];
    }
    $ultimo++;
    $this->numero = $ultimo ;
}

Espero ter ajudado de alguma forma.

Muito obrigado Daniel, funcionou certinho!!!! você poderia me dizer como eu pego o perfil_id para enviar junto para o BD? Este perfil_id é o id do cliente que eu retorno do login e consigo exibir em todas as paginas e o botão para enviar o parametro é esse e o value está sem nada:

<button type="submit" value=""
     name="perfil_id" id="perfil_id" class="btn btn-success btn-sm">Novo Atendimento</li></a>

esse é o retorno (session) do usuário que eu consigo exibir na página

<strong><i class="fas fa-balance-scale">&nbsp Atendimento nº xxxxx em aberto</i><p class="text-success">
Você está logado como <?= $_SESSION["usuario_logado"] ?>

ele vem do logica-usuario que está desta forma:

<?php

session_start();

function logarUsuario($usuario) {
    $_SESSION['usuario_logado'] = $usuario;
}

//var_dump($_SESSION);exit;

function usuarioEstaLogado() {
    if (array_key_exists('usuario_logado', $_SESSION)) {
        return true;
    }

    return false;
}

function verificaUsuario() {
    if (!usuarioEstaLogado()) {
        header("Location: /izzed/index.php?acessoNegado=true");
        die();
    }
}

function usuarioLogado() {
    return $_SESSION['usuario_logado'];
}

function logout() {
    session_destroy();
}
solução!

Da mesma forma que você coloca o nome do usuário na $_SESSION['usuario_logado'], você pode criar uma outra variável na SESSION e colocar o perfil_id (ex.: $_SESSION['perfil_id'] = perfil_id_aqui) para resgatar conforme sua necessidade, e quando carregar o formulário você preenche um input hidden ou no seu caso o botão com a variável:

<button type="submit" value="<?=$_SESSION['perfil_id']?>" name="perfil_id" id="perfil_id" class="btn btn-success btn-sm">Novo Atendimento</button>

Valeu Daniel!!!! show. Me ajudou mesmo!!!!

muito obrigado!!!!