【问题标题】:Validate phone number in contact form验证联系表格中的电话号码
【发布时间】:2013-06-06 10:35:39
【问题描述】:

我有这个表格Link 验证应该验证是否输入了有效的电话号码,如果没有,则 给出错误文本“Bitte geben Sie eine gültige Telefonnummer an”,但验证始终给出相同的英文消息“Bitte geben Sie Ihre Telefonnummer an”,即使您输入了无效字符,也请输入您的电话号码。

PHP:

function setParams($post)
{
    if ( ! $this->name = strip_tags(trim($post['name'])))
    {
        $this->error[] = 'Bitte geben Sie Ihren Namen an.';
    }
    if ( ! $this->phone = strip_tags(trim($post['phone'])))
    {
        $this->error[] = 'Bitte geben Sie Ihre Telefonnummer an.';
    } else if ( preg_match('#[^0-9\+\-\040/]#', $phone) )
    {
        $this->error[] = 'Bitte geben Sie eine gültige Telefonnummer an.';
    }   

    if ( ! $this->email = strip_tags(trim($post['email'])))
    {
        $this->error[] = 'Bitte geben Sie Ihre E-Mail-Adresse an.';
    } else if ( ! filter_var($this->email, FILTER_VALIDATE_EMAIL) || strstr($this->email, '@') === FALSE)
    {
        $this->error[] = 'Bitte geben Sie eine gültige E-Mail-Adresse an.';
    }
    if ( ! $this->body = strip_tags(trim($post['message'])))
    {
        $this->error[] = 'Bitte geben Sie einen Nachrichtentext ein.';
    }

HTML:

<form action="kontakt.php" method="post">
            <label for="name">Ihr Name:</label><input class="get1" type="text"     name="name" value="" /><br />
            <label for="telefon">Telefonnummer (bitte nur Ziffern):</label><input     class="get1" type="text" name="phone" value="" /><br />
            <label for="email">E-Mail-Adresse:</label><input class="get1" type="text"     name="email" value="" /><br />
            <label for="message">Ihre Mitteilung an uns:</label><textarea cols="20"     rows="5" name="message"></textarea><br />
            <label>Welche Leistungen interessieren Sie besonders?    </label>
            <label style="display:inline;" for="dachstuehle">Dachstühle</label>  <input     class="kaestchen" type="checkbox" name="interessen[]" id="dachstuehle" value="dachstuehle"     />
            <label style="display:inline;" for="holzbau">Holzbau</label>         <input class="kaestchen" type="checkbox" name="interessen[]" id="holzbau" value="holzbau" />
            <label style="display:inline;" for="innenausbau">Innenausbau</label> <input class="kaestchen" type="checkbox" name="interessen[]" id="innenausbau" value="innenausbau" />
            <label style="display:inline;" for="trocken">Trockenbau</label>      <input class="kaestchen" type="checkbox" name="interessen[]" id="trockenbau" value="trockenbau" /><br /><br />
            <input type="hidden" value="1" name="s" />
            <input type="submit" value="Nachricht versenden" name="submit" />
            </form>

怎么了?

【问题讨论】:

  • 我采取了简单的方法。我在表单上为电话号码的每个部分放置字段,然后验证每个块。尝试为破折号、圆点和括号创建正则表达式,这很烦人。
  • 那不是解决问题,而是避免
  • 不应该是if(!preg_match 吗?您输入了一个可能正确的数字
  • 不验证电话号码。这是联系表格中最令人讨厌的事情。如果我的电话号码来自其他国家怎么办?如果超长怎么办?如果我不想输入怎么办?
  • OP:您尝试自己解决了什么问题?

标签: php contact-form


【解决方案1】:

所以你得到'Bitte geben Sie Ihre Telefonnummer an.' 的原因是因为$post['phone']; 是空的或假的,或者在修剪和标签被剥离后变为空/假。尝试在 if 语句之前回显 $post['phone'] 以查看其内容。即使您正在检查phone,您的表单也可能会发布telephone

除了$post['phone'] 为空之外,您在预赛匹配行上还有一个错误。当你需要做$this-&gt;phone时,你正在做$phone

} else if ( preg_match('#[^0-9\+\-\040/]#', $this->phone) )

【讨论】:

    猜你喜欢
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    相关资源
    最近更新 更多