PHP5HTML5联系人表单

PHP5HTML5联系人表单,php,html,Php,Html,我对网站设计/编程非常陌生,在过去的几周里学习了html、css和一些php。这是我在这里的第一篇帖子,祝我好运: 我正试图根据我从各种网站学到的知识创建一个邮件表单,表单可以工作,但我在清理输入时遇到了一个问题,我不确定是否正确,因为我仍然可以向字段中插入代码 <?php session_start(); ?> <!DOCTYPE html> <html> <body> <?php $ip

我对网站设计/编程非常陌生,在过去的几周里学习了html、css和一些php。这是我在这里的第一篇帖子,祝我好运:

我正试图根据我从各种网站学到的知识创建一个邮件表单,表单可以工作,但我在清理输入时遇到了一个问题,我不确定是否正确,因为我仍然可以向字段中插入代码

    <?php session_start(); ?>
    <!DOCTYPE html>
    <html>
    <body>
    <?php
     $ip = $_SERVER['REMOTE_ADDR'];

     $browser = $_SERVER['HTTP_USER_AGENT'];

     if (isset($_POST['submit'])) {
     $error = '';

     // Name
     $name = filter_var($_POST['name'], FILTER_SANITIZE_STRING);

     // Telephone Number
     $phone= filter_var($_POST['phone'], FILTER_SANITIZE_NUMBER_INT);

     // Email Address
     $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
     if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
        $error = 'You have not entered a valid email address.<br/>';
    }

     // Message
     $message = filter_var($_POST['message'], FILTER_SANITIZE_STRING);

     if (empty($error)) {
     $from = 'From: ' . $name . ' <' . $email . '>'; 
     $to = 'YourEmailHere';
     $subject = 'Message from Contact Form';
     $content = $name . ' has sent you a message: \n' . $message . '\n\nPhone Number: ' . $phone . '\n\nIP: ' . $ip . '\nBrowser:' . $browser;
     $success = '<h3>Thank you!<br /> Your message has been sent!</h3>';
     //mail($to,$subject,$content,$from);
     }
     }
    ?>
    <h1>Contact Form</h1>
    <br/>
    <?php
       if (!empty($error)) {
       echo '<p class="error"><strong>Your message was NOT sent<br/> The following error(s) returned:</strong><br/><br/>' . $error . '<br/><strong>Please try again.</strong><br/></p>';
       } elseif (!empty($success)) {
       echo $success;
       }
    ?>
      <form action="" method="post">
         Name:
         <input type="text" name="name" required placeholder="Name" value="<?php { echo $_POST['name']; } ?>"><br/>
         Telephone:
         <input type="text" name="phone" required placeholder="Telephone Number e.g.0123456789" value="<?php { echo $_POST['phone']; } ?>"><br/>
         Email:
         <input type="text" name="email" required placeholder="Email Address" value="<?php { echo $_POST['email']; } ?>"><br/>
         Message:<br />
         <textarea name="message" required placeholder="Message" rows="20" cols="20"><?php { echo $_POST['message']; } ?></textarea><br/>
         <input type="submit" class="submit" name="submit" value="Send message">
         <br/>
       </form>
       <!-- Below is Just for testing  -->
       <?php     echo '<br/>Name : ' . $name . '<br/><br/>Phone : ' . $phone . '<br/><br/>Email : ' . $email . '<br/><br/>Message : ' . $message . '<br/>'; ?>
   <br/>
    </body>
    </html>
一旦代码按我希望的方式运行,我将在稍后添加layout/css。 任何帮助都将不胜感激

我正在测试的注入代码非常简单

    "><script>alert('Broke');</script>
如果我省略了开头的>,即使仅仅使用>,也会弄乱页面,我想知道是否有一种方法可以使用php中可用的选项过滤这些内容。 一旦这个简单表单的输入正确运行,我就计划在站点的其余部分使用数据库功能,因此,出于显而易见的原因,我对过滤有很好的理解,这对我来说很重要

提前谢谢

亚伦

另一个问题,正如您从代码中看到的那样,如果电子邮件地址根据筛选器_VALIDATE_email无效,我将如何在其他字段名称[仅文本]、电话号码[10位电话号码]和消息[带标点的文本]上执行此操作

我还想添加验证码脚本,一个简单的随机数[random calculation type+-X/]random number=以图像形式显示随机数和计算类型,不确定从何处开始,或者这对访问者来说是否太复杂。

您在回显$\u POST变量,而没有对其进行清理

将它们包装在htmlspecialchars中,如下所示:

echo htmlspecialchars($_POST['message']);

您正在执行一些基本的清理和验证,但随后继续将未清理的原始数据回显到表单中的客户端

<?php { echo $_POST['email']; } ?>
更改您的值输出以检查经过消毒的值,并适当地输出它们

<?php echo (isset($email) ? $email : ''); ?>

试试htmlspecialchars$Stringhere,你似乎在用大括号把回声包起来——它们是不需要的。实际上,您可以这样做: