【问题标题】:How to process tell-a-friend data?如何处理告诉朋友的数据?
【发布时间】:2010-12-14 06:45:04
【问题描述】:

我正在编写一个基本上具有告诉朋友功能的脚本,但我正在尝试找出捕获和处理数据的最佳方法。

例如:

  1. 我是否显示 5 对字段来询问姓名和电子邮件,每对字段分别为 $friend_name1/$friend_email1、$friend_name2/$friend_email2 等,这样您就可以一次向 5 个朋友发送电子邮件?

  2. 我是否显示一对并使用 JavaScript 允许用户使用变量命名约定 #1 继续添加更多朋友?

  3. 我是否按照 #1 或 #2 中的建议显示它们,然后提交一个数组,例如$friend_email[]/$friend_name[]等

捕获数据的最佳方式是什么?

那么处理数据的最佳方式是什么?

如果你得到一个数组,比如#3,你会循环遍历每个 $friend_name $_POST 吗?您是否将其存储在另一个数组中?您如何确保正确的姓名/电子邮件组合保持在一起,例如,如果用户没有为第三个朋友添加“姓名”?

大多数人如何做到这一点,以便在捕捉过程中保持灵活性并在处理过程中保持精确?我真的在这里寻找逻辑,尽管非常感谢示例代码。

我正在跟踪的一件事是谁在指代谁。例如,如果 A 推荐 B 而 B 买东西,A 将受益。所以准确性和安全性对我来说非常重要。

谢谢, 瑞恩

【问题讨论】:

  • 作为更新:最终我没有选择选择的答案。它确实完美地解决了这个问题,但我也希望以后能够克隆姓名和电子邮件字段,以便用户可以选择通过单击链接添加更多朋友。通过在我原来的问题中使用方法#3,这使得克隆非常容易。您可以在此处阅读其余部分:stackoverflow.com/questions/4495771/cloning-with-jquery

标签: php javascript forms


【解决方案1】:

我会推荐数组。您可以使用 javascript 或其他方式,但要确保处理端可以看到有多少引荐。为确保正确的电子邮件和姓名保持一致,请尝试类似

<input type="text" name="friend_name[0]" />
<input type="text" name="friend_email[0]" />
<input type="text" name="friend_name[1]" />
<input type="text" name="friend_email[1]" />

等等。从那里,您的 PHP 脚本将简单地匹配 $_POST var 中的数组索引。例如,如果这个表单被提交(如上)带有一些任意数据,它的格式会是这样的(这是 print_r($_POST); 数据)

Array
(
    [friend_name] => Array
        (
            [0] => test_name
            [1] => test_name2
        )

    [friend_email] => Array
        (
            [0] => email@something.com
            [1] => email@two.com
        )

)

循环遍历这些的一个想法(如果您实现了具有“无限”数量推荐的潜力的 javascript)将使用 count();功能。实现看起来像这样:

for($i=0;$i<count($_POST['friend_name']);++$i)
{
    if($_POST['friend_email'][$i] == NULL) continue; // Ignore NULL e-mails
    // Process data blah
}

或者,如果输入的名称乱序,PHP 的 foreach() 功能非常好,可以完成同样的事情(对于这种类型的错误检查可能更有效)

foreach($_POST['friend_name'] as $key => $val)
{
    if($_POST['friend_email'][$key] == NULL) continue; // Ignore NULL e-mails
    // Process $val and $_POST['friend_email'][$key]
}

希望这会有所帮助!祝你好运!

丹尼斯·M.

【讨论】:

    【解决方案2】:

    这些是 UI 问题,答案是您认为最适合您网站的 UI。您可能有一个设计,其中固定数量的字段更适合,或者您可能有一个人口统计,其中“添加另一个字段”按钮太混乱了。无论哪种方式,处理表单的代码都不必与您呈现 UI 的方式相关。

    关于如果将字段命名为数组时确保字段保持关联,请自行指定索引而不是使用左括号,这样就不会有这个问题。

    <input type="text" name="name[0]" value="First Friend's Name" />
    <input type="text" name="email[0]" value="First Friend's E-mail" />
    
    <input type="text" name="name[1]" value="Second Friend's Name" />
    <input type="text" name="email[1]" value="Second Friend's E-mail" />
    

    然后在你的代码中,

    foreach ($_POST['email'] as $index => $value) {
        $name = $POST['name'][$index];
        $email = $_POST['email'][$index];
    }
    

    在循环中,$name$email 将来自表单中的同一组字段,尽管它们仍然可以为空。

    【讨论】:

      猜你喜欢
      • 2012-04-03
      • 1970-01-01
      • 2018-12-05
      • 2013-11-16
      • 1970-01-01
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多