Warning: array_keys () expects parameter 1 to be array, null given in [closed]

2

How do I resolve this?

  

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   online 83

     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>   

    
asked by anonymous 26.10.2017 / 19:57

1 answer

1

The error says that an array was expected because a null was 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 insert is $campos .

It can improve the error handling by checking if the input is an array and has otherwise elements cancels the function's excution.

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 return is an array on failure if you want to simplify it can return a false only.

    
26.10.2017 / 20:09