2014-07-11 24 views
1

我想为我的网站创建一个用户注册脚本,虽然我当前的代码工程,我想知道如果语法是正确的,如果有修改,我需要提高安全性并避免错误。正确的方法来检查表格值的数据库插入

我的注册表格有多个字段,其中一些不能为空(例如电子邮件和密码),其中一些可以为空(例如出生日期)。每个字段都有jQuery /客户端验证,并且只有在设置了必填字段之后才能提交表单。检查是否在登记表已经提交后,我节省了在不同变量的信息如下:

$email=isset($_POST['email']) ? $database->escape($_POST['email']) : ""; 
$birthdate=isset($_POST['birthdate']) ? $database->escape($_POST['birthdate']) : ""; 

我知道我需要拯救,这是在这个逃生功能做什么之前逃脱信息案例,但除此之外,我想知道我的方法/逻辑是否是错误的?

我应该检查isset和每个字段为空,或者我应该有不同的方法可以为空和那些不能?例如:

​​

或者正在检查!在这种情况下是否足够空?

$email=!empty($_POST['email']) ? $database->escape($_POST['email']) : ""; 

的SQL插入如果(空($电子邮件)),在这种情况下登记的,不经过我检查之前,所以我很困惑,如果我这样做既需要isset和空首先检索信息并将其保存到变量时进行检查。

感谢您对本主题的任何帮助/建议。我在2年前毕业,主要从事前端网页设计工作,在过去的两年中我在学校学习了php和mysql,但是在我的笔记或练习文件中没有看到提及isset以检查是否收到了值,他们都保存了帖子或者直接去了变量,并且没有提及mysqli或者pdo,只是我知道已经被弃用的mysql(并且在他们甚至想到我之前显然已经发生了这种情况的警告)。看起来我的老师在这种做法背后,在过去的几天里,我只在学习这个项目时学到了很多关于php和mysqli的知识,但我仍然对许多事情感到困惑,尽管我认为我得到了它挂了。

+0

因为您正在使用(或知道)mysqli,您可以使用预准备语句而不是手动转义计划在查询中使用的每个变量。 – skrilled

+0

@谢谢你的建议!我一直在阅读准备好的陈述,但我对此有点困惑。在这种情况下,我应该使用两种不同的语句,一种检查电子邮件是否已经在系统中,另一种是插入数据? –

+0

你可以做一个插入不存在的类型命令来解决这一切在一个语句中 - http://bogdan.org.ua/2007/10/18/mysql-insert-if-not-exists-syntax.html – skrilled

回答

1

您只能使用empty()作为必填字段,然后转义所有字段。不要忘记哈希密码!

+0

谢谢!我正在逃避每个字段,并使用md5密码散列密码 $ password = isset($ _ POST ['password'])? $ database-> escape($ _ POST ['password']):“”; $ passw = md5($ password); –

+0

未设置($ _ POST ['密码),但为空($ _ POST ['password')) – Zhigalin

0

如果使用isset与您共创登记:

<?php 
    $login = $_POST['login']; 
    $pass = $_POST['pass']; 
    $pass2 = $_POST['pass2']; 
    $age = $_POST['age']; 


     if(isset($login)){ 
     if(!empty($login) AND !empty($pass) AND !empty($pass2) AND !empty($age) AND $pass == $pass2){ 

     // Check lenght of variables... 
     // AND Check login in base (1 login == 1 account) :D 
     } else { 
echo "Please check empty variables!"; 
} 
     } 
    ?> 

祝您好运!

+0

你需要检查是否设置了$ _POST变量,重申声明$登录它总是会被设置,但不检查登录后会导致错误,如果它没有设置那里 –

+0

哦...... srry,但我从电话写道,这是短版本。 – Mergars

相关问题