Warning: array_keys() expects Parameter 1 to be array, null Given in

Asked

Viewed 1,527 times

1

How do I fix it ?

Warning: array_keys() expects Parameter 1 to be array, null Given in C: Program Files Vertrigoserv www store classes Site.class.php on line 81

Warning: array_values() expects Parameter 1 to be array, null Given in C: Program Files Vertrigoserv www store classes Site.class.php on line 83

Warning: Invalid argument supplied for foreach() in C: Program Files Vertrigoserv www store classes Site.class.php on line 89

class Site extends BD{

private $conexao;

public function getData(){
    $data = getdate();
    $diaHoje = date('d');
    $array_meses = array(1 => "Janeiro", 2 => "Fevereiro", 3 => "Março", 4 => "Abril", 5 => "Maio", 6 => "Junho", 
                         7 => "Julho", 8 => "Agosto", 9 => "Setembro", 10 => "Outubro", 11 => "Novembro", 12 => "Dezembro");

    $horaAgora = date('H:i');
    $mesgetdate = $data['mon'];
    $anoAtual = date('Y');

    return 'Hoje, '.$diaHoje.' de '.$array_meses[$mesgetdate].' de '.$anoAtual.', às '.$horaAgora.'';
}// Armazena e retorna a string da data atual.


public function getMenu(){
    $imagem_cat = '<img src="'.PATH.'/images/add.png" border="0"/>';
    $imagem_subcat = '<img src="'.PATH.'/images/arrow.png" border="0"/>';

    $pegar_categorias = "SELECT * FROM `loja_categorias` ORDER BY id DESC";
    $executar = self::conn()->prepare($pegar_categorias);
    $executar->execute();
    if($executar->rowCount() == 0){}else{
        while($categoria = $executar->fetchObject()){
            echo '<li>'.$imagem_cat.'<a href="'.PATH.'/categoria/'.$categoria->slug.'">'.$categoria->titulo.'';

                $pegar_subcategorias = "SELECT * FROM `loja_subcategorias` WHERE id_cat = ?";
                $executar_sub = self::conn()->prepare($pegar_subcategorias);
                $executar_sub->execute(array($categoria->id));
                if($executar_sub->rowCount() == 0){echo '</li>';}else{
                    echo '<ul>';
                    while($subcategoria = $executar_sub->fetchObject()){
                        echo '<li>'.$imagem_subcat.'<a href="'.PATH.'/categoria/'.$categoria->slug.'/'.$subcategoria->slug.'">'.$subcategoria->titulo.'</a></li>';                          
                    }// Termina o while da SUBCATEGORIA
                    echo '</ul></li>';
                }// Termina else dos resultados da SUBCATEGORIA
        }// Termina a while das CATEGORIAS
    }// Termina ELSE        
}// Termina a função GET MENU


public function getBanners(){
    $sqlBanners = "SELECT * FROM `loja_banners` ORDER BY id DESC LIMIT 6";
    return self::conn()->query($sqlBanners);
}//pega os banners do slide principal




public function getProdutosHome($limit = false){
        if($limit == false){
            $query = "SELECT * FROM `loja_produtos` ORDER BY id DESC";
        }else{
            $query = "SELECT * FROM `loja_produtos` ORDER BY id DESC LIMIT $limit";
        }
    return self::conn()->query($query);
}//pegar os produtos da home    


public function atualizarViewCat($slug){

    $strSQL = "UPDATE `loja_categorias` SET views = views+1 WHERE slug = ?";
    $executar_view = self::conn()->prepare($strSQL);
    $executar_view->execute(array($slug));
}//atualiza views da categoria


public function atualizarViewSub($slug){

    $strSQL = "UPDATE `loja_subcategorias` SET views = views+1 WHERE slug = ?";
    $executar_view = self::conn()->prepare($strSQL);
    $executar_view->execute(array($slug));
}//atualiza views da subcategoria


// Método de insert
public function inserir($tabela, $dados){

    $pegarCampos = array_keys($dados);
    $contarCampos = count($pegarCampos);
    $pegarValores = array_values($dados);
    $contarValores = count($pegarValores);

    $sql = "INSERT INTO $tabela (";

    if($contarCampos == $contarValores){
        foreach($pegarCampos as $campo){
            $sql .= $campo.', ';
        }
        $sql = substr_replace($sql, ")", -2, 1);
        $sql .= "VALUES (";

        for($i = 0; $i < $contarValores; $i++){
            $sql .= "?, ";
            $i;
        }

        $sql = substr_replace($sql, ")", -2, 1);
    }else{
        return false;   
    }

    try{
        $inserir = self::conn()->prepare($sql);
        if($inserir->execute($pegarValores)){
            return true;    
        }else{
            return false;   
        }
    }catch(PDOException $e){
        return false;
    }
}


//seleção dinamica

public function selecionar($tabela, $dados, $condicao = false, $order = false){

    $pegarValores = implode(', ', $dados);
    $contarValores = count($pegarValores);

    if($condicao == false){
        if($contarValores > 0){
            if($order != false){
                $sql = "SELECT $pegarValores FROM $tabela ORDER BY $order";
            }else{
                $sql = "SELECT $pegarValores FROM $tabela";
            }
            $this->conexao = self::conn()->prepare($sql);
            $this->conexao->execute();
            return $this->conexao;
        } 
    }else{ 

        //existe condição para selecionar

        $pegarCondCampos = array_keys($condicao);
        $contarCondCampos = count($pegarCondCampos);
        $pegarCondValores = array_values($condicao);

        $sql = "SELECT $pegarValores FROM $tabela WHERE ";
        foreach($pegarCondCampos as $campoCondicao){
            $sql .= $campoCondicao." = ? AND ";
        }
        $sql = substr_replace($sql, "", -5, 5);

        foreach($pegarCondValores as $condValores){
            $dadosExec[] = $condValores;
        }
        if($order){$sql .= " ORDER BY $order";}
        $this->conexao = self::conn()->prepare($sql);
        $this->conexao->execute($dadosExec);
        return $this->conexao;
    }
}// Fim da seleção dinâmica


public function listar(){ 
    $lista = $this->conexao->fetchAll(); 
    return $lista; 
}// Fim do Listar


//metodo para envio de emails junto ao phpmailer 
public function sendMail($subject, $msg, $from, $nomefrom, $destino, $nomedestino){

    require_once "mailer/class.phpmailer.php"; 

    $mail = new PHPMailer();//instancia a classe PHPMailer
    $mail->isSMTP();//habilita envio smtp
    $mail->SMTPAuth = true;//autentico o envio smtp
    // $mail->Host = 'smtp.bol.com.br'; -> PADRÃO
    $mail->Host = 'smtp.gmail.com';

    $mail->Port = '587'; // Opções: porta 25, 465 ou 587
    // Porta 465 (SSL exigido) | Porta 587 (TLS exigido) | Porta 25 (TLS NÃO exigido)

    //começar o envio do email
    $mail->Username = '[email protected]';
    $mail->Password = 'Mara08dema9281';
    $mail->From = $from;//email de quem envia
    @$mail->FromName = $namefrom;//nome de quem envia
    $mail->isHTML(true);//seta que é html o email
    $mail->Subject = utf8_decode($subject);
    $mail->Body = utf8_decode($msg);//corpo da mensagem
    $mail->AddAddress($destino, utf8_decode($nomedestino));//seto o destino do email

    if($mail->Send()){
        return true;
    }else{
        return false;
    }
} // Fim do PHP MAILER


function upload($tmp, $name, $nome, $larguraP, $pasta){

    /*$ext = end(explode('.', $name)); ---- estava assim */
    $dados = explode('.', $name);
    $ext = end($dados);
    if($ext=='jpg' || $ext == 'JPG' || $ext == 'jpeg' || $ext == 'JPEG'){
            $img = imagecreatefromjpeg($tmp);
    }elseif($ext == 'png'){
            $img = imagecreatefrompng($tmp);
    }elseif($ext == 'gif'){
            $img = imagecreatefromgif($tmp);
    }

    list($larg, $alt) = getimagesize($tmp);
    $x = $larg;
    $y = $alt;
    $largura = ($x>$larguraP) ? $larguraP : $x;
    $altura = ($largura*$y)/$x;

    if($altura>$larguraP){
            $altura = $larguraP;
            $largura = ($altura*$x)/$y;
    }
    $nova = imagecreatetruecolor($largura, $altura);
    imagecopyresampled($nova, $img, 0,0,0,0, $largura, $altura, $x, $y);

    imagejpeg($nova, $pasta.$nome);
    imagedestroy($img);
    imagedestroy($nova);
    return (file_exists($pasta.$nome)) ? true : false;
}// Fim do upload(função para cortar a imagem)
}

<h1 class="title">Cadastrar novo Produto</h1>
<?php
if(isset($_POST['acao']) && $_POST['acao'] == 'cadastrar'):
include_once "inc/slug.php";
$img_padrao = $_FILES['img_padrao'];
$titulo = strip_tags(filter_input(INPUT_POST, 'titulo'));
// Aqui segue a chamada da função
$slug = slugify($titulo);
$categoria = $_POST['categoria'];
$subcategoria = $_POST['subcategoria'];

$val_anterior = $_POST['valAnterior'];
$val_atual = $_POST['valAtual'];
$descricao = htmlentities($_POST['descricao'], ENT_QUOTES);
$peso = strip_tags(filter_input(INPUT_POST, 'peso'));
$qtdEstoque = strip_tags(filter_input(INPUT_POST, 'qtdEstoque'));

$verificar_slug = BD::conn()->prepare("SELECT id FROM `loja_produtos` WHERE slug = ?");
$verificar_slug->execute(array($slug));
if($verificar_slug->rowCount() > 0){
    $slug .= $verificar_slug->rowCount();   
}

$val->set($titulo, 'Titulo')->obrigatorio();
$val->set($categoria, 'Categoria')->obrigatorio();
$val->set($subcategoria, 'Subcategoria')->obrigatorio();
$val->set($val_atual, 'Valor Atual')->obrigatorio();
$val->set($descricao, 'Descrição')->obrigatorio();
$val->set($peso, 'Peso')->obrigatorio();
$val->set($qtdEstoque, 'Quantidade em Estoque')->obrigatorio();

if(!$val->validar()){
    $erro = $val->getErro();
    echo '<div class="erros">Erro: '.$erro[0].'</div>';
}elseif($img_padrao['error'] == '4'){
    echo '<div class="erros">Informe uma imagem padrão para o produto!</div>';

}else{

$nomeImg = md5(uniqid(rand(), true)).$img_padrao['name'];
$site->upload($img_padrao['tmp_name'], $img_padrao['name'], $nomeImg, '350', '../../produtos/');
$now = date('Y-m-d H:i:s'); 

$campos = array('img_padrao' => $nomeImg, 
                'titulo' => $titulo, 
                'slug' => $slug, 
                'categoria' => $categoria, 
                'subcategoria' => $subcategoria, 
                'valor_anterior' => $val_anterior, 
                'valor_atual' => $val_atual, 
                'descricao' => $descricao, 
                'peso' => $peso, 
                'estoque' => $qtdEstoque, 
                'qtdVendidos' => 0, 
                'data' => $now);

    if($site->inserir('loja_produtos', $dados)){
        $_SESSION['ultimoId'] = BD::conn()->lastInsertId();
        header("Location: index.php?pagina=passo2");
    }                           
}// Fim do Validar

endif;
?>
<div id="formularios">

<form action="" method="post" enctype="multipart/form-data">
    <label class="img">
        <span class="title">Imagem Padrão</span>
        <input type="file" name="img_padrao" />
    </label>

    <label>
        <span class="title">Título do Produto</span>
        <input type="text" name="titulo" class="titulo" />
    </label>

    <div class="fix">
        <label>
            <span class="title">Escolha a categoria</span>
            <select name="categoria">
                <option value="" selected="selected">Selecione...</option>
                <?php
                    $pegar_categorias = BD::conn()->prepare("SELECT * FROM `loja_categorias` ORDER BY id DESC");
                    $pegar_categorias->execute();
                    while($cat = $pegar_categorias->fetchObject()){                 
                ?>
                <option value="<?php echo $cat->slug; ?>"><?php echo $cat->titulo; ?></option>

                <?php } ?>
            </select>
        </label>

        <label>
            <span class="title">Escolha a subcategoria</span>
            <select name="subcategoria">
                <option value="" selected="selected">Selecione...</option>
            </select>
        </label>
    </div><!-- fix -->


    <div class="fix">
        <label>
            <span class="title">Valor Anterior</span>
            <input type="text" name="valAnterior" id="preco" class="valores" />
        </label>

        <label>
            <span class="title">Valor Atual</span>
            <input type="text" name="valAtual" id="preco1" class="valores" />
        </label>
    </div><!-- fix -->


    <label>
        <span class="title">Descreva as características do Produto</span>
        <textarea name="descricao" cols="30" rows="5" id="tiny"></textarea>
    </label>


    <div class="fix">
        <label>
            <span class="title">Peso do Produto(Ex: 0.200 = 200 gramas)</span>
            <input type="text" name="peso" class="peso-qtd" />
        </label>

        <label>
            <span class="title">Quantidade em Estoque</span>
            <input type="text" name="qtdEstoque" class="peso-qtd" />
        </label>
    </div><!-- fix -->


    <input type="hidden" name="acao" value="cadastrar" />
    <input type="submit" value="Próximo Passo" class="btn" />
</form>   

  • Could you highlight what the line is? basically the value of the variable is empty.

1 answer

0


The error says that an array was expected to put a null has been passed to function array_keys(). The beginning of the problem seems to be on this line:

$campos = array('img_padrao' => $nomeImg, 
            'titulo' => $titulo, 
            'slug' => $slug, 
            //... elementos omitidos
            'data' => $now);

if($site->inserir('loja_produtos', $dados)){

There is no variable $dados who has the information to be entered is $campos.

You can improve the error handling by checking if the input is an array and has elements otherwise cancels the function output.

Add the following lines at the beginning of the function:

public function inserir($tabela, $dados){
   if(!is_array($dados) || empty($dados)){
      return array('error' => true, 'msg' => 'dados em branco';
   }

Note that the return is an array in case of failure if you want to simplify can return a false only.

  • I’ll check again, if I missed something... to in doubt... but, thanks for enqto... I return with the answer!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.