我是一名学习软件开发的学生,我觉得编程一般来说太过广泛,无法尝试了解所有内容.要精通,你必须决定哪些领域要集中你的学习和理解.某些技能组合相互协作,如数据驱动的Web开发和SQL体验.但是,世界上所有的win32 API体验可能都不会直接适用于linux开发.这让我相信,作为一名初级程序员,在对软件开发的基本原理有一般了解之后,我应该开始决定我想要专攻的地方.
这是一个多部分的问题:
目前,当我设计表单时,我喜欢保持提交按钮的名称等于表单的ID.然后,在我的php中,我只是if(isset($_POST['submitName']))为了检查表单是否已提交以及表单已提交.
首先,这种方法有任何安全问题或设计缺陷吗?
我遇到的一个问题是当我希望用javascript覆盖我的表单时,为了向用户提供更快的验证.例如,虽然我显然需要保留服务器端验证,但如果在输入模糊时内联显示错误消息,则对用户更方便.此外,在单击提交按钮后提供整个表单验证会很好.
因此,当用户单击表单的提交按钮时,我将停止默认操作,进行验证,然后尝试重新设置传统提交功能(如果验证通过).为了做到这一点,我使用的form.submit()方法,但不幸的是,这不会发送提交按钮变量(因为它应该是没有任何按钮被点击时调用form.submit()).这意味着我的PHP脚本无法检测到表单已提交.
解决这个问题的正确方法是什么?看起来标准的解决方案是在传递验证时将隐藏字段添加到表单中,该验证具有表单id的名称.然后当调用form.submit()时,它将被传递而不是提交按钮.但是,这个解决方案对我来说似乎非常不合适,所以我想知道我是否应该:
a)使用另一种方法来检测哪个表单已经提交,而不依赖于传递提交按钮.如果有的话有什么替代方案?显然,从一开始就有一个额外的隐藏领域并不是更好.
b)使用另一种Javascript解决方案,它允许我保留我的非Javascript设计.例如,form.submit()是否有替代方法可以传递额外的数据?
c)将其吸收,然后使用Javascript插入隐藏的字段.
更新:我已经接受了正确的答案,但我只想澄清我的错误,这样对其他人更有帮助.我使用Mootools,我非常天真地相信,当我使用addEvent('submit'...)时,我需要立即调用event.stop()以防止提交.实际上并非如此,只有在验证失败时我才能调用event.stop().否则,像往常一样,默认提交被触发,并且使用form.submit()变得完全没必要.
我遇到了以下问题:我有一个不同类的对象树,其中子类中的操作使父类无效.在命令式语言中,这样做很简单.例如,在Java中:
public class A {
private List<B> m_children = new LinkedList<B>();
private boolean m_valid = true;
public void invalidate() {
m_valid = false;
}
public void addChild(B child) {
m_children.add(child);
child.m_parent = this;
}
}
public class B {
public A m_parent = null;
private int m_data = 0;
public void setData(int data) {
m_data = 0;
m_parent.invalidate();
}
}
public class Main {
public static void main(String[] args) {
A a = new A();
B b = new B(); …Run Code Online (Sandbox Code Playgroud) 我睡不着!:)
我在Haskell编写了一个构建双链表的小程序.基本语言的属性是懒惰的评估(参见下面的一堆代码).我的问题是,我可以做在同一个纯粹的功能性语言急于评估或不?在任何情况下,渴望功能语言必须具备哪些属性才能构建这样的结构(杂质?)?
import Data.List
data DLList a = DLNull |
DLNode { prev :: DLList a
, x :: a
, next :: DLList a
}
deriving (Show)
walkDLList :: (DLList a -> DLList a) -> DLList a -> [a]
walkDLList _ DLNull = []
walkDLList f n@(DLNode _ x _) = x : walkDLList f (f n)
-- Returns first and last items.
makeDLList :: [a] -> (DLList a, DLList a)
makeDLList xs …Run Code Online (Sandbox Code Playgroud) 我有一个ArrayList叫out,我需要把它转换为double[].我在网上找到的例子说了两件事:
第一次尝试:
double[] d = new double[out.size()];
out.toArray(d);
Run Code Online (Sandbox Code Playgroud)
但是,这会产生错误(eclipse):
The method toArray(T[]) in the type List<Double> is not applicable for the arguments (double[]).
Run Code Online (Sandbox Code Playgroud)
我找到的第二个解决方案是在StackOverflow上,并且是:
double[] dx = Arrays.copyOf(out.toArray(), out.toArray().length, double[].class);
Run Code Online (Sandbox Code Playgroud)
但是,这会产生错误:
The method copyOf(U[], int, Class<? extends T[]>) in the type Arrays is not applicable for the arguments (Object[], int, Class<double[]>)
Run Code Online (Sandbox Code Playgroud)
是什么导致了这些错误,如何out在double[]不创建这些问题的情况下转换为?out确实只有双重价值.
谢谢!
MethodInfo使用程序集的1.0版序列化的对象(具有私有字段)将不会使用该程序集的1.1版进行反序列化(SerializationException将抛出a,因为尚未找到所需的方法).
我发现在.NET 4.5中,MemberInfo通道的序列化机制MemberInfoSerializationHolder已经改变.在过去(直到.NET 4.0),序列化数据是方法签名(通过简单获得MethodInfo.ToString()).根据.NET源代码中的评论,他们添加了第二个签名,SerializationToString()因为:
m_signature存储有时不明确的成员的ToString()表示.相同方法或属性的多重重载可以与ToString()相同.m_signature2存储SerializationToString()表示,该表示对于每个成员应该是唯一的.它仅由post 4.0 CLR版本编写和使用.
我可以看到MemberInfoSerializationHolder.GetRealObject()使用这个(简化的)代码来解析方法(来自.NET源代码):
for (int i = 0; i < methods.Length; i++)
{
if (m_signature2 != null) // SerializationToString() signature
{
if (((RuntimeMethodInfo)methods[i]).SerializationToString().Equals(m_signature2))
{
methodInfo = methods[i];
break;
}
}
else
{
if (methods[i].ToString().Equals(m_signature))
{
methodInfo = methods[i];
break;
}
}
}
if (methodInfo == null)
throw new SerializationException(...);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,反序列化失败,因为m_signature2无法找到签名,因为程序集名称包含版本信息,然后String.Equals()将不匹配MyAssembly, Version=1.0.0.0,MyAssembly, Version=1.1.0.0并将抛出异常. …
我一直在重构一些相当苛刻的代码,并遇到了以下相当奇怪的构造:
#!/usr/bin/env python2.7
# ...
if (opts.foo or opts.bar or opts.baz) is None:
# (actual option names changed to protect the guilty)
sys.stderr.write("Some error messages that these are required arguments")
Run Code Online (Sandbox Code Playgroud)
......我想知道这是否会产生任何可想象的感觉.
我将其更改为:
#!/usr/bin/env python2.7
if None in (opts.foo, opts.bar, opts.baz):
# ...
Run Code Online (Sandbox Code Playgroud)
我确实启动了一个解释器并实际尝试了第一个构造......只有当值全部为假并且这些错误值的最后一个为None时,它才会起作用.(换句话说,CPython的实现似乎从一个或多个表达式返回第一个真值或最后一个假值).
我仍然怀疑正确的代码应该使用添加了2.5 的any()或all()内置函数(有问题的代码已经需要2.7).我还不确定哪个是首选的/预期的语义,因为我刚开始这个项目.
那么这个原始代码是否有意义呢?
我正在学习Haskell,并且在使用本教程中的基本因子函数时遇到了问题.
基本上,我已经定义了一个因子:
Prelude> let factorial 0 = 1
Prelude> let factorial n = n * factorial (n - 1)
Run Code Online (Sandbox Code Playgroud)
类型检查:
Prelude> :t factorial
factorial :: Num a => a -> a
Run Code Online (Sandbox Code Playgroud)
这是有道理的.但是,此功能的行为不会.(interactive): out of memory无论输入是什么,它都会导致结果.
Prelude> factorial 5
(interactive): out of memory
Run Code Online (Sandbox Code Playgroud)
我必须假设这是一个无限递归调用,导致内存不足错误,但我不确定是什么原因导致它.同样的事情发生了factorial 0,即使我已经明确宣布这是1:
Prelude> factorial 0
(interactive): out of memory
Run Code Online (Sandbox Code Playgroud)
现在,这是一个奇怪的部分:如果我在文件中定义阶乘函数,它工作正常.我创建一个文件tesths.hsst:
factorial 0 = 1
factorial n = n * factorial (n - 1)
Run Code Online (Sandbox Code Playgroud)
然后,如果我回到GHCI运行:l tesths.hs,我可以毫无错误地执行factorial 5. …
我正在使用Solrs TermsComponent来实现自动完成功能.我的文档包含我在"标签"字段中编入索引的标签.现在,我可以使用TermsComponent找出所有存储文档中使用的标记.到目前为止,这非常有效.
但是还有一些额外的要求:每个文档都有一个所有者字段,其中包含拥有它的用户的ID.自动填充列表应仅包含文档中的标记,请求自动填充的用户实际拥有该标记.
我试图设置查询参数,但这似乎被TermsComponent忽略:
public static List<String> findUniqueTags(String beginningWith, User owner) throws IOException {
SolrParams q = new SolrQuery().setQueryType("/terms")
.setQuery("owner:" + owner.id.toString())
.set(TermsParams.TERMS, true).set(TermsParams.TERMS_FIELD, "tags")
.set(TermsParams.TERMS_LOWER, beginningWith)
.set(TermsParams.TERMS_LOWER_INCLUSIVE, false)
.set(TermsParams.TERMS_PREFIX_STR, beginningWith);
QueryResponse queryResponse;
try {
queryResponse = getSolrServer().query(q);
} catch (SolrServerException e) {
Logger.error(e, "Error when querying server.");
throw new IOException(e);
}
NamedList tags = (NamedList) ((NamedList)queryResponse.getResponse().get("terms")).get("tags");
List<String> result = new ArrayList<String>();
for (Iterator iterator = tags.iterator(); iterator.hasNext();) {
Map.Entry tag = (Map.Entry) iterator.next();
result.add(tag.getKey().toString());
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
那么有没有办法限制由TermsComponent返回的标签,还是我手动查询用户的所有标签并自己过滤?
我可以将Style应用于下面"Labeled"的输出吗?
Manipulate[\[Lambda],
Control@{{\[Lambda], 401,
Style[" \[Lambda]", Black, Bold, 24]},
Range[401, 570, 1],
ControlType -> Slider,
ControlPlacement -> Bottom,
Appearance -> "Labeled",
ImageSize -> 200}]
Run Code Online (Sandbox Code Playgroud)
这是滑块的右侧部分:

haskell ×3
java ×2
list ×2
.net ×1
.net-4.5 ×1
arraylist ×1
arrays ×1
autocomplete ×1
correctness ×1
eager ×1
eclipse ×1
factorial ×1
imperative ×1
javascript ×1
php ×1
python ×1
solr ×1
solrj ×1
styles ×1