Error while uploading photo

3

I tried to apply the instructions to upload photos to the bank with this article .

I have just adapted to the MySQLi extension. The connection code below:

$conecta = new MySQLi = ("localhost", "root", "", "forum-ti-1");

However, the following errors were displayed:

  

Undefined variable error in ... line 32

     

Array to string conversion in ... line 38

     

Undefined variable error in ... line 45

Below is the code:

<?php
include_once('conexao/conexao.php');


if(($_SERVER["REQUEST_METHOD"] == "POST") and ($_POST["editar"])){

    $foto = $_FILES['foto'];
    $nome = $_POST['nome'];
    $login = $_POST['login'];
    $email = $_POST['email'];
    $senha = $_POST['senha'];
    $data_nascimento = $_POST['data_nascimento'];


    if(!empty($foto["name"])){
        $largura = 1600;
        $altura = 1900;
        $tamanho = 500000;
        if(!preg_match("/^image\/(pjpeg|jpeg|png|gif|bmp)$/", $foto["type"])){
       $error[1] = "Isso não é uma imagem.";
    }
        $dimensoes = getimagesize($foto["tmp_name"]);
        if($dimensoes[0] > $largura) {
            $error[2] = "A largura da imagem não deve ultrapassar ".$largura." pixels";
        }
        if($dimensoes[1] > $altura) {
            $error[3] = "Altura da imagem não deve ultrapassar ".$altura." pixels";
        }
        if($foto["size"] > $tamanho) {
        $error[4] = "A imagem deve ter no máximo ".$tamanho." bytes";
        }
        //Linha 32
        if (count($error) == 0) {
            preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $foto["name"], $ext);
            $nome_imagem = md5(uniqid(time())) . "." . $ext[1];
            $caminho_imagem = "photos/" . $nome_imagem;
            move_uploaded_file($foto["tmp_name"], $caminho_imagem);
            //Linha 38
            $sql = $conecta->query("UPTADE usuario SET usuario.foto = '$foto', usuario.nome = '$nome', usuario.login = '$login', usuario.senha = '$senha', usuario.data_nascimento = '$data_nascimento' WHERE usuario.id = 4");


            if ($sql){
                header('location: index.php');
            }   
        }
        //Linha 45
        if (count($error) != 0) {
            foreach ($error as $erro) {
                echo $erro . "<br />";
            }
        } 
    }
}


?>

<!DOCTYPE html>
<html>
   <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></title>
            <link rel="stylesheet" href="css/style.css">
            <script src="js/script.js"></script>
</head>
<body>
    <?php
                include('templates/header.html.php');
    ?>

            <?php

                $query_perfil = "SELECT nome, login, email, senha FROM usuario WHERE id = 4";

                $rs_perfil = $conecta->query($query_perfil);
                        while($lista_perfil = $rs_perfil->fetch_array()){

            ?>


                        <form class="form_profile_user" action="<?php echo $_SERVER['PHP_SELF'] ?>" enctype="multipart/form-data" method="post" style="margin-top: 130px; margin-left: 330px;">
                            <h3>Alterar o Perfil</h3>
                                <label>Foto</label><br>
                                    <input type="file" name="foto"><br><br>
                                <label>Nome:</label>
                                    <input type="text" name="nome" value="<?php echo $lista_perfil['nome']; ?>"><br><br>
                                <label>Login:</label>
                                    <input type="text" name="login" value="<?php echo $lista_perfil['login']; ?>"><br><br>
                                <label>Email:</label>
                                    <input type="email" name="email" value="<?php echo $lista_perfil['email']; ?>"><br><br>
                                <label>Senha:</label>
                                    <input type="password" name="senha" value="<?php echo $lista_perfil['senha']; ?>"><br><br>
                                <label>Data de Nascimento:</label>
                                    <input type="date" name="data_nascimento"><br><br>
                                <input type="submit" value="Confirmar" name="editar">
                                <input type="submit" value="Cancelar" name="cancelar">
                        </form>

            <?php

                        }

            ?>

            <?php
                include('templates/footer.html.php');
    ?>
</body>
</html>

And below is the form:

//Linha32if(count($error)==0){//Linha38$sql=$conecta->query("UPTADE usuario SET usuario.foto = '$foto', usuario.nome = '$nome', usuario.login = '$login', usuario.senha = '$senha', usuario.data_nascimento = '$data_nascimento' WHERE usuario.id = 4");

//Linha 45
if (count($error) != 0) {
    
asked by anonymous 27.05.2015 / 21:12

2 answers

2
  

Array to string conversion in

If the object is to save the name of the image it passes the variable whose name of the already modified image is $nome_imagem , if it is a blob use file_get_content() and throw that value into the database.

$foto = $_FILES['foto'];

//código omitido
 $sql = $conecta->query("UPTADE usuario SET
                            usuario.foto = '$nome_imagem',
                            usuario.nome = '$nome',
                            usuario.login = '$login',
                            usuario.senha = '$senha',
                            usuario.data_nascimento = '$data_nascimento'
                          WHERE usuario.id = 4")

To treat the undefined variable error, set it before the first if as an empty array.

$error = array();
if(!empty($foto["name"])){

Erre happens because $error is only created if it enters some if, if it does not it is evaluated as not created / defined in the line below.

if (count($error) == 0) {
    
28.05.2015 / 00:19
1

I did not do the test ... so I may be wrong and take some negatives .. but I think you could declare this array error before the first if .. and in each case if you can use the array_push .. probably this solves ..

   $error = array();

    if(!empty($foto["name"])){
    $largura = 1600;
    $altura = 1900;
    $tamanho = 500000;
    if(!preg_match("/^image\/(pjpeg|jpeg|png|gif|bmp)$/", $foto["type"])){
   array_push($error, "Isso não é uma imagem.");
}
    $dimensoes = getimagesize($foto["tmp_name"]);
    if($dimensoes[0] > $largura) {
         array_push($error,"A largura da imagem não deve ultrapassar ".$largura." pixels");
    }
    if($dimensoes[1] > $altura) {
        array_push($error,"Altura da imagem não deve ultrapassar ".$altura." pixels");
    }
    if($foto["size"] > $tamanho) {
     array_push($error,"A imagem deve ter no máximo ".$tamanho." bytes");
    }
    
28.05.2015 / 00:25