小编Inf*_*ity的帖子

PHP是2017年获得真实用户IP地址的最准确/最安全的方式

通过PHP获取用户IP地址的最准确方法是什么?

我已经阅读了很多关于它的SO问题和答案,但大多数答案都是陈旧的,用户评论说这些方法是不安全的.

例如,看看这个问题(2011):如何在PHP中获取客户端IP地址?

蒂姆肯尼迪的回答包含一个建议,使用如下:

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}
Run Code Online (Sandbox Code Playgroud)

但正如我已经阅读了很多,我已经看到使用X_FORWARDED_FOR是不安全的,因为下面的评论强调:

除非您完全了解它的作用,否则请勿使用上述代码!由于这个原因,我已经看到了MASSIVE安全漏洞.客户端可以将X-Forwarded-For或Client-IP标头设置为它想要的任意值.除非您有可信的反向代理,否则不应使用任何这些值.

由于我完全不知道它的作用,我不想承担风险.他说它不安全,但没有提供一种安全的方法来获取用户的IP地址.

我试过这个简单的$_SERVER['REMOTE_ADDR'];,但这会返回错误的IP.我已经测试了这个,我的真实IP遵循这种模式:78.57.xxx.xxx但我得到的IP地址如下:81.7.xxx.xxx

所以你有什么想法吗?

php security ip proxy reverse-proxy

17
推荐指数
4
解决办法
7581
查看次数

通过PHP从HTML表单插入数据库的多个选项

我有下拉列表,选择任何值后它添加一些字段的新行,示例如下图所示:

下拉列表

我有insert.php将值插入MySQL数据库.但是有问题,只有第一行的值被插入到数据库中.

PHP看起来像:

foreach($_POST['CertificateType'] as $key => $val){ 

    $CertificateType = $val;

    $CertificateType = $_POST['CertificateType'][$key]; 
    $STCWCode        = $_POST['STCWCode'][$key];            
    $CertNo          = $_POST['CertNo'][$key];          
    $FromCert        = $_POST['FromCert'][$key];            
    $ToCert          = $_POST['ToCert'][$key];  

    $CertificateType = mysqli_real_escape_string($link, $CertificateType);  
    $STCWCode        = mysqli_real_escape_string($link, $STCWCode);                 
    $CertNo          = mysqli_real_escape_string($link, $CertNo);           
    $FromCert        = mysqli_real_escape_string($link, $FromCert);                 
    $ToCert          = mysqli_real_escape_string($link, $ToCert);      

    $sql3 = "INSERT INTO Tbl (
        CertificateType     
        ,UserId    
        ,STCWCode               
        ,CertNo                 
        ,FromCert               
        ,ToCert
        ,DateCreated
    ) VALUES (
        '$CertificateType',
        '$UserID',  
        '$STCWCode',            
        '$CertNo',          
        '$FromCert',            
        '$ToCert',
        now())";
    if(mysqli_query($link, $sql3)){
        echo "Resume created successfully.";
    } else{
        echo …
Run Code Online (Sandbox Code Playgroud)

html javascript php mysql jquery

16
推荐指数
2
解决办法
2200
查看次数

在OLAP多维数据集中,筛选属性时错误的总计总数

用户试图检查每个销售员的销售额。样本数据:

Salesperson   Sales Amount    
001                   1000    
002                    500    
003                    750
Grand Total:          2250
Run Code Online (Sandbox Code Playgroud)

看起来不错,但是Company > Class > Group > Subgroup多维数据集中具有以下层次结构,并且如果用户尝试在过滤器中使用此层次结构-总计总计将失败(如果在此层次结构中未选中任何属性)。样品:

Salesperson   Sales Amount    
001                   1000    
002                    500    
003                    750    
Grand Total:           350
Run Code Online (Sandbox Code Playgroud)

在尝试过滤Date属性之前,我已经注意到了相同的问题,如果不是每月的每一天都被选中,它也会显示错误的总计。

您是否知道为什么会发生以及如何解决?

销售金额是物理量度(不是计算量度),是从SQL视图中选择的(每个事实都相同)。

错误总计

我在这里问过同样的问题,但是没人能回答。

我尝试删除所有MDX计算(作用域),但总计总数仍然不正确。

干净的MDX计算

错误总计

编辑

我注意到这样过滤时会发生问题:

层次过滤器

如上图所示,从层次结构的第一级选择1个元素,从层次结构的第二级选择1个元素,从层次结构的第三级选择1个元素。

如果未过滤第3级,则显示良好的总计。

编辑2

我试图在SSAS上进行跟踪,它返回的输出与Excel中的输出完全相同。在行上使用Salesperson维度时,它生成了以下MDX:

SELECT NON EMPTY { [Measures].[Sales Amount] } ON COLUMNS, 
NON EMPTY { ([Salesperson].[Salesperson].[Salesperson].ALLMEMBERS ) } 
DIMENSION PROPERTIES MEMBER_CAPTION, 
MEMBER_UNIQUE_NAME ON ROWS FROM ( 
SELECT ( {  [Item].[Class - Group - Subgroup].[Class].&[XXX]&[1.], 
            [Item].[Class - …
Run Code Online (Sandbox Code Playgroud)

sql-server excel ssas pivot-table sql-server-2008-r2

11
推荐指数
1
解决办法
529
查看次数

如何使用HTML模式的JQuery InputMask

我有电话号码的HTML输入框.

我使用InputMask的格式输入860000000在下面8 600 00 000打字时.

$(window).load(function()
{
   var phones = [{ "mask": "# ### ## ###"}, { "mask": "# ### ## ###"}];
    $('#phone').inputmask({ 
        mask: phones, 
        greedy: false, 
        definitions: { '#': { validator: "[0-9]", cardinality: 1}} });
});
Run Code Online (Sandbox Code Playgroud)

我也使用HTML模式检查数字是否86以及总共9位数,但是InputMask它停止工作,并且无法以任何方式实现它:

<label for="phone" class="first-col">Mobile No.:</label>
<input type="text" id="phone" placeholder="8 600 00 000" required pattern="(86)\d{7}" />
Run Code Online (Sandbox Code Playgroud)

如果有效,CSS添加绿色边框:

input:required:valid {
    box-shadow: 0 0 5px #5cd053;
    border-color: #28921f;
}
Run Code Online (Sandbox Code Playgroud)

你有什么想法吗?

JS Fiddle

html javascript regex jquery input-mask

6
推荐指数
1
解决办法
3859
查看次数

HTML形成带边框的单独列

我有4列,我需要将每个列与边框分开.现在看起来像:

现在恢复

它应该是什么(例如红/蓝颜色):

用列恢复

问题是我没有列的任何div,我在内部生成行,<li> </li>因此内部的4个输入<li> </li>是1行:

<form class="form-style-9">

<h2>Personal details</h2>
<ul>
<div id="personal-details">
<li>    

    <div class="test">
    <label for="Rank">Rank</label>
    <input id="Rank" type="text" name="Rank" class="field-style field-split25 align-left" placeholder="Rank" /> 
    </div>

    <div class="test">
    <label for="RankApplied">Rank Applied</label>
    <input id="RankApplied" type="text" name="RankApplied" class="field-style field-split25 align-left" placeholder="Rank Applied" />   
    </div>

    <div class="test">
    <label for="Vesselstype">Vessel's type</label>
    <input id="Vesselstype" type="text" name="Vesselstype" class="field-style field-split25 align-left" placeholder="Vessel's type" />  
    </div>

    <div class="test">
    <label for="datepicker2">Date Applied</label>
    <input id="datepicker2" type="date" name="datepicker2" class="field-style field-split25-4 align-left" placeholder="Date Applied" />
    </div>
</li> …
Run Code Online (Sandbox Code Playgroud)

html css forms html5 class

5
推荐指数
0
解决办法
677
查看次数

从MySQL表中为1个用户选择多行

为了便于解释,我将尝试简化一切.

我有3个SQL表:Users,Certs,Serv

Users表中存储有关唯一用户的详细信息.

Certs表中存储有关证书和UserId具有此证书的用户的详细信息(1个用户可以拥有多个证书)

Serv表中存储有关海上服务和UserId用户的详细信息(如Certs表,1个用户可以在Serv表中有多个条目)

样本数据

用户

UserId  Name
1       John
2       Lisa
Run Code Online (Sandbox Code Playgroud)

证书

Id  UserId  CertName
1   1       A
2   1       B
3   1       C
4   2       A
5   2       C
Run Code Online (Sandbox Code Playgroud)

SERV

UserId  Name
1       SA
1       SB
1       SC
1       SD
2       S2A
Run Code Online (Sandbox Code Playgroud)

我需要通过PHP检索输出(例如UserId = 1)同样对于现实,每个表中会有更多列(例如证书的更多细节,如发布日期,到期日期,发布地点等):

Personal details:
Name
John

Certificates:
Certificate Id    Certificate Name
1                 A 
2                 B …
Run Code Online (Sandbox Code Playgroud)

html php mysql sql

5
推荐指数
1
解决办法
1132
查看次数

数据表。如何遍历所有行并获取每个 tr 条目的 id

本题针对Datatables插件为JQuery.

我需要遍历所有表格行(甚至分页)并获取id每个tr元素。

像这样的 HTML 表格:

<table>
  <thead>
    <tr>
      <th>Header content 1</th>
      <th>Header content 2</th>
    </tr>
  </thead>
  <tbody>
    <tr id="etc_1_en">
      <td>Etc 1</td>
      <td>Etc 2</td>
    </tr>
    <tr id="etc_1_ru">
      <td>Etc 3</td>
      <td>Etc 4</td>
    </tr>   
    <tr id="etc_1_fr">
      <td>Etc 5</td>
      <td>Etc 6</td>
    </tr>   
    <tr id="etc_2_en">
      <td>Foo 1</td>
      <td>Foo 2</td>
    </tr>
    <tr id="etc_2_ru">
      <td>Foo 3</td>
      <td>Foo 4</td>
    </tr>   
    <tr id="etc_2_fr">
      <td>Foo 5</td>
      <td>Foo 6</td>
    </tr>       
  </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

因此,如果最后 2 个字符不等于,我需要遍历每一行并隐藏行en(通过此检查一切正常,我正在使用substr)。

我可以遍历以下所有行:

tbl = $('#myTable').DataTable(); …
Run Code Online (Sandbox Code Playgroud)

html javascript datatable jquery datatables

2
推荐指数
1
解决办法
1万
查看次数