我正在尝试将PHPMailer用于一个小项目,但我对使用该软件进行错误处理感到困惑.希望有人有经验.当我设置电子邮件时,我使用:
$result = $mail->Send();
if(!$result) {
// There was an error
// Do some error handling things here
} else {
echo "Email successful";
}
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,或多或少.问题是当出现错误时,PHPMailer似乎也将错误消除了,所以如果出现问题,它只是将该信息直接发送到浏览器,基本上打破了我试图做的任何错误处理.
有没有办法让这些消息沉默?它没有抛出异常,只是打印出错误,在我的测试用例中是:
invalid address: @invalid@email You must provide at least one recipient email address.
Run Code Online (Sandbox Code Playgroud)
它意味着是一个错误,但它应该驻留在$ mail-> ErrorInfo; 没有被软件回应.
我正在努力学习在PHP中使用mysqli的预处理语句,通常,如果我遇到查询问题,我只需将它回显到屏幕上,看看它的第一步看起来是什么样子.
如何用准备好的声明做到这一点?
我希望在替换变量后看到SQL语句.
我知道这很容易在jQuery或任何其他框架中完成,但这不是重点.如何在纯JavaScript中"正确"绑定点击事件?我知道怎么做内联(我知道这很可怕)
<a href="doc.html" onclick="myFunc(); return false">click here</a>
Run Code Online (Sandbox Code Playgroud)
这导致我的javascript为一个支持JS的浏览器执行,并且链接为没有javascript的人正常运行?
现在,我如何以非内联方式执行相同的操作?
我正准备查询mySQL以获取前一周的记录,但我必须将周视为周一至周日.我原来是这样做的:
WHERE YEARWEEK(contactDate) = YEARWEEK(DATE_SUB(CURDATE(),INTERVAL 7 DAY))
Run Code Online (Sandbox Code Playgroud)
发现mySQL将周视为周日 - 周一.所以我正在解析在php中获取开始和结束日期,如下所示:
$i = 0;
while(date('D',mktime(0,0,0,date('m'), date('d')-$i, date('y'))) != "Mon") {
$i++;
}
$start_date = date('Y-n-j', mktime(0,0,0,date('m'), date('d')-($i+7), date('y')));
$end_date = date('Y-n-j', mktime(0,0,0,date('m'), date('d')-($i+1), date('y')));
Run Code Online (Sandbox Code Playgroud)
这是有效的 - 它获得当周的星期一(向后走,直到星期一被击中)然后根据该日期计算前一周的日期.
我的问题是:有更好的方法吗?看起来很草率,我希望那里有人可以给我一个更干净的方法 - 或许不是因为我需要周一 - 周日周.
显然,有:
$start = date('Y-m-d',strtotime('last monday -7 days'));
$end = date('Y-m-d',strtotime('last monday -1 days'));
Run Code Online (Sandbox Code Playgroud)
这大约是可读性的一百万倍.谢谢.
是否可以在mySQL中对2行进行排序?例如,我有2个排,lp
和ap
我想要做这样的事情:
SELECT * from myTbl WHERE 1 ORDER BY (lp/ap)
Run Code Online (Sandbox Code Playgroud)
哪个不是抛出错误,但它也没有按计算结果排序.有没有办法做到这一点,还是我必须在数据库中存储lp/ap?
在jquery 1.3.2中,以下工作:
<select id="c">
<option value="325">Red</option>
<option value="833">Purple</option>
</select>
$('#c').val('Red');
Run Code Online (Sandbox Code Playgroud)
并且它将选项更改为选项,并将RED作为其标签.在jQuery 1.4中,这失败了.如何在1.4中获得相同的结果?这是1.3版本中的错误吗?
我有一个面向对象的库我想添加一个方法,虽然我很确定我可以进入该库的源并添加它,我想这就是通常所说的坏主意.
我如何正确地将自己的方法添加到PHP对象?
更新 **编辑**
我试图添加一个方法的库是simpleHTML,没什么特别的,只是一种提高可读性的方法.所以我尝试添加到我的代码中:
class simpleHTMLDOM extends simple_html_dom {
public function remove_node() {
$this->outertext = "";
}
}
Run Code Online (Sandbox Code Playgroud)
这让我:Fatal error: Call to undefined method simple_html_dom_node::remove_node()
.很明显,当你在simpleHTML中获取一个元素时,它返回一个类型为simple_html_dom_node的对象.
如果我将方法添加到simple_html_dom_node
我的子类不是由simpleHTML创建的...那么坚持下一步去哪里.
我开始使用一些看起来像这样的XML(简化):
<?xml version="1.0" encoding="UTF-8"?>
<alldata>
<data name="Forsetì" />
</alldata>
</xml>
Run Code Online (Sandbox Code Playgroud)
但是在我用simplexml_load_string
特殊字符(i)解析之后,它变得ì
非常明显.
有没有办法防止这种情况发生?
我知道XML很好,当保存为.txt并在浏览器中查看时,字符很好.当我在XML上使用simplexml_load_string然后将值保存为文本文件或数据库时,它会被破坏.
我试图使用array_walk_recursive
某些东西,并希望使用其中一个类'方法作为回调,所以尝试:
array_walk_recursive($TAINTED, "$this->encode()");
Run Code Online (Sandbox Code Playgroud)
其变化都失败了.我最终安顿下来:
array_walk_recursive($TAINTED, 'className::encode');
Run Code Online (Sandbox Code Playgroud)
这是有效的,但我在这里读到,以这种静态方式调用类方法通常被认为是不好的做法.或者这是必要的情况之一?
那么,这是正确的方法吗,还是有办法放入回调函数而不必依赖它作为静态类方法?
我正在通过AJAX检索整个HTML文档 - 这很好.但我需要提取该文档的某些部分并使用它们进行操作.
使用框架(jquery,mootools等)不是一种选择.
我能想到的唯一解决方案是使用正则表达式获取HTML文档的正文(是的,我知道,很糟糕),即.<body>(.*)</body>
将它放入隐藏元素中的当前页面的DOM中,并从那里开始使用它.
有更简单/更好的方法吗?
我已经完成了一些测试,并且在我测试的浏览器中,将整个HTML文档插入到创建的元素中的行为有点不同.例如:
IE7和Safari的行为是理想的,但不同的浏览器以不同的方式做这件事.由于我正在加载一个预定的HTML文档,我想我将使用regEx来获取我想要的内容并将其插入到DOM元素中 - 除非有人有其他建议.