Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola Amigos estou com dificuldade em fazer com que o script abaixo registre somente 1 registro na tabela.
Tenho uma lista com checkbox e quando seleciono os check box executo essa fuction reservar, porem quando é executa no banco de dado está duplicando a informação, parece que ele está fazendo 2 vezes o insert.
Alguem sabe uma solução ou possivel problema nesse script? Pois estou tentando de varias foras e não ta indo!!
function reservar()
{
// PEGO O USUARIO LOGADO
session_start();
$idUser = $_SESSION["idUser"];
$nomeLogin = $_SESSION["nomeLogin"];
include'lib/conn.php';
$check = $_POST['check'];
foreach ($check as $id => $valor) {
echo "id da linha para reservar " . $id . "<br />";
//echo "Valor para reservar " . $valor . "<br />";
$sql = "INSERT INTO tab_hist_diario_bordo (id_usuario, id_status_diario_bordo,dta_hist_diario_bordo,id_grupo)
VALUES ('$idUser','$valor', now(),'$id')";
$query = mysql_query($sql) or die ("Erro na alteração do Step no Banco de Dados". mysql_error());
echo "
<script type=\"text/javascript\">
alert('Grupo Empresa reservado com sucesso!');
window.location.href=[ 'principal.php?pag=listaDiarioBordo'];
</script>";
}
}Freisleben,
Existe um erro de lógica também no seu código.
Dentro do seu loop você está dando para cada iteração um echo com um script Javascript que executará um alert, o alert deve ficar fora do loop, assim como o redirecionamento.
Oi João,
Realmente existia esse erro do echo dentro do foreach que já corrigi, porem não estou conseguindo identificar o motivo de na hora que executo essa function está sendo duplicando o registro no banco.
Dei um print_r() o resultado é Array ( [2] => 1 ), neste caso eu flequei a 2º linha da minha lista.
function reservar()
{
// PEGO O USUARIO LOGADO
session_start();
$idUser = $_SESSION["idUser"];
$nomeLogin = $_SESSION["nomeLogin"];
include'lib/conn.php';
$check = $_POST['check'];
foreach ($check as $id => $valor) {
echo "id da linha para reservar " . $id . "<br />";
//echo "Valor para reservar " . $valor . "<br />";
$sql = "INSERT INTO tab_hist_diario_bordo (id_usuario, id_status_diario_bordo,dta_hist_diario_bordo,id_grupo)
VALUES ('$idUser','$valor', now(),'$id')";
$query = mysql_query($sql) or die ("Erro na alteração do Step no Banco de Dados". mysql_error());
}
echo "
<script type=\"text/javascript\">
alert('Grupo Empresa reservado com sucesso!');
window.location.href=[ 'principal.php?pag=listaDiarioBordo'];
</script>";
}Se não há valor duplicado no array $check, por um acaso você não está chamando a função reservar dentro de algum laço?
Alguma coisa está fazendo com que sua query execute mais de uma vez com o mesmo valor.
Ou é o array com registro duplicado ou a função reservar está sendo chamada mais de uma vez para o mesmo valor.
Então executo somente uma fez!! E não consigo achar o erro de jeito nenhum.
Trecho onde seleciono check
<td><input type=\"checkbox\" NAME=\"check[$id_grupo]\" VALUE=\"1\"></td>
neste formulario tenho varios botão, por isso usso função em javascript.
function doPost(formName, actionName)
{
var hiddenControl = document.getElementById('action');
var theForm = document.getElementById(formName);
hiddenControl.value = actionName;
theForm.submit();
}// PEGO O USUARIO LOGADO
session_start();
$idUser = $_SESSION["idUser"];
$nomeLogin = $_SESSION["nomeLogin"];
$check = $_POST['check'];
if (empty($check)) {
echo "
<script type=\"text/javascript\">
alert('É obrigatorio selecionar um Grupo Empresa');
history.go(-1);
</script>";
}
$funcao = $_REQUEST["action"];
if (function_exists($funcao)) { call_user_func($funcao);
}
function reservar()// PEGO O USUARIO LOGADO
session_start();
$idUser = $_SESSION["idUser"];
$nomeLogin = $_SESSION["nomeLogin"];
include'lib/conn.php';
$check = $_POST['check'];
foreach ($check as $id => $valor) {
echo "id da linha para reservar " . $id . "<br />";
//echo "Valor para reservar " . $valor . "<br />";
$sql = "INSERT INTO tab_hist_diario_bordo (id_usuario, id_status_diario_bordo,dta_hist_diario_bordo,id_grupo)
VALUES ('$idUser','$valor', now(),'$id')";
$query = mysql_query($sql) or die ("Erro na alteração do Step no Banco de Dados". mysql_error());
echo $query;
}
echo "
<script type=\"text/javascript\">
alert('Grupo Empresa reservado com sucesso!');
window.location.href=[ 'principal.php?pag=listaDiarioBordo'];
</script>";Olha, tenho a impressão que, ao clicar no botão, o formulário está sendo submetido 2 vezes.
Tente tirar esta linha
theForm.submit();
Veja se resolve
Carlos Eduardo
Matias,
Muito obrigado realmente a função também submetia o formulario, com isso registra 2 vezes no banco.
Obrigado, problema resolvido
não entendi.
o título do seu tópico é sobre o foreach. vocÊ que entender como esse loop funciona? se sim, veja:
http://br2.php.net/manual/en/control-structures.foreach.php
Quanto a cadastrar duas vezes, verifique se o array $check não está com registros duplicados. DÊum print_r() nele para verificar
http://www.php.net/print_r