Jump to content


Photo

Campos Em Branco Mysql


  • Faça o login para participar
12 replies to this topic

#1 AlexCardoso

AlexCardoso

    Novato no fórum

  • Usuários
  • 9 posts
  • Sexo:Não informado

Posted 15/10/2009, 20:15

Pessoal, preciso da ajuda de voces..
Fiz um script simples para incluir os emails no banco de dados, ele insere tudo normal, mas quando vou ver no banco, tem varios campos em branco...tipo assim..

id email
102 teste@teste.com
103 campo vazio
104 campo vazio
105 teste@teste.com


abaixo meu codigo
[codebox]<form action="index.php" method="post">

<table border="0" align="center">
<tr>
<td >Email</td>
<td ><span id="sprytextfield1">
<label>
<input type="text" name="email" />
</label>
</tr>
<tr>
<td><label>
<input type="submit" name="button" id="button" value="Enviar" />
</label></td>
<td>&nbsp;</td>
</tr>
</table>

</form>[/codebox]

codigo php

[codebox]<?php
$conn=mysql_connect("host","usuario","senha");
$sel=mysql_select_db("banco",$conn);

$email_disp=@$_POST['email'];
$qr=mysql_query("INSERT INTO email(email)VALUES('$email_disp')");

?>[/codebox]


Valeu pela ajuda pessoal...

#2 Cristiano Galdino

Cristiano Galdino

    Dark Defender

  • Administradores
  • 3738 posts
  • Sexo:Masculino
  • Localidade:Brasília, DF

Posted 15/10/2009, 20:26

Simples, alguém está clicando no botão salvar sem preencher os dados. :)
Cristiano Galdino
- http://cristiano.galdino.net/

“Since 2003”


#3 Guilherme Venerato

Guilherme Venerato

    Normal

  • Usuários
  • 68 posts
  • Sexo:Masculino
  • Localidade:Presidente Prudente

Posted 16/10/2009, 09:28

Para evitar isso você poderia fazer um if para ver se o campo do e-mail foi digitado, se não foi digitado exiba uma mensagem ou algo do tipo.
Guilherme Venerato - Soluções para Web
http://www.guilhermevenerato.com

#4 Fábio Web Arts

Fábio Web Arts

    Web IN Arts

  • Usuários
  • 299 posts
  • Sexo:Masculino
  • Localidade:No Saco De Magé
  • Interesses:Tudo que for da área de Informática

Posted 16/10/2009, 13:52

[codebox]
if(empty($email))
{
echo "digite um email";
}
[/codebox]

#5 Dudu

Dudu

    Viva la vida

  • Usuários
  • 1437 posts
  • Sexo:Masculino
  • Localidade:Uberlândia - MG
  • Interesses:PHP

Posted 16/10/2009, 14:02

[codebox]

<?php
$conn=mysql_connect("host","usuario","senha");
$sel=mysql_select_db("banco",$conn);

$email_disp=@$_POST['email'];

$erro .= empty($email_disp) ? 'Digite seu email!<br>' : NULL;

if(empty($erro)) {
$qr=mysql_query("INSERT INTO email(email)VALUES('$email_disp')");
echo "Email inserido com sucesso!";
}else{
echo $erro;
}


?>
[/codebox]

Com isso, seu problema será resolvido.
Até mais ^_^

Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Moderador


Twitter: HostCheap


#6 Fábio Web Arts

Fábio Web Arts

    Web IN Arts

  • Usuários
  • 299 posts
  • Sexo:Masculino
  • Localidade:No Saco De Magé
  • Interesses:Tudo que for da área de Informática

Posted 16/10/2009, 15:37

uma pergunta o porque do

.=

?

#7 Dudu

Dudu

    Viva la vida

  • Usuários
  • 1437 posts
  • Sexo:Masculino
  • Localidade:Uberlândia - MG
  • Interesses:PHP

Posted 16/10/2009, 16:11

Ele adiciona mais valores à variável.

Explicando de forma bem bruta:

Quando colocamos somente =, ele redefine a variável.
Se colocarmos .=, ele mantém o registro anterior e adiciona mais um.

Caso ele deseje fazer mais verificações, é só manter neste padrão.

Até mais ^_^

Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Moderador


Twitter: HostCheap


#8 Cristiano Galdino

Cristiano Galdino

    Dark Defender

  • Administradores
  • 3738 posts
  • Sexo:Masculino
  • Localidade:Brasília, DF

Posted 16/10/2009, 19:04

Em termo técnico o .= é para concatenar strings.

Esse modo de verificação que está no tópico não validam o e-mail, só verificam se a string está vazia. O ideal aí seria fazer uma expressão regular para checar se o conteúdo é um e-mail válido. Outra sugestão é abrir a conexão com o Banco de Dados apenas se o e-mail for válido.

<?php
if( exp_reg_email_valido ) :
	conecta_com_o_banco;
	seleciona_a_tabela;
	insere_o registro;
	fecha_a_conexão_com_o_banco; e
	imprime_mensagem_de_sucesso;
else:
	imprime_mensagem_de_erro;
endif;
?>

Cristiano Galdino
- http://cristiano.galdino.net/

“Since 2003”


#9 Dudu

Dudu

    Viva la vida

  • Usuários
  • 1437 posts
  • Sexo:Masculino
  • Localidade:Uberlândia - MG
  • Interesses:PHP

Posted 16/10/2009, 20:41

Sim, verifica se está preenchido, o que é mais importante, e resolve o problema do amigo.

Até mais .

Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Moderador


Twitter: HostCheap


#10 Cristiano Galdino

Cristiano Galdino

    Dark Defender

  • Administradores
  • 3738 posts
  • Sexo:Masculino
  • Localidade:Brasília, DF

Posted 16/10/2009, 20:56

Não cabe a mim jugar o que é melhor para outrem. Só propus uma melhora, considerável, ao código. Aceita quem quiser. Além do mais, visão holística faz muito bem.

A propósito:
<?php
if( empty( $_POST["email"] ) ) :
	$connect = mysql_connect( "host", "user", "pass" );
	$select_db = mysql_select_db( "base", $connect );
	$query = mysql_query( "INSERT INTO email( email ) VALUES ( '" . $_POST["email"] . "' );" );
	echo "Success";
else :
	echo "Fail";
endif;
?>

Cristiano Galdino
- http://cristiano.galdino.net/

“Since 2003”


#11 Dudu

Dudu

    Viva la vida

  • Usuários
  • 1437 posts
  • Sexo:Masculino
  • Localidade:Uberlândia - MG
  • Interesses:PHP

Posted 17/10/2009, 00:35

Veja o quanto a concatenação é útil.

<?php $conn=mysql_connect("host","usuario","senha");$sel=mysql_select_db("banco",$conn);$email_disp=@$_POST['email'];$erro .= empty($email_disp) ? 'Digite seu email!<br>' : NULL;$erro .= (!eregi("^[-_a-z0-9]+(\\.[-_a-z0-9]+)*\\@([-a-z0-9]+\\.)*([a-z]{2,4})$", $email_disp)) ? 'E-mail inválido<br>' : NULL;if(empty($erro)) {   $qr=mysql_query("INSERT INTO email(email)VALUES('$email_disp')");   echo "Email inserido com sucesso!";   }else{   echo $erro;}?>

Ele irá verificar se está vazio, caso estiver, retorna FALSE. Se não estiver vazio, retorna TRUE e passa para a próxima concatenação, onde verifica o formado do email.
Se não teríamos que criar outro IF, tornando o script maior ainda.

Expressão regular tirada de: http://www.vedovelli.com.br/?p=23

OBS: Não testei o uso da expressão.

Quem quiser melhorá-la, fique a vontade.
Até mais ^_^

Edição feita por: Dudu, 17/10/2009, 00:39.

Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Moderador


Twitter: HostCheap


#12 Cristiano Galdino

Cristiano Galdino

    Dark Defender

  • Administradores
  • 3738 posts
  • Sexo:Masculino
  • Localidade:Brasília, DF

Posted 17/10/2009, 01:33

Sim, concatenar é muito útil e necessário em vários casos. Mas por esse problema se tratar de apenas um campo que ele quer validar o código fica mais limpo e claro sem isso tudo. Se o usuário não preencheu o e-mail ou colocou um e-mail inválido tanto faz, o que importa é que está incorreto, basta uma mensagem. E-mail inválido.

Não há necessidade de conectar ao banco de dados antes de verificar se o dado, nesse caso apenas o e-mail, está correto. Só vai gerar carga no servidor.



Quando são vários campos a serem validados eu sugiro assim:
<?php
$_ERROR = array();

// CHECK USERNAME
if( strlen( $_POST["username"] ) < 5 || strlen( $_POST["username"] ) > 15 ) :
	$_ERROR["username"] = "O nome de usuário deve ter de 5 a 15 caracteres.";
endif;

// CHECK E-MAIL
if( eregi( '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+\.'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $_POST["email"] ) ) :
	$_ERROR["email"] = "E-mail inválido.";
endif;

// CHECK URL, OPTIONAL
if( !empty( $_POST["url"] ) ) :
	if( @fclose( @fopen( $_POST["url"], 'r' ) ) ) :
		$_ERROR["url"] = "URL inválido.";
	endif;
endif;

if( empty( $_ERROR ) ) :
	echo "Ok, nenhum erro, posso fazer o que quero com os dados";
else :
	echo "Erro: <br/>";
	echo "<ul>";
	reset( $_ERROR );
	while( key( $_ERROR ) !== null ) :
		echo "<li>" . current( $_ERROR ) . "</li>";
		next( $_ERROR );
	endwhile;
	echo "</ul>";
endif;
?>

Só estou mostrando modos alternativos e melhorando a manutenibilidade do código e a usabilidade para o usuário.


Referências da validação de e-mail e url, respectivamente:
- http://forum.wmonlin...howtopic=121194
- http://forum.wmonlin...howtopic=120946
Cristiano Galdino
- http://cristiano.galdino.net/

“Since 2003”


#13 Dudu

Dudu

    Viva la vida

  • Usuários
  • 1437 posts
  • Sexo:Masculino
  • Localidade:Uberlândia - MG
  • Interesses:PHP

Posted 17/10/2009, 02:57

Acho que seria bom verificar também se o e-mail é existente.

Bom, assim fica bem completo:

[codebox]
<?php

if(@$_POST) {
$conn=mysql_connect("localhost","root","");
$sel=mysql_select_db("testes2",$conn);

$email = addslashes($_POST['email']);

$sql = mysql_query("SELECT COUNT(*) AS total FROM email WHERE email = '".$email."'") or die(mysql_error());
$row = mysql_fetch_array($sql);

$_ERROR .= empty($email) ? 'Digite um e-mail!<br>' : NULL;
$_ERROR .= (!empty($email)) && (!eregi( '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+\.'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $email)) ? "E-mail inválido!<br>" : NULL;
$_ERROR .= $row['total'] > 0 ? 'E-mail existente!<br>' : NULL;

if( empty($_ERROR) ) :
mysql_query("INSERT INTO email (email)VALUES('".$email."')");
else :
echo "Erro: <br/>";
echo $_ERROR;
endif;
}

?>
<form method="post">

<table border="0" align="center">
<tr>
<td >Email</td>
<td ><span id="sprytextfield1">
<label>
<input type="text" name="email" />
</label>
</tr>
<tr>
<td><label>
<input type="submit" name="button" id="button" value="Enviar" />
</label></td>
<td>&nbsp;</td>
</tr>
</table>

</form>
[/codebox]

Até mais ^_^

Edição feita por: Dudu, 17/10/2009, 02:57.

Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Moderador


Twitter: HostCheap





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq