我cfloop在一个查询中.我想获得一个属性,但是直到运行时我才知道该属性是什么.使用#qryResult[MyAttr]#失败并显示错误"复杂对象类型无法转换为简单值".这样做的语法是什么?
这是一个简化的例子:
<cfquery datasource="TestSource" name="qryResult">
SELECT * FROM MyTable
</cfquery>
<cfloop query="qryResult">
<cfset MyAttr="autoid" />
<cfoutput>
Test 1: #qryResult.autoid# <br/> <!--- succeeds --->
Test 2: #qryResult[MyAttr]# <br/> <!--- fails --->
</cfoutput>
</cfloop>
Run Code Online (Sandbox Code Playgroud) 我在ColdFusion中访问映射驱动器时遇到问题.我已\\server\files\sharing映射到z:\.如果我运行此代码,它表示该目录存在完整路径但不存在映射的目录:
<cfscript>
fullPath = "\\server\files\sharing\reports";
mappedPath = "z:\reports";
WriteOutput("fullPath exists: #DirectoryExists(fullPath)#<br/>"); //YES
WriteOutput("mappedPath exists: #DirectoryExists(mappedPath)#"); //NO
</cfscript>
Run Code Online (Sandbox Code Playgroud)
我做了一些谷歌搜索并找到了一些有同样问题的人,但解决方案始终是使用完整路径.ColdFusion是否有理由无法查看或访问映射驱动器?如果是这样,是否有任何变通方法(可能是系统调用以获取映射驱动器的完整路径)?
更新:我找到了解决方法.如果我提交一个虚拟表单字段和文件,它可以工作.这是一个ColdFusion错误,还是HTTP规范中有些内容表明表单必须包含至少一个非文件表单字段?
更新2:我确信这是一个ColdFusion cfhttp错误.这是基于Leigh的答案以及我使用下面的代码使用javascript 仅使用文件元素提交表单的事实,并且它工作正常:
<form enctype="multipart/form-data" action="<cfoutput>#CGI.PATH_INFO#</cfoutput>" method="POST" name="theForm">
<input name="theFile" type="file" /><br/>
</form>
<a href="#" onclick="document.theForm.submit()">submit</a>
Run Code Online (Sandbox Code Playgroud)
我在将文件从ColdFusion服务器上传到另一个Web服务器时遇到了问题.似乎cfhttpparam type="file"是不加选择地在文件末尾添加换行符(回车符和换行符).这打破了二进制文件.这不,当我手动上传通过表单字段的文件发生.我尝试过有和没有mimetype参数,我试过用各种二进制格式(exe,zip,jpg)说谎mimetype,但没有任何效果.是否有一些我缺少的参数,或者这是ColdFusion中的一个错误?(我在WinXP上运行CF 8.0.1.195765.)
下面是我正在使用的测试代码,它只是将文件上传到同一目录.手动上载有效,但基于服务器的上载最终会将CRLF附加到文件中.
<cfset MyDir = "C:\test" />
<cfset MyFile = "test.zip" />
<cfif IsDefined("Form.TheFile")>
<cffile action="upload" fileField="theFile" destination="#MyDir#" nameConflict="MakeUnique" />
<cfelse>
<cfhttp url="http://#CGI.SERVER_NAME##CGI.SCRIPT_NAME#" method="POST" throwOnError="Yes">
<cfhttpparam type="file" name="theFile" file="#MyDir#\#MyFile#" />
</cfhttp>
</cfif>
<html><body>
<h2>Manual upload</h2>
<form enctype="multipart/form-data" action="<cfoutput>#CGI.PATH_INFO#</cfoutput>" method="POST">
<input name="theFile" type="file" /><br/>
<input type="submit" value="Submit" />
</form>
</body></html>
Run Code Online (Sandbox Code Playgroud) 我遇到过一种情况,Javascript 字符串插值没有给出与字符串连接相同的结果。
这是显示差异的代码的简化版本:
const mmt = moment();
console.log('concatenated: ' + mmt); // "concatenated: 1651070909974"
console.log(`interpolated: ${mmt}`); // "interpolated: Wed Apr 27 2022 10:48:29 GMT-0400"
console.log('mmt.valueOf(): ' + mmt.valueOf()); // "mmt.valueOf(): 1651070909974"
console.log('mmt.toString(): ' + mmt.toString()); // "mmt.toString(): Wed Apr 27 2022 10:48:29 GMT-0400"
Run Code Online (Sandbox Code Playgroud)
所以我的第一反应是,这是由于.toString()和的差异造成.valueOf()的,所以我做了一个小测试对象来验证:
const obj = {
toString: () => 'toString',
valueOf: () => 'valueOf',
};
console.log('concatenated: ' + obj); // "concatenated: valueOf"
console.log(`interpolated: ${obj}`); // "interpolated: toString"
console.log('obj.valueOf(): ' + obj.valueOf()); // "obj.valueOf(): valueOf" …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个Perl正则表达式,它将使任何以空格开头的字符(或字符串中的第一个字符串)大写.
我很确定有一种简单的方法可以做到这一点,但我没有方便的Perl书,我不经常这样做,我记住它...
我是PHP的新手,我正在尝试学习如何解析信息,我正在尝试使用CURL,但我无法在Windows Vista上的桌面WAMP上安装它.如何安装CURL?
我有一个不幸的任务,清理一堆旧的ColdFusion代码.查询到处都是,我正在努力将它们全部转移到普通的CFC上以便于维护.
我遇到了一个问题,因为cfquery它会自动将单引号转换为双引号.我该如何覆盖这种行为?
更具体的信息如下.
所以这是我开始的查询:
<cfquery name="getObjectInfo" datasource="#BaseDS#">
SELECT groupName AS lastname, '[Group]' AS firstname
FROM groups
WHERE groups.group_id = #objectreference_id#
</cfquery>
Run Code Online (Sandbox Code Playgroud)
这里奇怪的是文字被"选中",因为我们希望它被显示的方式(再次,我没有写这个,我只是想把它清理一下).所以在common函数中,select子句有一个可选参数:
<cffunction name="fSelGroup" access="public" returntype="query"
hint="Returns query selecting given group.">
<cfargument name="intGroupID" type="numeric" required="true"
hint="ID of group to be returned." />
<cfargument name="strSelectAttributes" type="string" required="false"
hint="Attributes to be selected in query"
default="*" />
<cfquery name="getObjectInfo" datasource="#Application.DataSource#">
SELECT #Arguments.strSelectAttributes#
FROM Groups
WHERE Group_ID = #Arguments.intGroupID#
</cfquery>
<cfreturn getObjectInfo />
</cffunction>
Run Code Online (Sandbox Code Playgroud)
这是问题:当我传入"GroupName AS LastName, '[Group]' AS FirstName" …
部分代码:
我的下面的代码从我的数据库中提取查询,然后使用inner.HTML =来显示div中的数据.它在原始使用中工作正常....
但是,以下版本在iFrame中调用,因为它用于更新页面.
页面没有错误,然后JavaScript触发,但最后一行不起作用...
我刚刚意识到,可能因为它是在隐藏的iFrame中加载它试图在iFrame中设置div的innerHTML,当然这不会起作用.
这是发生了什么?它没有意义,因为我有另一个脚本以相同的方式在它的末尾调用JavaScript,它工作正常.
<?php
while ($row = mysql_fetch_array($result))
{
$p = $p.'<div id="left"><img src="http://www.sharingizcaring.com/bleepV2/images/thumbs/'.$row[image].'" /></div>';
$p = $p.'<div id="right"><h2>'.$row[artist].' - '.$row['title'].'</h2><br>'.$row['message'].'<br>';
$p = $p.'<a href="http://www.sharingizcaring.com/bleepV2/'.$row[username].'">'.$row[username].'</a> '.$row[date].'</div>';
$p = $p.'<div style="clear: both;"></div>';
$p = $p.'<div id="dotted-line"></div>';
}
$p = addslashes($p);
?>
<script>
alert('posts are firing? ');
document.getElementById('posts').innerHTML = 'why doth this faileth?';
</script>
Run Code Online (Sandbox Code Playgroud) 我正在使用一些旧代码.它使用内置的ColdFusion表单验证(即_required隐藏字段).我想在表单中添加一个取消按钮.取消按钮必须实际处理一些业务逻辑(所以我不能让它将location.href设置为其他页面).问题是,因为取消按钮是提交按钮,它会触发内置验证,并且用户会收到该字段所需的错误.
有没有办法禁用该特定提交按钮的验证?我宁愿不尝试修改构建表单的底层代码,因为它在一堆地方使用.这是我的代码的大大简化版本:
<cfif IsDefined("Form.OK")>
You clicked OK!
<cfelseif IsDefined("Form.Cancel")>
You clicked Cancel!
</cfif>
<cfoutput>
<form action="#CGI.Path_Info#" method="POST">
Enter Name: <input type="text" name="Name" value="" /><br/>
<input type="hidden" name="Name_required" value="" />
<input type="submit" name="OK" value="OK" />
<input type="submit" name="Cancel" value="Cancel" />
</form>
</cfoutput>
Run Code Online (Sandbox Code Playgroud)
我想到的一件事是让取消按钮的onclick删除DOM中任何隐藏的"_required"字段.这有效,但感觉非常hacky.这是我用于该方法的Javascript:
<script type="text/javascript">
function removeRequiredFields() {
var els = document.getElementsByTagName('input');
for(var i = 0; i <= els.length; i++) {
if(els[i].type == 'hidden' && els[i].name.endsWith('_required'))
els[i].parentNode.removeChild(els[i]);
}
}
</script>
Run Code Online (Sandbox Code Playgroud) 我想确保通过查询字符串设置的文件路径不会超出所需的子目录.现在,我正在检查:
/" 开头,以防止用户给出绝对路径...",以防止用户提供所需子目录之外的路径.:",以防止使用URL(即" http://"," ftp://"等).我是否应该在Windows服务器上运行此脚本(不太可能),这也将阻止以驱动器说明符(即" C:\")开头的绝对路径.注意:我知道冒号是Unix文件名中的有效字符,但我永远不会在文件名中使用它.\" 开头.为了防止我改变主意在Windows服务器上运行,这可以防止指定Windows网络路径(即" \\someserver\someshare").同样,我知道反斜杠是一个有效的Unix文件名字符,但我也不会在任何文件名中使用它.这些检查是否足够?
背景
我有一个PHP脚本,它(通过查询字符串)获取要显示给用户的示例源文件的路径.所以我可能会给他们一个像" view_sample.php?path=accounting_app/report_view.php"或" view_sample.php?path=ajax_demo/get_info.js" 这样的链接.
脚本看起来基本上是这样的:
$path = $_GET['path'];
if(path_is_valid($path) && is_file("sample/$path"))
{
header('Content-Type: text/plain');
readfile("sample/$path");
}
Run Code Online (Sandbox Code Playgroud)
我担心的是,恶意用户会看到该网址,并尝试执行类似" view_sample.php?path=../../database/connection_info.php"的操作,并获取对不在 "sample"目录中的文件的访问权限.
我在上面定义的四个检查(将在path_is_valid()功能中实现)是否足以锁定恶意用户?(另外,我认为支票1,3和4基本上是无关紧要的,因为我在前面设置相对路径,但是如果我不这样做,那么检查是否足够?)
coldfusion ×5
javascript ×2
sanitization ×2
cfloop ×1
cfquery ×1
curl ×1
ecmascript-6 ×1
file ×1
file-upload ×1
forms ×1
iframe ×1
libcurl ×1
networking ×1
perl ×1
php ×1
regex ×1
security ×1
sql ×1
validation ×1
wamp ×1
windows ×1