在提交之前验证HTML表单详细信息-使用php

在提交之前验证HTML表单详细信息-使用php,php,javascript,html,Php,Javascript,Html,我在我的网站上有一个上传表单,用户在这里输入他们上传文件的详细信息,选择文件并上传到Web服务器 表单的POST操作是将文件提交到一个名为upload_control.php的php页面,在该页面上验证POST详细信息,如果文件存储在磁盘上,则在数据库中放置一个条目。文件在存储之前被重命名为ID_name,其中ID是从数据库中获取的,是迄今为止最大的ID(只是一个计数器) 现在情况已经发生了变化,将文件上传到其他地方的存储更有意义。这是由用户直接完成的,如果表单提交正确,表单的操作将指向存储文件

我在我的网站上有一个上传表单,用户在这里输入他们上传文件的详细信息,选择文件并上传到Web服务器

表单的POST操作是将文件提交到一个名为upload_control.php的php页面,在该页面上验证POST详细信息,如果文件存储在磁盘上,则在数据库中放置一个条目。文件在存储之前被重命名为ID_name,其中ID是从数据库中获取的,是迄今为止最大的ID(只是一个计数器)

现在情况已经发生了变化,将文件上传到其他地方的存储更有意义。这是由用户直接完成的,如果表单提交正确,表单的操作将指向存储文件的另一个服务器。[我无法控制另一台服务器的处理,这是一个类似amazon s3的存储解决方案]

问题是:如何从数据库中获取上次使用的ID,以便在上传之前使用javascript将文件重命名为ID_filename?(我可以将文件名存储在一个隐藏的表单字段中,远程服务器在收到它时会理解重命名它)

更好的是:有没有一种方法可以验证所有表单细节——使用php。不是javascript,在将表单提交到存储解决方案之前


我的想法是在点击提交按钮但发布之前,使用ajax将表单详细信息发送到我服务器上的php脚本,这样php脚本就可以从数据库中获取最新的id,验证请求,发回新的详细信息或新的id,然后真正提交表单但如何才能做到这一点呢?

点击按钮,通过ajax调用php函数,并将从页面收集的所有数据作为json传递给服务,php在解析json方面非常强大。您可以从该方法返回结果,以指示数据是否经过身份验证。这是一个很好的教程,可以让你上钩


点击按钮,通过ajax调用php函数,并将从页面收集的所有数据作为json传递给服务,php非常擅长解析json。您可以从该方法返回结果,以指示数据是否经过身份验证。这是一个很好的教程,可以让你上钩


如果使用AJAX,用户总是会遇到这样的问题,即用户能够操作POST数据并将ID错误的文件注入S3存储。这意味着,您的S3存储可以用作免费的文件托管服务。我认为你应该考虑一个更合适的方式来完全控制上传的内容和名称。你为什么不倾向于使用JavaScript作为客户端的验证部分?无论您如何实施提交前验证,您都必须执行服务器端验证,以确保用户没有恶意操纵数据。@hakre:用户发送给S3的post请求包含策略文件和该策略的hmach sha1签名。如果我用php生成文件名,我可以在运行时创建一个与文件名匹配的策略,这样只有与确切文件名匹配的文件才会被接受。@Mattygabe:如上所述,php会更好,这样我也可以生成一个好的策略匹配文件。至于ID获取部分,我不知道如何使用javascript获取它-我必须在上传之前从数据库获取它。但是,如果我在提供上传页面之前使用php,如果两个用户同时尝试上传,我将面临ID不一致的风险。他们将从数据库中获得相同的“最后一个ID”。@george_mt假设您需要使用PHP进行验证,为什么不能使用本地AJAX调用对PHP函数进行验证,传递所有数据,并使用错误信息更新客户端,或者在成功后将数据提交给其他PHP函数。然后,该函数将生成良好的策略匹配文件,并在将信息发送到S3之前随时获取最新的ID?如果使用AJAX,用户总是会遇到这样的问题,即用户能够操作POST数据并将具有错误ID的文件注入S3存储。这意味着,您的S3存储可以用作免费的文件托管服务。我认为你应该考虑一个更合适的方式来完全控制上传的内容和名称。你为什么不倾向于使用JavaScript作为客户端的验证部分?无论您如何实施提交前验证,您都必须执行服务器端验证,以确保用户没有恶意操纵数据。@hakre:用户发送给S3的post请求包含策略文件和该策略的hmach sha1签名。如果我用php生成文件名,我可以在运行时创建一个与文件名匹配的策略,这样只有与确切文件名匹配的文件才会被接受。@Mattygabe:如上所述,php会更好,这样我也可以生成一个好的策略匹配文件。至于ID获取部分,我不知道如何使用javascript获取它-我必须在上传之前从数据库获取它。但是,如果我在提供上传页面之前使用php,如果两个用户同时尝试上传,我将面临ID不一致的风险。他们将从数据库中获得相同的“最后一个ID”。@george_mt假设您需要使用PHP进行验证,为什么不能使用本地AJAX调用对PHP函数进行验证,传递所有数据,并使用错误信息更新客户端,或者在成功后将数据提交给其他PHP函数。然后,该函数将生成良好的策略匹配文件,并在将信息发送到S3之前随时获取最新的ID?