最近我开始在我的应用程序中使用加密技术,我发现自己对输入文本长度和它产生的密文之间的关系感到困惑.在应用加密之前,很容易确定数据库列大小.但是,现在,列大小略有不同.
两个问题:
对于奖励积分:我应该在varchar中存储base64编码的密文,还是将其保存为原始字节并将其存储在varbinary中?将数据存储在我的数据库中是否存在风险(我使用参数化查询,因此理论上意外断开转义应该不是问题)?
TIA!
补充:我使用的密码是AES/Rijndael-256 - 这种关系在可用算法之间有所不同吗?
注意:由于写了这个问题,我已经发现我对使用新语言功能过于热心.更清洁的解决方案是使用策略模式而不是......我仍然很好奇是否有适当的方法解决这个问题.
TL; DR:您是否可以在PHP中反映一般的Callable,而无需手动检测各种可调用类型?
在PHP 5.4中,我们有一个新的typehint:callable.这看起来很有趣.我以为我会通过以下方式利用这个:
<?php
public function setCredentialTreatment(callable $credentialTreatment) {
// Verify $credentialTreatment can be used (ie: accepts 2 params)
... magic here ...
}
?>
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的思路是对可调用进行一系列类型检查,并从使用的Reflection*类推断:
<?php
if(is_array($callable)) {
$reflector = new ReflectionMethod($callable[0], $callable[1]);
} elseif(is_string($callable)) {
$reflector = new ReflectionFunction($callable);
} elseif(is_a($callable, 'Closure') || is_callable($callable, '__invoke')) {
$objReflector = new ReflectionObject($callable);
$reflector = $objReflector->getMethod('__invoke');
}
// Array of ReflectionParameters. Yay!
$parameters = $reflector->getParameters();
// Inspect parameters. Throw invalidArgumentException if not valid.
?>
Run Code Online (Sandbox Code Playgroud)
现在,对我而言,这感觉过于复杂.我是否缺少某种快捷方式来实现我在这里尝试做的事情?任何见解都会受到欢迎:)
我正在构建一个ZendFramework应用程序,它作为一个登录表单,要求提供电子邮件地址和密码 - 在使用登录尝试访问数据库之前验证电子邮件地址似乎是有意义的,因为无效的电子邮件永远不会导致有效命中.Zend_Validate_EmailAddress似乎是正确的方法,但我遇到了生成多个错误的问题(在底部的问题,在代码之后).
我的表格目前有以下内容
//WPMail_Form_Login::init()
$email = $this->addElement('text', 'email', array(
'label'=>'Email',
'required'=>true,
'filters'=>array('stringtrim'),
'validators'=>array(array('emailaddress', true, array(
'messages'=>array(
'emailAddressInvalidHostname'=>'Your email address is invalid',
'emailAddressInvalidFormat'=>'Your email address is invalid',
'...'=>'(repeat for all message templates)'
)
))),
));
Run Code Online (Sandbox Code Playgroud)
在控制器中我直接将表单传递给视图:
// WPMail_AuthController::loginAction()
$this->view->form = $form;
Run Code Online (Sandbox Code Playgroud)
在视图中,它直接回应:
// views/scripts/auth/login.phtml
<?php echo $this->form ?>
Run Code Online (Sandbox Code Playgroud)
结果目前是这样的:
- Your email address is invalid
- 'asda!!!' does not match the expected structure for a DNS hostname
- 'asda!!!' does not appear to be a valid local network name
Run Code Online (Sandbox Code Playgroud)
我想要知道的是:是否可以配置Zend …
HTML5为我们提供了一些新的输入元素,例如<input type=number>
.这将(在Chrome中)呈现为文本框,文本框内有两个循环按钮,用于递增和递减框内的数值.
对于个人爱好项目,我正在使用此控件.但是,我遇到了一个问题:
有没有办法检测使用javascript事件更改的值?我原本以为onChange
要开火,但没有这样的运气.此外,onClick
仅在单击文本框内容时触发,而不是在单击循环按钮时触发.
有任何想法吗?(除了:嘿,这是HTML5表格,不要指望任何工作!)
编辑:正如mikerobi在下面指出的那样,只要元素失去焦点,onChange事件就会触发.仍然不是我想要的,所以欢迎其他意见和建议!
是否有可能编写一个模式,允许将经过验证的XML与格式良好的XML混合使用?一个典型的例子是数据传输应用程序,其中请求包含一堆元数据(我们想要验证)和特定于记录的信息(与业务逻辑中的XML分开验证,因为XML请求是只是请求可以进入的几种方式之一).
例:
<request>
<campaign>CAMP00001</campaign>
<username>user_bob</username>
<token>one-time-token-goes-here</token>
... more meta-data ...
<records>
<record id="90209">
<name>John Doe</name>
<address>Park Lane 191</address>
<postal>99999</postal>
</record>
<record id="90210">
<name>Jane Doe</name>
<address>Park Lane 192</address>
<postal>88888</postal>
</record>
</records>
</request>
Run Code Online (Sandbox Code Playgroud)
目前,我通过手动检查广告系列,用户名和令牌字段内容的存在性和有效性进行验证.如果可能的话,我想使用XML模式这样做,这样就可以更容易地向开发人员传达他们需要提供的元数据以及哪些格式 - 对于广告系列而言,这是不可能的,因为每个广告系列都有自己的一套应用于这些的字段和规则.可以这样做吗?
(我想到的一个解决方案是用一组<data>
元素而不是命名元素填充记录,然后<data>
在模式中有一个非常宽松的定义..但是这需要更改规范)
我想按如下方式进行文件大小验证.请查看此提案方法是否有意义.仅此部分应该有效.
1> After the user selects a file, I check whether the file has suffix as png, gif etc.
$("#myform").validate({
rules: {
fieldForUpload: {
required: true,
accept: "png|gif"
}
}
});
Run Code Online (Sandbox Code Playgroud)
2>然后我想使用aJax方法将文件上传到服务器以进行验证,甚至在用户单击提交按钮之前. http://docs.jquery.com/Plugins/Validation/Methods/remote#url
$("#myform").validate({
rules: {
fieldForUpload: {
required: true,
accept: "png|gif"
remote: "check-filesize.php"
}
}
});
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
1>这种方法有效吗?换句话说,我可以一起验证fieldUpload与"accept"+"remote"吗?
2>我可以强制首先验证"接受",然后验证"远程"吗?
3>如何实现这种"远程"方法?仅供参考:我知道如何使用远程验证数据库中是否存在电子邮件.我是否必须获得一些不同的知识才能实现这一目标?
非常感谢
我试图's
在全名之后显示撇号,Samuel L. Jackson’s
但是如果省略姓氏或中间名,'s
则以空格为前缀,例如:Samuel ’s
.有人可以帮我纠正这个问题吗?
谢谢
这是PHP代码.
if(!empty($first_name) || !empty($middle_name) || !empty($last_name)) {
echo = $first_name . ' ' . $middle_name . ' ' . $last_name . ' \'s';
}
Run Code Online (Sandbox Code Playgroud) php ×5
callback ×1
cryptography ×1
forms ×1
html5 ×1
javascript ×1
jquery ×1
mcrypt ×1
reflection ×1
schema ×1
validation ×1
xml ×1
xsd ×1
zend-form ×1