小编Web*_*eng的帖子

管理CSS爆炸

我一直非常依赖CSS来处理我正在开发的网站.现在,所有的CSS样式都是基于每个标签应用的,所以现在我试图将它移动到更多的外部样式,以帮助进行任何未来的更改.

但现在问题是我注意到我正在进行"CSS爆炸".我很难决定如何在CSS文件中最好地组织和抽象数据.

我在网站中使用大量div标签,从一个基于表格的网站转移.所以我得到了很多看起来像这样的CSS选择器:

div.title {
  background-color: blue;
  color: white;
  text-align: center;
}

div.footer {
  /* Styles Here */
}

div.body {
  /* Styles Here */
}

/* And many more */
Run Code Online (Sandbox Code Playgroud)

这还不算太糟糕,但由于我是初学者,我想知道是否可以就如何最好地组织CSS文件的各个部分提出建议.我不想为我网站上的每个元素都有一个单独的CSS属性,而且我总是希望CSS文件相当直观且易于阅读.

我的最终目标是使CSS文件易于使用并展示其提高Web开发速度的能力.这样,将来可能在这个网站上工作的其他人也会参与使用良好编码实践的做法,而不是像我那样去做.

css organization

681
推荐指数
10
解决办法
4万
查看次数

了解pdo mysql事务

PHP文件说:

如果您以前从未遇到过交易,它们提供了4个主要功能:原子性,一致性,隔离和耐用性(ACID).通俗地说,任何在交易中进行的工作,即使是分阶段进行的,也可以保证安全地应用于数据库,并且在承诺时不受其他连接的干扰.

题:

这是否意味着我可以有两个单独的PHP脚本同时运行事务而不会相互干扰?


通过 " 干扰 "来实现我的意思:

想象一下,我们有下employees表:

 __________________________
|  id  |  name  |  salary  |
|------+--------+----------|
|  1   |  ana   |   10000  |
|------+--------+----------|
Run Code Online (Sandbox Code Playgroud)

如果我有两个具有相似/相同代码的脚本,并且它们在同一时间运行:

script1.phpscript2.php(两者都有相同的代码):

$conn->beginTransaction();

$stmt = $conn->prepare("SELECT * FROM employees WHERE name = ?");
$stmt->execute(['ana']);
$row = $stmt->fetch(PDO::FETCH_ASSOC);

$salary = $row['salary'];
$salary = $salary + 1000;//increasing salary

$stmt = $conn->prepare("UPDATE employees SET salary = {$salary} WHERE name = ?");
$stmt->execute(['ana']);

$conn->commit(); 
Run Code Online (Sandbox Code Playgroud)

并假设事件序列如下:

  • script1.php选择数据

  • script2.php …

php mysql pdo transactions

18
推荐指数
3
解决办法
1461
查看次数

初始化对象时类类型前的反斜杠

我已经看到很多代码在启动新对象时在类类型之前包含一个反斜杠:

db = new \PDO($dsn, $username, $password);
Run Code Online (Sandbox Code Playgroud)

题:

前面代码中反斜杠的目的是什么?

我的推论:

我经常使用 db = new PDO(...)在我的代码中使用没有反斜杠来建立与 MySQL 的连接,它对我来说效果很好,尽管我经常在其他用户的代码中看到反斜杠。乍一看,它似乎指定了一个类的路径,尽管这对我来说似乎很奇怪,因为我通常/在我的代码中使用正斜杠作为路径,也因为我从来没有读过或看到在启动一个任何类类型的对象。

考虑到该代码没有反斜杠对我有用,我对这样做的目的感到困惑 \可能。

我试图找到有关它的文档但没有成功(http://php.net/manual/en/language.oop5.php)尽管我确定它在那里。

php oop class

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

理解<a href ="#!"

我正在寻找一种方法来防止在单击属性#内部的链接后被带到页面顶部href:

<a href="#" onclick="foobar()">click me</a>
Run Code Online (Sandbox Code Playgroud)

然后我遇到了这个简单的解决方案,切换##!:

<a href="#!" onclick="foobar()">click me</a>
Run Code Online (Sandbox Code Playgroud)

例如,使用jQuery在线提供了各种其他解决方案:

$('.service').click(function(e) {
    e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

我最终喜欢#!这么干净最不喜欢在网上找到任何关于在插入!代码行时实际发生的事情的文档.

题:

究竟是什么#!导致html代码呢?这是防止将用户置于页面顶部的默认操作的好方法,还是这种方法因其他原因而不好?我担心的是它可能是一种与某些浏览器不兼容的hacky方法.

html javascript css

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

禁用内容安全策略

当我在开发网站时,我经常想看看网站上的特定功能.所以我转到chrome开发人员工具并经常运行一些javascript脚本.

我经常发现一些脚本由于内容安全策略(CSP)而无法运行的问题,我完全理解这是为了防止跨站点脚本.

问题:由于我在浏览器客户端上为我加载的页面上使用开发人员控制台测试功能,我想知道是否有一种方法可以在加载后禁用该特定页面的CSP?可能在源代码中的某个地方有inspect元素,或者在开发人员控制台的某些设置部分.

javascript google-chrome-devtools content-security-policy

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

检查文件是否存在于其他网站上

我一直在尝试开发代码来检查另一个网站上是否存在 pdf 文件。为了测试目的,我在网上找到了一个随机的pdf文件:

http://www.tutorialspoint.com/php/php_tutorial.pdf

我尝试了以下代码,这两种方法都不起作用:

方法一:

$path1 = 'http://www.tutorialspoint.com/php/php_tutorial.pdf';
if (file_exists($path1))
{
  echo "found!";
}
else
{
  echo "not found";
}

//RESULT: not found
Run Code Online (Sandbox Code Playgroud)

方法二:

function UR_exists($url){
   $headers=get_headers($url);
   return stripos($headers[0],"200 OK")?true:false;
}

if(UR_exists('http://www.tutorialspoint.com/php/php_tutorial.pdf'))
   echo "This page exists";
else
   echo "This page does not exist";

//RESULT: This page does not exist
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,页面都执行得很好,但结果总是文件不存在,而我知道它存在,哈哈。我究竟做错了什么?

php

3
推荐指数
1
解决办法
2628
查看次数

了解 PDO 准备语句和绑定参数

根据经验,并且不断被告知使用准备好的语句和绑定参数的好处,我在代码中不断使用这两种技术,但是我想确切地了解这两种技术的用途:

根据我对准备好的陈述的理解:

$sql = "SELECT * FROM myTable WHERE id = ".$id;
$stmt = $conn->prepare($sql);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)

前面的代码应该使用我建议的查询在数据库中创建一种缓冲区。现在根据我的理解(我可能是非常错误的),前面的代码是不安全的,因为字符串$sql可以是任何内容,具体取决于$id实际情况,如果$id= 1; DROP TABLE myTable;--,即使我有准备好的语句,我也会插入恶意查询。

根据我的理解,这是绑定我的参数的地方。如果我执行以下操作:

$sql = "SELECT * FROM myTable WHERE id = :id";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)

数据库应该事先准确地知道sql语句的所有部分: SELECT这些列:* FROM myTableWHERE id =“用户输入的变量”,如果"a variable that was input by the user" != a variable,则查询失败。

有些人告诉我我的理解是正确的,而另一些人则告诉我这是错误的,如果我错了、正确或遗漏了什么,有人可以告诉我吗?并根据您的需要进行详细说明,非常感谢所有反馈!

php mysql pdo prepare bindparam

3
推荐指数
1
解决办法
6765
查看次数

简写PDO查询

目前要使用PDO执行查询,我使用以下代码行:

$sql = "SELECT * FROM myTable WHERE id = :id";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)

经过一些研究,我找到了一种执行相同命令的简短方法:

$stmt_test = $conn->prepare("SELECT * FROM status WHERE status_id = ?");
$stmt_test->execute([$id])->fetchAll(PDO::FETCH_ASSOC);
$result = $stmt_test->fetchAll(PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)

从那里我想我可以使用以下代码缩短它:

$stmt_test = $conn->prepare("SELECT * FROM status WHERE status_id = ?");
$result = $stmt_test->execute([$id])->fetchAll(PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

致命错误:在第20行的/home/.../index.php中的非对象上调用成员函数fetchAll()

问题:为什么我收到此错误?从我的理解,$stmt_test->execute([$id])应该首先执行,然后结果将执行->fetchAll(PDO::FETCH_ASSOC)和从那里返回数组$result,但由于错误发生,我的逻辑中必须有一些缺陷.我究竟做错了什么?此外,有没有人知道一个更好的速记方法来执行以前的查询?

php mysql pdo

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

谷歌地图api定位角坐标

问题:有没有一种方法可以让我在每次zooms in, zooms out, 或shift地图时找到 google 地图角点的坐标?

详细说明我的意思:

在我的 google maps api 代码中,我为地图提供了特定的宽度和高度:

<style>
    #map {
        width:400px;
        height:300px;
    }
</style>
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="map"></div>
<script>
    var mapOptions = {
        center: new google.maps.LatLng(37.7831, -122.4039),
        zoom: 12,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById('map'), mapOptions);
</script>
Run Code Online (Sandbox Code Playgroud)

现在,当用户使用滚动查看地图中更远或更远的地方时,此宽度和高度显然保持不变,但是地图上的坐标位于

top-left corner
top-right corner
bottom-left corner
bottom-right corner
Run Code Online (Sandbox Code Playgroud)

随着用户移动地图而改变。我一直试图找到一种方法来获得这些坐标,但我的尝试失败了。

javascript google-maps coordinates google-maps-api-3

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