Display array elements without the key

Asked

Viewed 331 times

1

Hello, I have a small "problem". I am trying to iterate an array session through a foreach, but it always returns only one result. So I used a var_dump() and the result was this:

array (size=1)
  0 => 
    array (size=3)
      0 => string 'Por favor, informe um CNPJ válido.' (length=35)
      1 => string 'Por favor, informe um telefone válido.' (length=39)
      2 => string 'Por favor, informe um celular válido.' (length=38)

To add elements to the array, I am using the push() array and for the display I used this loop:

foreach($_SESSION['msg_cadastro_erro'] as $key => $value) {
     echo $value[$key];
}

The code:

<?php
include('conexao.php');

session_start();

$erro = false;
$msg_erro = array();

function anti_sql_injection($string)
{
    include('conexao.php');
    $string = stripslashes($string);
    $string = strip_tags($string);
    $string = mysqli_real_escape_string($conn, $string);
    return $string;
}

if (isset($_POST['salvar_cliente'])) {

    if (isset($_POST['cliente']) && !empty($_POST['cliente'])) {
        $cliente = anti_sql_injection(($_POST['cliente']));
    } else {
        $erro = true;
        array_push($msg_erro, "Por favor, informe um cliente.");
    }
    if (isset($_POST['fantasia']) && !empty($_POST['cliente'])) {
        $fantasia = anti_sql_injection(($_POST['fantasia']));
    } else {
        $fantasia = "";
    }
    if (isset($_POST['cnpj']) && !empty($_POST['cnpj'])) {
        $cnpj = anti_sql_injection(($_POST['cnpj']));
    } else {
        $erro = true;
        array_push($msg_erro, "Por favor, informe um CNPJ válido.");
    }
    if (isset($_POST['ie']) && !empty($_POST['cliente'])) {
        $ie = anti_sql_injection(($_POST['ie']));
    } else {
        $ie = "";
    }
    if (isset($_POST['rua']) && !empty($_POST['rua'])) {
        $rua = anti_sql_injection(($_POST['rua']));
    } else {
        $erro = true;
        array_push($msg_erro, "Por favor, informe uma rua válida");
    }
    if (isset($_POST['numero']) && !empty($_POST['numero'])) {
        $numero = anti_sql_injection(($_POST['numero']));
    } else {
        $erro = true;
        array_push($msg_erro, "Por favor, informe um número válido.");
    }
    if (isset($_POST['bairro']) && !empty($_POST['bairro'])) {
        $bairro = anti_sql_injection(($_POST['bairro']));
    } else {
        $erro = true;
        array_push($msg_erro, "Por favor, informe um bairro válido.");
    }
    if (isset($_POST['estado']) && !empty($_POST['estado'])) {
        $estado = anti_sql_injection(($_POST['estado']));
    } else {
        $erro = true;
        array_push($msg_erro, "Por favor, informe um estado válido.");
    }
    if (isset($_POST['cidade']) && !empty($_POST['cidade'])) {
        $cidade = anti_sql_injection(($_POST['cidade']));
    } else {
        $erro = true;
        array_push($msg_erro, "Por favor, informe uma cidade válida.");
    }
    if (isset($_POST['cep']) && !empty($_POST['cep'])) {
        $cep = anti_sql_injection(($_POST['cep']));
    } else {
        $erro = true;
        array_push($msg_erro, "Por favor, informe um CEP válido.");
    }
    if (isset($_POST['uf']) && !empty($_POST['uf'])) {
        $uf = anti_sql_injection(($_POST['uf']));
    } else {
        $erro = true;
        array_push($msg_erro, "Por favor, informe uma UF válida.");
    }
    if (isset($_POST['telefone']) && !empty($_POST['telefone'])) {
        $telefone = anti_sql_injection(($_POST['telefone']));
    } else {
        $erro = true;
        array_push($msg_erro, "Por favor, informe um telefone válido.");
    }
    if (isset($_POST['celular']) && !empty($_POST['celular'])) {
        $celular = anti_sql_injection(($_POST['celular']));
    } else {
        $erro = true;
        array_push($msg_erro, "Por favor, informe um celular válido.");
    }
    if (isset($_POST['email']) && !empty($_POST['email'])) {
        $v_email = anti_sql_injection(($_POST['email']));
        if(filter_var($v_email, FILTER_VALIDATE_EMAIL)) {
            $email = $v_email;
        } else {
            $erro = true;
            array_push($msg_erro, "Por favor, informe um e-mail válido.");
        }
    } else {
        $erro = true;
        array_push($msg_erro, "Por favor, informe um e-mail válido.");
    }
    if (isset($_POST['senha']) && !empty($_POST['senha'])) {
        $senha = anti_sql_injection(($_POST['senha']));
    } else {
        $erro = true;
        array_push($msg_erro, "Por favor, informe uma cidade válida.");
    }

    if (!$erro) {

        $sql = "INSERT INTO clientes (cnpj, ie, cliente, fantasia, rua, numero, bairro, estado, cidade, uf, cep, telefone, celular, email, senha) VALUES ('$cnpj', '$ie', '$cliente', '$fantasia', '$rua', '$numero', '$bairro', '$estado', '$cidade', '$uf', '$cep', '$telefone', '$celular', '$email', '$senha')";
        $result = mysqli_query($conn, $sql);

        if ($result) {
            $_SESSION['msg_cadastro_sucesso'] = "Cliente cadastrado com sucesso";
            header("Location: ../painel/clientes.php");
        } else {
            $_SESSION['msg_cadastro_erro'] = "Ocorreu um erro inexperado. Contate o desenvolvedor." .mysqli_error($conn);
            header("Location: ../painel/clientes.php");
        }
    } else {
        $_SESSION['msg_cadastro_erro'][] = $msg_erro;
        header("Location: ../painel/clientes.php");
    }
  • 1

    It looks like you built the array different than intended. What you want to iterate is $_SESSION['msg_cadastro_erro'][0], but it will be better to fix the shape that mounts the array and leave it in the desired form.

  • To mount the array I declared as follows $msg_erro = array() and to include new elements array_push($msg_erro, "string qualquer");. I’m pretty sure I’m missing at some point, but I haven’t identified which.

  • 1

    So put the code in the question we help you.

  • $_SESSION['msg_cadastro_erro'][] = $msg_erro, why are those brackets []?

  • Just a hint: the variable $erro is unnecessary. Whenever you make a array_push you do $erro = true. Ultimately the value of $erro will always be the same as count($msg_erro) > 0, or as in PHP an empty array is falsy you could replace if (!erro) for if ($msg_erro).

  • And in the documentation of array_push says it’s the same thing as running $array[] = $x;. Then I would use array_push only if you have to add more than one elements at the same time in the array, thus avoiding an unnecessary function call.

  • @Andersoncarloswoss That’s exactly what it was. I removed the brackets and fixed the foreach and it worked as I wished. Thanks! @fernandosavio Yes! I had already consulted the PHP documentation, previously my code was using $array[], but in my attempts to fix the code, I changed it. Thanks!

  • Ah, @fernandosavio thanks for the tips, I’ll be making these corrections!

  • Opa, remembering that change array_push for $arr[] = $x brings benefits, but it is purely a matter of opinion. : D

Show 4 more comments
No answers

Browser other questions tagged

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