4
Hello, I have a simple registration form, where there can be no repeated records in the field cpf
and also in the field resposta(cupom)
. The validation of cpf
is ok and the data does not duplicate in Mysql, but the check and error return is failed. Follow the code:
<?php require_once('Connections/conecta.php'); ?>
<?php
ini_set('display_errors', 0 );
error_reporting(0);
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
$data = date("Y-m-d");
function validaCPF($cpf)
{ // Verifiva se o número digitado contém todos os digitos
$cpf = str_pad(ereg_replace('[^0-9]', '', $cpf), 11, '0', STR_PAD_LEFT);
// Verifica se nenhuma das sequências abaixo foi digitada, caso seja, retorna falso
if (strlen($cpf) != 11 || $cpf == '00000000000' || $cpf == '11111111111' || $cpf == '22222222222' || $cpf == '33333333333' || $cpf == '44444444444' || $cpf == '55555555555' || $cpf == '66666666666' || $cpf == '77777777777' || $cpf == '88888888888' || $cpf == '99999999999')
{
return false;
}
else
{ // Calcula os números para verificar se o CPF é verdadeiro
for ($t = 9; $t < 11; $t++) {
for ($d = 0, $c = 0; $c < $t; $c++) {
$d += $cpf{$c} * (($t + 1) - $c);
}
$d = ((10 * $d) % 11) % 10;
if ($cpf{$c} != $d) {
return false;
}
}
return true;
}
}
$cpf = $_POST['cpf'];
$resposta = $_POST['resposta'];
$search = mysql_query("SELECT * FROM membros WHERE cpf = '$cpf' OR resposta = '$resposta'");
if(@mysql_num_rows($search) >= 1){
echo '<p align="center">Registro não efetuado!<br /> Cada CPF ou Cupom, só pode ser cadastrado uma vez. O CPF precisa ser válido.</p>';
}
elseif ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
if(isset($_POST['btvalidar']))
{// Adiciona o numero enviado na variavel $cpf_enviado, poderia ser outro nome, e executa a função acima
$cpf_enviado = validaCPF($_POST['cpf']);
// Verifica a resposta da função e exibe na tela
if($cpf_enviado == true) {
echo "CPF Válido";
$insertSQL = sprintf("INSERT INTO membros (id, nome, cpf, email, resposta, data) VALUES (%s, %s, %s, %s, %s, NOW())",
GetSQLValueString($_POST['id'], "int"),
GetSQLValueString($_POST['nome'], "text"),
GetSQLValueString($_POST['cpf'], "text"),
GetSQLValueString($_POST['email'], "text"),
GetSQLValueString($_POST['resposta'], "text"),
GetSQLValueString($_POST['data'], "date"));
mysql_select_db($database_conecta, $conecta);
$Result1 = mysql_query($insertSQL, $conecta) or die(mysql_error());
echo '<p align="center">Registro efetuado com sucesso!</p>';
}
elseif($cpf_enviado == false)
echo "CPF Inválido.";
}
}
// Verifica se o botão de validação foi acionado
/*function srange ($s) {
//preg_match_all("/([0-9]{1,2})-?([0-9]{0,2}) ?,?;?/", $s, $a);
$n = array ();
foreach ($a[1] as $k => $v) {
$n = array_map(function($n) { return sprintf('RS%03d', $n); }, range(0000001, 1000000));
}
return ($n);
}
$s = 'RS0000001-RS1000000';
print_r(srange($n));*/
//$k = array(range(1000000,9000000));
// print_r($k);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sem título</title>
</head>
<body>
<script type="text/javascript">
function validaCampo()
{
if(document.form1.nome.value=="")
{
alert("O Campo nome é obrigatório!");
return false;
}
else
if(document.form1.cpf.value=="")
{
alert("O Campo CPF é obrigatório!");
return false;
}
else
if(document.form1.email.value=="")
{
alert("O Campo email é obrigatório!");
return false;
}
else
if(document.form1.resposta.value=="")
{
alert("O Campo Cupom é obrigatório!");
return false;
}
else
if(document.form1.telefone.value=="")
{
alert("O Campo Telefone é obrigatório!");
return false;
}
else
if(document.form1.bairro.value=="")
{
alert("O Campo Bairro é obrigatório!");
return false;
}
else
if(document.form1.pais.value=="")
{
alert("O Campo país é obrigatório!");
return false;
}
else
if(document.form1.login.value=="")
{
alert("O Campo Login é obrigatório!");
return false;
}
else
if(document.form1.senha.value=="")
{
alert("Digite uma senha!");
return false;
}
else
return true;
}
<!-- Fim do JavaScript que valida os campos obrigatórios! -->
</script>
<form action="<?php echo $editFormAction; ?>" method="post" name="form1" id="form1" onsubmit="return validaCampo(); return false;">
<table align="center">
<tr valign="baseline">
<td nowrap="nowrap" align="right">Nome:</td>
<td><input type="text" name="nome" value="" size="32" /></td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right">Cpf:</td>
<td><input type="text" name="cpf" value="" size="32" /></td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right">Email:</td>
<td><input type="text" name="email" value="" size="32" /></td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right">Resposta:</td>
<td><input type="text" name="resposta" value="" size="32" /></td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right"> </td>
<td><input name="btvalidar" type="submit" id="btvalidar" value="Inserir registro" /></td>
</tr>
</table>
<input type="hidden" name="id" value="" />
<input type="hidden" name="data" value="" />
<input type="hidden" name="MM_insert" value="form1" />
</form>
<p> </p>
<?php
?>
</body>
</html>
And the Mysql table:
--
-- Estrutura para tabela `membros`
--
CREATE TABLE IF NOT EXISTS `membros` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`nome` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`cpf` varchar(11) NOT NULL,
`data` date NOT NULL,
`resposta` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `cpf` (`cpf`),
UNIQUE KEY `resposta` (`resposta`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=34 ;
--
-- Fazendo dump de dados para tabela `membros`
--
INSERT INTO `membros` (`id`, `nome`, `email`, `cpf`, `data`, `resposta`) VALUES
(32, 'Marcos Felipe', '[email protected]', '22554477889', '2014-09-26', 'RS0000001'),
(33, 'Marcos Felipe', '[email protected]', '02545596985', '2014-09-26', 'RS0000002');
If you want to display code errors let the
display_errors
astrue
and theerror_reporting
asE_ALL
. Could you give more details of this failure?– rray
For example, if I try to insert a duplicate Cpf, instead of showing the error "Registration not done! <br /> Each CPF or Coupon, can only be registered once. The CPF must be valid." mysql default error message is displayed "Duplicate entry 'xxxxxxxxxxxx' for key 'Cpf'"
– Marcos
The localhost is working, but when it goes up to hosting, it’s not right.
– Marcos
Which version of php you’re using on the web host?
ereg_*
for example was depreciated in php5.3.– rray
PHP Version 5.2.17
– Marcos
See in the consultation if
$cpf
or$resposta
are not going with spaces, usetrim()
to remove them.– rray
Nothing, the data goes correctly and when mysql realizes the duplicity, returns the error "Duplicate entry 'xxxxxxxxxxxx' for key 'Cpf'" and does not insert the data, which is correct, cannot duplicate. But I wanted to show the error that is in php code and not mysql default.
– Marcos