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

Array to String Conversion

Boa tarde, não consigo resolver um upload de foto. Alguém poderia me mostrar onde estou errando?

Notice: Array to string conversion in C:\Bitnami\wampstack-5.6.19-0\apache2\htdocs\casamento\noivosDAO.php on line 12

DAO:

function insereNoivos ($noivos) {

  $query = "insert into noivos (nome1, sobrenome1, email, nome2, sobrenome2,
              telefone , rua, numero, cep, cidade, foto) values ('{$noivos->getNome1()}', '{$noivos->getSobrenome1()}', '{$noivos->getEmail()}', '{$noivos->getNome2()}','{$noivos->getSobrenome2()}', {$noivos->getTelefone()}, '{$noivos->getRua()}', '{$noivos->getNumero()}', '{$noivos->getCep()}', '{$noivos->getCidade()}', '{$noivos->getFoto()}')";

  return mysqli_query($this->conexao, $query);
}

Adiciona:

<?php
$noivos = new Noivos();
$noivos->setNome1($_POST["nome1"]) ;
$noivos->setSobrenome1($_POST["sobrenome1"]);
$noivos->setEmail($_POST["email"]);
$noivos->setNome2($_POST["nome2"]);
$noivos->setSobrenome2($_POST["sobrenome2"]);
$noivos->setTelefone($_POST["telefone"]);
$noivos->setRua($_POST["rua"]);
$noivos->setNumero($_POST["numero"]);
$noivos->setCep($_POST["cep"]);
$noivos->setCidade($_POST["cidade"]);
$noivos->setFoto($_FILES["foto"]);

// Se a foto estiver sido selecionada
  if (!empty($foto["name"])) {
 // Se não houver nenhum erro
    if (count($error) == 0) {

      // Pega extensão da imagem
      preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $foto["name"], $ext);

          // Gera um nome único para a imagem
          $nome_imagem = md5(uniqid(time())) . "." . $ext[1];

          // Caminho de onde ficará a imagem
          $caminho_imagem = "assets/img/" . $nome_imagem;

      // Faz o upload da imagem para seu respectivo caminho
      move_uploaded_file($foto["tmp_name"], $caminho_imagem);

    }

   }

$dao = new noivosDAO($conexao);
if ($dao->insereNoivos($noivos)) {
?>
4 respostas
solução!

O problema deve estar aqui:

$noivos->setFoto($_FILES["foto"]);

O objeto $_FILES é um array. Pelo código, o que você quer é guardar o nome da imagem, que é uma string.

A resposta depende de como você quer gravar, se apenas o nome, ou o caminho completo. Você deve eliminar esta linha e colocar ela neste trecho de código:

 // Gera um nome único para a imagem
          $nome_imagem = md5(uniqid(time())) . "." . $ext[1];

          // Caminho de onde ficará a imagem
          $caminho_imagem = "assets/img/" . $nome_imagem;


   //Opcao 1 - gravar apenas o nome do arquivo
    $noivos->setFoto(  $nome_imagem);

//Opcao 2 - gravar o caminho completo
   $noivos->setFoto(  $caminho_imagem);

Creio que seria melhor a opção 1, gravar apenas o nome do arquivo, assim se a ordem das pastas mudar no futuro não precisa arrumar o banco de dados.

Daniel, muito obrigado. Funcionou não aparece mais o erro, perfeito!!! Mas não consigo nem inserir o nome do arquivo no BD nem enviar a foto para a pasta img. Estou quebrando a cabeça o dia todo e não acho o erro poderia me ajudar? Esse é o erro:

Notice: Undefined variable: nome1 in C:\Bitnami\wampstack-5.6.19-0\apache2\htdocs\casamento\adiciona-casal.php on line 85 não foi adicionado, por favor volte a pagina de cadastro e verifique o erro.

Voltar

linha85:

O Casal <?= $nome1; ?> não foi adicionado, por favor volte a pagina de cadastro e verifique o erro.

Estes são os passos que fiz: 1)Escolhi a opção 1 como me sugeriu. 2)No BD, na table noivos está o campo 'foto ' VARCHAR 60 parece estar ok. 3) A classe noivos fiz padrão com private $foto; E o arquivo adiciona-casal onde fiz a correção que me ensinou segue abaixo:

<?php require_once ("conecta.php");?>
<?php require_once ("noivosDAO.php");?>
<?php require_once ("noivos.php");?>

<?php
$noivos = new Noivos();
$noivos->setNome1($_POST["nome1"]) ;
$noivos->setSobrenome1($_POST["sobrenome1"]);
$noivos->setEmail($_POST["email"]);
$noivos->setNome2($_POST["nome2"]);
$noivos->setSobrenome2($_POST["sobrenome2"]);
$noivos->setTelefone($_POST["telefone"]);
$noivos->setRua($_POST["rua"]);
$noivos->setNumero($_POST["numero"]);
$noivos->setCep($_POST["cep"]);
$noivos->setCidade($_POST["cidade"]);

// Se a foto estiver sido selecionada
  if (!empty($foto["name"])) {

    // Largura máxima em pixels
    $largura = 150;
    // Altura máxima em pixels
    $altura = 180;
    // Tamanho máximo do arquivo em bytes
    $tamanho = 1000;

      // Verifica se o arquivo é uma imagem
      if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $foto["type"])){
         $error[1] = "Isso não é uma imagem.";
      } 

    // Pega as dimensões da imagem
    $dimensoes = getimagesize($foto["tmp_name"]);

    // Verifica se a largura da imagem é maior que a largura permitida
    if($dimensoes[0] > $largura) {
      $error[2] = "A largura da imagem não deve ultrapassar ".$largura." pixels";
    }

    // Verifica se a altura da imagem é maior que a altura permitida
    if($dimensoes[1] > $altura) {
      $error[3] = "Altura da imagem não deve ultrapassar ".$altura." pixels";
    }

    // Verifica se o tamanho da imagem é maior que o tamanho permitido
    if($arquivo["size"] > $tamanho) {
        $error[4] = "A imagem deve ter no máximo ".$tamanho." bytes";
    }

    // Se não houver nenhum erro
    if (count($error) == 0) {

      // Pega extensão da imagem
      preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $foto["name"], $ext);

          // Gera um nome único para a imagem
          $nome_imagem = md5(uniqid(time())) . "." . $ext[1];

          // Caminho de onde ficará a imagem
          $caminho_imagem = "assets/img/" . $nome_imagem;

          //Opcao 1 - gravar apenas o nome do arquivo
          $noivos->setFoto(  $nome_imagem);

      // Faz o upload da imagem para seu respectivo caminho
      move_uploaded_file($foto["tmp_name"], $caminho_imagem);

    }

   }

$dao = new noivosDAO($conexao);
if ($dao->insereNoivos($noivos)) {
?>
          <p class="text-sucess">
           O Casal<?= $nome1 ?> + <?= $nome2 ?>   adicionado com sucesso!</p>
          <script language="JavaScript"> 
window.location="escolha-lista.php"; 
</script> 
            <?php
             }else{
               $msg = mysqli_error($conexao);
            ?>
      **linha85**:      <p class="text-danger">O Casal <?= $nome1; ?> não foi adicionado, por favor volte a pagina de cadastro e verifique o erro.</p>
            <a href="cadastro-noivos.php" button type="button" class="btn btn-info btn-fill btn-l">Voltar <i class="fa fa-chevron-right"></i></button></a>
           <?php
          }
?>

arquivo noivosDAO

<?php
class NoivosDAO
{
    private $conexao;
    function __construct($conexao){
        $this->conexao = $conexao;
    }

function insereNoivos ($noivos) {

  $query = "insert into noivos (nome1, sobrenome1, email, nome2, sobrenome2,
              telefone , rua, numero, cep, cidade, foto) values ('{$noivos->getNome1()}', '{$noivos->getSobrenome1()}', '{$noivos->getEmail()}', '{$noivos->getNome2()}','{$noivos->getSobrenome2()}', {$noivos->getTelefone()}, '{$noivos->getRua()}', {$noivos->getNumero()}, {$noivos->getCep()}, '{$noivos->getCidade()}', '{$noivos->getFoto()}')";

  return mysqli_query($this->conexao, $query);
}

function buscanoivos($id) {
$query = "select n.*, from noivos where n.nome1 = {$nome1}";
$resultado = mysqli_query($conexao, $query);
$array = mysqli_fetch_assoc($resultado);

$noivos = new Noivos();
$noivos->setId( $array['id'] );
$noivos->setNome1( $array["nome1"]) ;
$noivos->setSobrenome1( $array["sobrenome1"]);
$noivos->setEmail( $array["email"]);
$noivos->setNome2( $array["nome2"]);
$noivos->setSobrenome2( $array["sobrenome2"]);
$noivos->setTelefone( $array["telefone"]);
$noivos->setRua( $array["rua"]);
$noivos->setNumero( $array["numero"]);
$noivos->setCep( $array["cep"]);
$noivos->setCidade( $array["cidade"]);
$noivos->setFoto( $array["foto"]);

return $noivos;
}

}

Você não possui nenhuma variável chamada "$nome1". Pelo código, você tem um POST com este nome, então a mensagem da linha 85 seria:

  <p class="text-danger">O Casal <?= $_POST["nome1"]; ?> não foi adicionado, por favor volte a pagina de cadastro e verifique o erro.</p>

Como ele caiu na parte do erro, não gravou no banco. Precisa testar para ver o que houve. Você pode imprimir a mensagem de erro que você capturou acima da linha 85:


$msg = mysqli_error($conexao);
echo ($msg);

O ideal seria imprimir a query que se tentou gravar:

function insereNoivos ($noivos) {

  $query = "insert into noivos (nome1, sobrenome1, email, nome2, sobrenome2,
              telefone , rua, numero, cep, cidade, foto) values ('{$noivos->getNome1()}', '{$noivos->getSobrenome1()}', '{$noivos->getEmail()}', '{$noivos->getNome2()}','{$noivos->getSobrenome2()}', {$noivos->getTelefone()}, '{$noivos->getRua()}', {$noivos->getNumero()}, {$noivos->getCep()}, '{$noivos->getCidade()}', '{$noivos->getFoto()}')";

    echo ($query);          

  return mysqli_query($this->conexao, $query);
}

Desta forma você confere se todos os campos foram enviados. Em caso positivo, tem que ser se o conteúdo postado é compatível com o tipo de dados do banco de dados, assim como o tamanho dos campos.

Muito obrigado Daniel, verifiquei e corrigi os erros, ufa!! mas ainda estou errando podes me ajudar?

erro: não está enviando o nome da foto para o BD (não está recebendo os valores) e também não envia para a pasta img a imagem.

Os outros problemas foram resolvidos.

Este é o erro:

insert into noivos (nome1, sobrenome1, email, nome2, sobrenome2, telefone , rua, numero, cep, cidade, foto) values ('Sergio', 'Guerjik', 'superkovalev@gmail.com', 'Marilú','Guerjik', 1533632183, 'JOAO BATISTA ARRUDA', '368', '18550000', 'Boituva', '')
O Casal
Notice: Undefined variable: nome1 in C:\Bitnami\wampstack-5.6.19-0\apache2\htdocs\casamento\adiciona-casal.php on line 77
+ 
Notice: Undefined variable: nome2 in C:\Bitnami\wampstack-5.6.19-0\apache2\htdocs\casamento\adiciona-casal.php on line 77
**adicionado com sucesso!**

Este é o adiciona casal com a alteração que me sugeriu:

<?php require_once ("conecta.php");?>
<?php require_once ("noivosDAO.php");?>
<?php require_once ("noivos.php");?>

<?php
$noivos = new Noivos();
$noivos->setNome1($_POST["nome1"]) ;
$noivos->setSobrenome1($_POST["sobrenome1"]);
$noivos->setEmail($_POST["email"]);
$noivos->setNome2($_POST["nome2"]);
$noivos->setSobrenome2($_POST["sobrenome2"]);
$noivos->setTelefone($_POST["telefone"]);
$noivos->setRua($_POST["rua"]);
$noivos->setNumero($_POST["numero"]);
$noivos->setCep($_POST["cep"]);
$noivos->setCidade($_POST["cidade"]);

// Se a foto estiver sido selecionada
  if (!empty($foto["name"])) {

    // Largura máxima em pixels
    $largura = 150;
    // Altura máxima em pixels
    $altura = 180;
    // Tamanho máximo do arquivo em bytes
    $tamanho = 1000;

      // Verifica se o arquivo é uma imagem
      if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $foto["type"])){
         $error[1] = "Isso não é uma imagem.";
      } 

    // Pega as dimensões da imagem
    $dimensoes = getimagesize($foto["tmp_name"]);

    // Verifica se a largura da imagem é maior que a largura permitida
    if($dimensoes[0] > $largura) {
      $error[2] = "A largura da imagem não deve ultrapassar ".$largura." pixels";
    }

    // Verifica se a altura da imagem é maior que a altura permitida
    if($dimensoes[1] > $altura) {
      $error[3] = "Altura da imagem não deve ultrapassar ".$altura." pixels";
    }

    // Verifica se o tamanho da imagem é maior que o tamanho permitido
    if($arquivo["size"] > $tamanho) {
        $error[4] = "A imagem deve ter no máximo ".$tamanho." bytes";
    }

    // Se não houver nenhum erro
    if (count($error) == 0) {

      // Pega extensão da imagem
      preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $foto["name"], $ext);

          // Gera um nome único para a imagem
          $nome_imagem = md5(uniqid(time())) . "." . $ext[1];

          // Caminho de onde ficará a imagem
          $caminho_imagem = "assets/img/" . $nome_imagem;

          //Opcao 1 - gravar apenas o nome do arquivo
          $noivos->setFoto(  $nome_imagem);

      // Faz o upload da imagem para seu respectivo caminho
      move_uploaded_file($foto["tmp_name"], $caminho_imagem);

    }

   }

$dao = new noivosDAO($conexao);
if ($dao->insereNoivos($noivos)) {
?>
          <p class="text-sucess">
           O Casal<?= $nome1 ?> + <?= $nome2 ?>   adicionado com sucesso!</p>
          <script language="JavaScript"> 
window.location="escolha-lista.php"; 
</script> 
            <?php
             }else{
               $msg = mysqli_error($conexao);
               echo ($msg);
            ?>

            <p class="text-danger">O Casal <?= $nome1; ?> não foi adicionado, por favor volte a pagina de cadastro e verifique o erro.</p>
            <a href="cadastro-noivos.php" button type="button" class="btn btn-info btn-fill btn-l">Voltar <i class="fa fa-chevron-right"></i></button></a>
           <?php
          }
?>

este é o DAO:

<?php
class NoivosDAO
{
    private $conexao;
    function __construct($conexao){
        $this->conexao = $conexao;
    }

    function insereNoivos ($noivos) {

  $query = "insert into noivos (nome1, sobrenome1, email, nome2, sobrenome2,
              telefone , rua, numero, cep, cidade, foto) values ('{$noivos->getNome1()}', '{$noivos->getSobrenome1()}', '{$noivos->getEmail()}', '{$noivos->getNome2()}','{$noivos->getSobrenome2()}', {$noivos->getTelefone()}, '{$noivos->getRua()}', '{$noivos->getNumero()}', '{$noivos->getCep()}', '{$noivos->getCidade()}', '{$noivos->getFoto()}')";

      echo ($query); 

  return mysqli_query($this->conexao, $query);
}

E este são os campos da tabela noivos:

Table: noivos
Columns:
id int(11) AI PK 
nome1 varchar(255) 
sobrenome1 varchar(50) 
email varchar(50) 
nome2 varchar(50) 
sobrenome2 varchar(50) 
telefone varchar(25) 
rua varchar(255) 
numero varchar(10) 
cep varchar(10) 
cidade varchar(30) 
foto varchar(160)