Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho a seguinte estrutura de arrays abaixo
[txtData] => Array
(
[0] => 26/04/2010
[1] => 27/04/2010
[2] => 26/04/2010
)
[horaInicio] => Array
(
[0] => 07:00
[1] => 15:00
[2] => 07:00
)
[horaFim] => Array
(
[0] => 10:00
[1] => 18:00
[2] => 10:00
)
Preciso fazer algumas validações antes de persistir os dados. O input txtData tem na posição 0 e 2 a mesma data sendo identicas, preciso testar se no array tem valores identicos para assim validar o horário de inicio e fim. Uma vez que a data é 26/04 não posso permitir cadastrar o mesmo horário inicio e fim, como exemplo:na posicão 0 -> 26/04/2010 => 07:00 as 10:00 e na posicão 2 -> 26/04/2010 => 07:00 as 10:00 só poderia seguir se os horários não fosse diferentes, além de testar se o horário inicio não for maior que o horário fim e proibir entre 12:00 as 14:00.Valeu.>
$registros = sizeof($array);
for($i = 0; $i < $registros; $i++)
foreach($array as $index=>$value)
if($i !== $index && $array[$i] === $array[$index])
die("Índices idênticos em {$i} e {$index}.");
basta adaptar à sua necessidade.
Valeu d+ Evandro deu certinho para o que eu precisava.
Aproveitando sabe indicar um solução para eu manter os input's que adiciono de forma dinâmica(jquery) no form. Ocorre o seguinte após o post dos dados se algum deles não passa pela validação eu retorno para o form, mais os input's adicionados dinâmicamente(jquery) não estão mais no local, precisava ter eles no local para que o usuário veja qual deles não passou pela validação se é que você me entende.
Abraço.
O jeito mais prático seria fazer a validação em tempo real com AJAX
você só libera o botão [submit] após todos os dados serem validados no servidor pelo controlador AJAX
Outra maneira é, no php, pegar o total de campos recebidos e reescrevê-los via PHP informando aonde está o erro
<form action="valida.php" method="post">
<fieldset>
<legend>Cadastro de alunos</legend>
<div id="lista_alunos">
<label for="aluno_1">Nome: </label><input type="text" id="aluno_1" name="alunos[]" />
</div>
<button id="novoaluno">Adicionar novo aluno</button>
<button type="submit">Enviar lista</button>
</fieldset>
</form>
window.onload = function(){
document.getElementById('novoaluno').onclick = function(){
var lista = document.getElementById('lista_alunos');
var totalInputs = lista.getElementsByTagName('input');
var novoInput = document.createElement('input');
var novoLabel = document.createElement('label');
var inputId = "aluno_" + totalInputs.length;
novoLabel.for = inputId;
novoInput.id = inputId;
novoInput.type = 'text';
novoInput.name = 'alunos[]';
lista.appendChild(novoLabel);
lista.appendChild(novoInput);
}
}
valida.php
<?php foreach($_POST['alunos'] as $index=>$aluno) if(preg_match('/\d/',$aluno)) nomeInvalido($index);
function nomeInvalido($n){
$html = '';
$ttlAlunos = sizeof($_POST['alunos']);
for($i = 0; $i < $ttlAlunos; $i++){
$html .= "<label for=\"aluno_{$i}\"><input type=\"text\" id=\"aluno_{$i}\" name=\"alunos[]\">".($i == $n)? '<span class="erro">Nome do aluno contém dígitos.</span>':'';
}
echo $html;
}
Creio que por você não ter tido problemas com a função anterior, não terá problemas em adaptar este pedaço de código também.
Boa sorte, qualquer dúvida volte.
basta adaptar à sua necessidade.