Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rogério Rodrigues

Limitar insert php

Recommended Posts

Olá Pessoal, sou iniciante no PHP, e preciso muito de uma ajuda!

é o seguinte:

 

Eu Criei um formulário de cadastro,

nele eu criei um Select com varias opções:

<select>

<option> 1</option>

<option> 2</option>

<option> 3</option>

</select>

 

essa opções são categorias, e eu quero limitar o cadastro delas,

tipo, a opção "1", só pode ser cadastrada 2 vezes no banco,

como eu faço isso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde,

 

A mesma categoria duas vezes não vai criar confusão no banco?

 

Posso não estar enxergando o sentido do problema, mas pensei nisso, pois normalmente categorias são únicas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim, na lata, eu diria que você deveria ter uma tabela que controlasse o máximo de cada categoria, relacionando pelo ID da tabela de categorias.

 

Então você na hora de inserir você consultaria se o total de registros é menor que máximo permitido e, se for, insere, se não, bloqueia.

 

Mas eu acho melhor você expor mais detalhes sobre sua intenção pois pode ser que haja outra alternativa mais eficiente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código que escrevi abaixo vai ajudar você, para resumir o código eu selecionei a tabela e contei os registros dela, criei um IF que se a quantidade de registros for igual ou maior que dois retorna o echo a opção não pode ser cadastrada e se a quantidade de registros for menor que dois retorna o echo do else, a opção pode ser cadastrada. Agora basta adaptar ao seu código!

 

 

<?php
$registros = 0;
$sql = mysql_query("SELECT * FROM tabela");
while(mysql_fetch_object($sql)){
$registros++;
}

if($registros >= 2){echo"A opção não pode ser cadastrada!";}
else{echo"A opção pode ser cadastrada!";}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites
Agradeço já pela ajuda que estão dando, o Ner0 deu uma força ai, mais se bem entendie seu código, ele vai contar os registros todas já cadastrados na tabela, eu preciso que ele conte quantos tem de cada categoria e limitar um X numero de vagas para serem cadastradas.
Bom pessoal, vou explicar melhor como é que funciona,
Eu montei um Formulário de Cadastro aqui na minha Faculdade, no qual as pessoa se cadastraram para um evento que ocorrera aqui na instituição, e neste cadastro elas precisam selecionar um Oficina que ela pretendem participar,
porém, como é muita gente, preciso limitar o numero de cadastro de cada Oficina, ou seja, não posso deixar que todo mundo se cadastre na mesma oficina.
vejam o código:
do formulário:
<form name="signupform" method="post" action="signingup.php">

Nome:<input type="text" class="input" name="nome" id />

RA:<input type="text" class="input" name="ra" />

Oficina:
<select class="input2" name="oficina">
  <option value="1oficina">1º Oficina</option>
  <option value="2oficina">2º Oficina</option>
  <option value="3oficina">3º Oficina</option>
  <option value="4oficina">4º Oficina</option>
  <option value="5oficina">5º Oficina</option>
  <option value="6oficina">6º Oficina</option>
</select>

E-mail:<input type="text" class="input" name="email" />
<input type="submit" value="Cadastrar" class="button" />


</form>

 

da página PHP signingup.php :

<?php
$verify = mysql_query("SELECT * FROM usuario");
$row = mysql_num_rows($verify);
if($row <= 29){
$nome=$_POST['nome'];
$ra=$_POST['ra'];
$semestre=$_POST['semestre'];
$oficina=$_POST['oficina'];
$email=$_POST['email'];
$sql = mysql_query("INSERT INTO `usuario` (nome, ra, semestre, oficina, email) VALUES('$nome', '$ra', '$semestre', '$oficina', '$email')");
echo"<center> Cadastro efetuado com Sucesso </center>";
}else {
echo"<center> As incrições já Encerraram </center>";
exit;
}
?>
<?php
echo"<br /> <br />";
$restante = 29 - $row;
echo"<center>Vagas Restantes:  $restante </center>";
?>

 

 

Do jeito que estar aqui, ele conta quantos registro foram criados e se for menor ou igual a 29 ele cadastra, se não ele diz que as inscrições foram encerradas,
porém eu quero que ele conte quantos tem de cada oficina, e tenha um limite para cada uma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho que minha idéia fica mais concisa e facilita a manutenção pois você não precisaria mexer no código. Um simples UPDATE, pelo próprio phpMyAdmin você poderia criar novas vagas automaticamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No código abaixo eu contei os registros da tabela usuario que tem o valor 1 na estrutura oficina, depois criei um if que se caso tiver 5 ou mais usuários cadastrados com o valor 1 na estrutura oficina imprimi o echo Você não pode mais cadastrar na 1° oficina!, E se caso tiver menos que 5 usuários com o valor 1 na estrutura oficina imprimi o echo do else que é Ainda pode cadastrar na 1° oficina!

 

Acho que resolvi o seu problema, Agora basta adaptar ao seu código! Abraço.

<?php
$contar = 0;
$sql = mysql_query("SELECT * FROM usuario where oficina = '1'");
while(mysql_fetch_object($sql)){
$contar++;


}
?>


<?php
if($contar >= 5){echo"Não pode mais cadastrar na 1° oficina!";} 
else{echo"Ainda pode cadastrar na 1° oficina!";}


?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

ao invés de deixar todos esses ifs por que não faz só uma vez e verifica quantos tem na tabela e se for mais do que permitido você não mostra no select?

 

Cara se você não percebeu ele quer limitar as oficinas para um valor de usuários cadastrados, não da para fazer isso da forma que você citou. Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu realmente não entendi amigo, pois se você não deixar a opção no select certamente ele não conseguira inserir esse valor.

 

Da forma que eu citei ele pode certamente adaptar o if para retornar que não pode cadastrar na determinada oficina se o valor exceder o permitido, dai o usuário vai tentar as outras opções de oficina disponíveis.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu posso estar sendo um pouco "ignorante" pelo fato de não ler todos os posts, e sim só o problema dele.

ai você pode pensar comigo da seguinte forma

 

 

 

select * from oficinas

e depois

 

select count(alunos) FROM tabela WHERE oficina = x

se esse número for maior que o número máximo de alunos ele não entra no select se não ele entra.

 

é apenas 1 IF.

 

abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu posso estar sendo um pouco "ignorante" pelo fato de não ler todos os posts, e sim só o problema dele.

ai você pode pensar comigo da seguinte forma

 

 

 

select * from oficinas

e depois

 

select count(alunos) FROM tabela WHERE oficina = x

se esse número for maior que o número máximo de alunos ele não entra no select se não ele entra.

 

é apenas 1 IF.

 

abraços.

 

Ele quer que o sistema funcione da seguinte maneira, tem vários selects com as determinadas oficinas aonde os usuários vão cadastrar, seja na 1°, 2° ou 3° oficina cabe ao aluno escolher entre elas qual quer participar, porem ele quer limitar para quando tiver exemplo um valor de usuários cadastrados na oficina 1° retorne um aviso dizendo que o usuário não pode mais cadastrar naquela oficina pois excedeu o limite de usuários cadastrados, o que vai incentivar o usuário a tentar cadastrar nas outras opções.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, vamos pensar de uma forma mais abrangente, pode até parecer mais complicado e trabalhoso, mas a manutenção será mais fácil, faça o seguinte:

 

Crie uma tabela 'oficina':

 

+id int

+descricao (varchar)

+nome_evento (varchar)

+vagas int

 

crie uma chave estrangeira em usuario para a oficina

 

+nome

+ra

+semestre,

+id_oficina (int) FK (oficina)

+email

 

Na hora de cadastrar:

 

 

// verificar se a oficina escolhida já ultrapassou o numero de vagas:
$id_oficina=$_POST['id_oficina']; // obs: terá o ID da oficina
$verify = mysql_query("select (o.vagas-count(u.ra)) as vagas_restantes from usuario u join oficina o ON o.id=u.id_oficina where oficina=$id_oficina");
$res = mysql_fetch_object($verify);
if ($res->vagas_restantes <= 0){
   echo "Não existem vagas!";
} else {
  // aqui vc irá fazer o cadastro, insert ...
  echo "Vagas restantes: $res->vagas_restantes";
}

 

Outra observação importante é que na listagem de oficina vc teria q buscar do banco de dados, e não coloca-las como dados estáticos

 

 

Oficina:
<select class="input2" name="id_oficina">
<?php
$sql = mysql_query("SELECT * FROM oficina ORDER BY descricao");
while ($res = mysql_fetch_object($sql)){
   echo "<option value=\"$res->id\">$res->descricao</option>"; 
}
</select>

 

Se tiver alguma dúvida sobre o código posta ae!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Pessoal, não resolvi o problema da forma mais adequada, mais pelo menos resolvi né, fiz da seguinte forma:

coloquei um identificador de qual oficina esta vindo, e coloquei as condições, se for 1, então executar aquele primeiro código lá, se não imprimir aqueles aviso seguintes, então é o seguinte, é só repetir aquele esse primeiro código de inserção nos outros elseif e alterarem o WHERE que ele esta vereficando, que ele verificara se há vagas e fará a inserção sim ou não.

 

mais se alguem consegui resumi tudo isso para um codigo unico que faça a mesma coisa, postem ai.

 

valeu pessoal...

 

<?php
$oficina=$_POST['oficina'];
if($oficina == 1){
 
$verify = mysql_query("SELECT * FROM usuario WHERE oficina = '1' ");
$row = mysql_num_rows($verify);
if($row <= 9){
$nome=$_POST['nome'];
$ra=$_POST['ra'];
$semestre=$_POST['semestre'];
$oficina=$_POST['oficina'];
$email=$_POST['email'];
$sql = mysql_query("INSERT INTO `usuario` (nome, ra, semestre, oficina, email) VALUES('$nome', '$ra', '$semestre', '$oficina', '$email')");
echo"<center> Cadastro efetuado com Sucesso </center>";
}else {
echo"<center> As incrições já Encerraram </center>";
exit;
}

}
elseif($oficina == 2){
   echo("Aconteceu algum erro na oficina 2!");
}
elseif($oficina == 3){
   echo("Aconteceu algum erro na oficina 3!");
}
elseif($oficina == 4){
   echo("Aconteceu algum erro na oficina 4!");
}
elseif($oficina == 5){
    echo("Aconteceu algum erro na oficina 5!");
}
elseif($oficina == 6){
    echo("Aconteceu algum erro na oficina 6!");
}
else{
    echo("Aconteceu algum erro de verdade!");
}

?>
<?php
echo"<br /> <br />";
$restante = 9 - $row;
echo"<center>Vagas Restantes:  $restante </center>";
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais Nielson Rocha, como determino a quantidade de vagas para cada oficina ?

 

Na tabela 'oficina' existe um campo VAGA, lá vc vai determinar o numero máximo de vagas, e o SQL irá determinar quantas pessoas já se cadastraram.

 

Ex:

 

oficina 1 - 30

oficina 2 - 29

 

A medida que os usuários forem se cadastrando, o sql vai diminuindo o numero de vagas contando os usuários.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.