这对我来说不是一个大问题(据我所知),这更像是我感兴趣的东西.但是什么的主要区别,如果有的话,使用的is_numeric超过preg_match(或反之亦然),以验证用户输入的值.
示例一:
<?php
$id = $_GET['id'];
if (!preg_match('/^[0-9]*$/', $id)) {
// Error
} else {
// Continue
}
?>
Run Code Online (Sandbox Code Playgroud)
示例二:
<?php
$id = $_GET['id'];
if (!is_numeric($id)) {
// Error
} else {
// Continue
}
?>
Run Code Online (Sandbox Code Playgroud)
我假设两者都完全一样,但是有什么具体的差异可能会在某种程度上引起问题吗?有没有"最好的方式"或者我没有看到的东西使它们与众不同.
我总是做简单的连接mysql_connect,mysql_pconnect:
$db = mysql_pconnect('*host*', '*user*', '*pass*');
if (!$db) {
echo("<strong>Error:</strong> Could not connect to the database!");
exit;
}
mysql_select_db('*database*');
Run Code Online (Sandbox Code Playgroud)
虽然使用这个我一直使用的简单的方法,使查询之前逃脱的任何数据,不管是INSERT,SELECT,UPDATE或者DELETE通过使用mysql_real_escape_string
$name = $_POST['name'];
$name = mysql_real_escape_string($name);
$sql = mysql_query("SELECT * FROM `users` WHERE (`name` = '$name')") or die(mysql_error());
Run Code Online (Sandbox Code Playgroud)
现在我明白这在某种程度上是安全的!
它逃脱了危险的人物; 但是,它仍然容易受到其他可能包含安全字符的攻击,但可能对显示数据或在某些情况下恶意修改或删除数据有害.
所以,我搜索了一下,发现了PDO,MySQLi和准备好的语句.是的,我可能会迟到,但我已经阅读了很多很多教程(tizag,W3C,博客,谷歌搜索),没有一个人提到这些.看起来很奇怪为什么,因为只是逃避用户输入真的不安全而且至少可以说是不好的做法.是的,我知道你可以使用Regex解决它,但是,我很确定这还不够吗?
据我所知,当用户输入给出变量时,使用PDO /预处理语句是一种更安全的方式来存储和检索数据库中的数据.唯一的麻烦是,切换(特别是在我的方式/先前编码的习惯非常困难之后)有点困难.
现在我明白使用PDO连接到我的数据库我会使用
$hostname = '*host*';
$username = '*user*';
$password = '*pass*';
$database = '*database*'
$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
if ($dbh) {
echo …Run Code Online (Sandbox Code Playgroud) 我一直在与RegEx挣扎,所以请原谅我,如果这看起来像是一个解决我的问题的可怕方法.
当用户输入名字和姓氏时,我开始只使用基本,检查大小写,空格,撇号和连字符
if (!preg_match("/^[a-zA-Z\s'-]+$/", $name)) { // Error }
Run Code Online (Sandbox Code Playgroud)
现在我意识到这不是最好的,因为人们可以拥有如下的东西:马丁路德金博士(用逗号和全文).所以我认为通过改变它会使它更有效.
if (!preg_match("/^[a-zA-Z\s,.'-]+$/", $name)) { // Error }
Run Code Online (Sandbox Code Playgroud)
然后我在Facebook上看到了一个我知道的女孩名字,她把自己的名字写成了Siân,这让我想到了包含变音符号以及日语/中文/韩语/俄语字符的名字.所以我开始搜索并通过在其中写下每个字符来找到方法.
if (!preg_match("/^[a-zA-Z\sàáâäãåèéêëìíîïòóôöõøùúûüÿýñç?šžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆ?ŠŽ?ð ,.'-]+$/u", $first_name)) { // Error }
Run Code Online (Sandbox Code Playgroud)
你可以想象,这是一个非常长的啰嗦,我很确定有一个更简单的RegEx可以实现这一目标.就像我说的那样,我已经四处寻找,但这是我能做的最好的事情.
那么,检查大小写字符,逗号,句号,撇号,大肆,变音符号,拉丁语,日语/俄语等的好方法是什么?
我有一个付费会员网站,通过 Stripe Checkout(服务器集成)进行付款。当用户注册时,他们会被重定向到 Stripe 结帐(其 ID 作为“client_reference_id”传递),并在其中输入卡详细信息。对于结帐履行,我有一个链接到事件“ checkout.session.complete ”的Webhook设置。
一切正常,网络钩子触发,端点处理数据并将相应的帐户标记为已激活,向帐户持有者和网站管理员发送电子邮件,让他们知道帐户已创建并且付款已完成成功的。
但是,如果付款失败,我不知道将什么事件附加到 webhook 来通过 Stripe Checkout 检测失败的付款。记录的唯一结帐事件是“checkout.session.complete”,没有类似“checkout.session.failed”之类的事件。有“invoice. payment_failed”,但这用于订阅而不是一次性结帐付款。
我们主要希望在付款失败时通知网站管理员,以便他们知道帐户已创建但仍在等待付款。
是否有我遗漏的结帐事件或其他查找失败结帐交易的方法?
我理解IPN是如何工作的,以及发送信息,验证等的基本思想.但对于我的生活,我无法让它工作!
这就是我要做的......
用户选择要购买的产品的某个部分,一旦他们点击它,它们就会链接到我添加了2个文本字段的paypal按钮.首先是用户ID,第二个是他们所选部分的名称 - 两者都是自动添加的值.一切正常.
然后他们按立即购买并填写他们的卡详细信息并购买并重定向到成功页面.
但是,我想要它,所以它在我的数据库中更新他们的个人资料,以显示他们已经购买了该产品.
我了解使用PayPal的IPN我可以将信息发送到我网站上的页面进行检查,如果付款完成,则可以采取任何必要的措施.
我已经尝试过PayPal网站本身的脚本,根本没有回复.有人能给我一个真正的,真正简单的方法来实现我追求的目标吗?因为每个教程都过于复杂或不起作用,这些例子对我没有任何帮助,他们会和你说话,好像你应该知道它是如何完成的.
我甚至已经阅读了整篇PDF文章,但我仍然对如何使这项工作毫无头绪.有帮助吗?
到目前为止我已经这样做了:
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?load=$1 [QSA,L]
Run Code Online (Sandbox Code Playgroud)
然后在我的索引页面(在根目录中)我正在使用PHP来确定要加载的页面:
// Swap to variables
$load = $_GET['load'];
// Home page
if (!$load || $load == "") { include('home.php'); exit(); }
// Dashboard
if ($load == "dashboard") { include('dashboard.php'); exit(); }
// About
if ($load == "about") { include('about.php'); exit(); }
// Username
$data_array = array(':username' => $load);
$select_account = $connect->prepare("SELECT * FROM `users` WHERE `username` = :username");
$select_account-> execute($data_array);
$account_amount = $select_account->rowCount();
if ($account_amount > 0) …Run Code Online (Sandbox Code Playgroud) 我将尝试使用Laravel 5在我的新网站的帮助中心内存储排序顺序,并且在使用它时遇到一些麻烦.我正在使用jQuery UI .sortable来排列页面上的元素,并且由于整个站点中有多个区域可以排序,我的jQuery脚本是以"一个脚本为所有"的方式构建的.因此使用data-*属性和路由名称引用.
这是我到目前为止的代码:
routes.php文件
Route::post('admin/help-centre/category/{category_id}/section/{section_id}/article/sort-order', 'AdminHelpCentreArticleController@sortOrder');
Run Code Online (Sandbox Code Playgroud)
AdminHelpCentreArticleController.php
public function sortOrder($category_id, $section_id)
{
/* Return ------------------------------------- */
return [
'category_id' => $category_id,
'section_id' => $section_id
];
}
Run Code Online (Sandbox Code Playgroud)
show.blade.php(管理员文章列表)
<ul id="help-center-articles-sort" class="sortable">
@foreach ($helpCentreArticles as $helpCentreArticle)
<li class="sortable-element" data-sortable-element-id="{{ $helpCentreArticle->id }}">
<a href="{{ action('AdminHelpCentreArticleController@show', array($helpCentreCategory->id, $helpCentreSection->id, $helpCentreArticle->id)) }}" target="_self">{{ $helpCentreArticle->title }}</a>
</li>
@endforeach
</ul>
<a href="{{ $helpCentreSection->id }}/article/sort-order" target="_self" class="button bm-remove w-full sortable-save" data-sortable-id="help-center-articles-sort">Save Order</a>
Run Code Online (Sandbox Code Playgroud)
scripts.js(包括CSRF令牌_token)
var csrfToken = $('meta[name="csrf-token"]').attr('content');
$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
if …Run Code Online (Sandbox Code Playgroud) 我在Laravel应用程序中创建了一组自定义验证规则.我首先创建了一个目录validators.php中的App\Http文件:
/**
* Require a certain number of parameters to be present.
*
* @param int $count
* @param array $parameters
* @param string $rule
* @return void
* @throws \InvalidArgumentException
*/
function requireParameterCount($count, $parameters, $rule) {
if (count($parameters) < $count):
throw new InvalidArgumentException("Validation rule $rule requires at least $count parameters.");
endif;
}
/**
* Validate the width of an image is less than the maximum value.
*
* @param string $attribute
* @param mixed $value …Run Code Online (Sandbox Code Playgroud) 我想尝试使用跨浏览器渐变效果处理带有rgb后退的值,以防浏览器不支持它.
jsFiddle示例:http://jsfiddle.net/HelloJoe/hUxdh/
我相信我已经覆盖了大多数浏览器,但我有几个问题:
是否还有其他常用的浏览器,以及iPad/SmartPhone等设备需要哪些属性,或者它们是否会从当前使用的属性中进行渲染?
如果没有渲染渐变,是否有background: rgb(50, 50, 50);足够的原始生成纯色?
有了这个filter值,我无法通过使用rgb值来使其工作,而不得不求助于使用hex值,而不是这是一个巨大的问题,但我只是尝试使用rgb值.有没有办法解决这个问题还是不接受它们?
如果我要使用rgba而不是rgb我需要有一个rgba渐变背景值,rgb渐变背景值作为后退不能渲染alpha透明度然后一个实心背景后退以防万一没有渲染渐变?或将浏览器忽略Alpha透明度值,只是显示了rgb从rgba没有单独的rgb背景回落?
作为一切的最后回落,是否hex需要在CSS属性的开头设置一个值?我想添加一个hex值没有什么害处,但使用的想法rgb是if rgba是否可用它可以在整个网站上快速轻松地进行颜色更改.所以有一个后退hex值将使rgb/rgba我无意使用它所用的东西,因为我需要经历并编辑所有hex值.
我做了一些搜索,实例各不相同,理解被误解为不同的人,我只是试图创建一个准确的工作示例来获得理想的结果.
我对HTML5输入字段的有效标记有点困惑.
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Site Name</title>
</head>
<body>
<form name="contact" method="post" action="/">
<p><input type="input" name="first_name" maxlength="255" /></p>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我通过w3.org上的验证器运行时,我得到错误Bad value input for attribute type on element input.,/>突出显示为红色.我看一下它创建的HTML-Tidy版本,它告诉我这样写它:
<p><input type="input" name="first_name" maxlength="255"></p>
Run Code Online (Sandbox Code Playgroud)
但是当我验证我然后得到相同的错误,但只有>突出显示为红色.然后查看HTML-Tidy以查看它已经纠正了它并且它离开的情况就像它可以正常一样,但错误仍然存在.这被认为是有效的HTML5标记吗?或者有一种特定的方法吗?
php ×7
laravel ×2
laravel-5 ×2
ajax ×1
css ×1
css3 ×1
database ×1
forms ×1
friendly-url ×1
gradient ×1
html5 ×1
input ×1
isnumeric ×1
jquery ×1
markup ×1
mod-rewrite ×1
mysql ×1
paypal ×1
paypal-ipn ×1
pdo ×1
preg-match ×1
regex ×1
rgb ×1
rgba ×1
validation ×1