Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera, não consigo fazer uma concatenação de um array no PHP. Vejam só:
Aqui está o input do checkbox que vai gerar o array " 'presenca[] " por meio de POST: Ele está dentro de um While para exibir todas as linhas de uma consulta SQL.
<?php
while($sql = mysql_fetch_array($query))
echo"<input type=checkbox name='presenca[]' value=".$sql['cod'].">";
...
?>
Aqui está o trecho onde ocorre o erro (não é erro de sintaxe).
<?php
for($i = 0; $i < count($_POST['presenca']); $i++){
$sql1 = "INSERT INTO data.table(cod, presenca) values ('".$_POST['presenca'][$i]."', '1')";
echo $sql1."<br>";
}
?>
O problema é que as saídas dos echos ficam: INSERT INTO data.table(cod, presenca) values ('1545
(suponhamos que 1545 seja o valor que realmente é para sair)
O restante da string " ', '1')"; " não sai.
Já testei de várias formas, mas o echo sempre anula tudo que vem depois do $_POST['presenca'][$i]. Também já verifiquei se o array está certinho com os valores, imprimindo-os isoladamente, e está tudo correto. O problema mesmo é na impressão do echo ou na concatenação...
Desculpem-me se me expressei mal, espero que entendam.
Obrigado pela resposta Gabriel Heming.
Consegui resolver da seguinte forma:
Não sei porque, ou que o que ocorre, mas um vetor passado por POST provavelmente tem algum marcador no final de cada posição que sinaliza que acabou o valor.
O que eu tinha que fazer era retirar o valor que eu queria do $_POST['presenca']. Assim: $codigo = substr($_POST['presenca'][$i],0,4);
A função substr extrai um determinado numero de caracteres da string em questão.
Agora minha saída echo está correta:
INSERT INTO data.table(cod, presenca) values ('2441', '1');
Antes ficava:
INSERT INTO data.table(cod, presenca) values ('2441
Bom que resolveu seu problema, mas isso não é um problema do PHP ou da superglobal $_POST. É algo que vem do seu HTML em questão, verifique o que é.
Em alguns casos, um espaço ou quebra de linha fazem diferença no HTML. Como por exemplo dentro do value. Verifique isso.
Quando usa-se da possibilidade de criar array através do HTML, você não pode garantir a ordem e/ou o tipo de chave que será utilizada para o array. O for, é fortemente utilizado para array numéricos ordenados e/ou nos casos aonde você possui precisamente o tamanho do vetor, e um meio garantido de validar o valor existente sem perder referência na chave do vetor. Se, por acaso, não existir uma determinada chave, você terá um sério problema.
Apesar desses casos serem muitos raros, podem acontecer. No lugar de for, utilize foreach, pois ele itera sobre o array indiferente a chave utilizado.
Além de, vetor de checkbox, em relação ao PHP, é algo do tipo: selecionado existe, não selecionado não existe.