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");
}
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.– Woss
To mount the array I declared as follows
$msg_erro = array()
and to include new elementsarray_push($msg_erro, "string qualquer");
. I’m pretty sure I’m missing at some point, but I haven’t identified which.– Yuri Freitas
So put the code in the question we help you.
– Woss
$_SESSION['msg_cadastro_erro'][] = $msg_erro
, why are those brackets[]
?– Woss
Just a hint: the variable
$erro
is unnecessary. Whenever you make aarray_push
you do$erro = true
. Ultimately the value of$erro
will always be the same ascount($msg_erro) > 0
, or as in PHP an empty array is falsy you could replaceif (!erro)
forif ($msg_erro)
.– fernandosavio
And in the documentation of
array_push
says it’s the same thing as running$array[] = $x;
. Then I would usearray_push
only if you have to add more than one elements at the same time in the array, thus avoiding an unnecessary function call.– fernandosavio
@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!– Yuri Freitas
Ah, @fernandosavio thanks for the tips, I’ll be making these corrections!
– Yuri Freitas
Opa, remembering that change
array_push
for$arr[] = $x
brings benefits, but it is purely a matter of opinion. : D– fernandosavio