2015-05-12 38 views
1

我想出了一个让我疯狂的问题,因为我是PHP的新手。问题是:下面的时间表提交表单在Chrome上运行良好(每次我离开电子邮件未填写,提交无法处理)。但是,在Safari上使用时,您始终可以将空白表单提交到数据库中。如何仅在输入不为空时将数据插入数据库?

这里是html表单。

<script type="text/javascript" src="/membership/my-form/js/jquery-2.1.1.js"></script> 
<script type="text/javascript" src="/membership/my-form/js/main.js"></script> 

<form class="mf-form floating-labels" method="post" action="timetablesubmit.php"> 

    <div> 
     <h1 style="text-align:center">Availability form</h1> 
    </div> 
    <div> 
     <p class="mf-select icon"> 
      <select name="timetable-staff" class="user" required> 
       <option value="">Select Person</option> 
       <option value="AMY">Amy</option> 
       <option value="TOM">Tom</option> 
      </select> 
     </p> 

     <div> 
      <input name="location1" value="A" type="hidden"> 
      <input name="location2" value="B" type="hidden"> 
     </div> 
     <div class="AMY box">You work in A.</div> 
     <div class="TOM box">You work in B.</div> 
    </div> 

    <div class="icon"> 
     <label class="mf-label" for="mf-email">Email Address</label> 
     <input class="email" type="email" name="timetable-email" id="mf-email" required> 
    </div> 

</form> 


<script type="text/javascript"> 
    $(document).ready(function(){ 
     $("select").change(function(){ 
      $("select option:selected").each(function(){ 
       if($(this).attr("value")=="Amy"){ 
        $(".box").hide(); 
        $(".AMY").show(); 
       } 
       if($(this).attr("value")=="Tom"){ 
        $(".box").hide(); 
        $(".TOM").show(); 
       } 
      }); 
     }).change(); 
    }); 
</script> 


<style type="text/css"> 
    .box{ 
     padding: 10px; 
     display: none; 
     margin-top: 20px; 
     border: 1px solid #000; 
     font-size:1.6em; 
     text-align:center; 
     background-color: #f1f1f1; 
    } 
</style> 

这里是timetablesubmit.php:

<?php 
header("content-type:text/html;charset=utf-8"); 

session_start(); 

$timesubmit=date('Y-m-d H:i:s'); 
$staff=$_POST['timetable-staff']; 
$email=$_POST['timetable-email']; 


$con=mysql_connect("localhost","database","password"); 
if (!$con) { 
    die ('Could not connect:' . mysql_error()); 
} 

mysql_select_db("database", $con); 

mysql_query("set names utf8"); 
mysql_query("INSERT INTO timetable(staff,email) 
     VALUES('$staff','$email')"); 

mysql_close($con); 

sleep(2); 
?> 

<html> 
<? require 'header.php'; ?> 
<div class="tk-reg"> 
    <p>Thak you <?php echo $_POST['timetable-staff']; ?><p> 
    <p> Time availability submitted successfully.<p> 
     Your email address is: <?php echo $_POST["timetable-email"]; ?> 
</div> 

<div class="tk-regfollow"> 
    <ul style="text-align:center"> 
     <a href="/membership/index.php">Back to home page.</a> 
    </ul> 
</div> 
</html> 

然后我在网上搜索,并改为下面,仍然没有在Safari工作(出现警报,但仍数据插入了进入数据库

<?php 
require 'header.php'; 
$nameErr = $emailErr = ""; 
$name = $email = ""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($_POST["timetable-staff"])) { 
     $nameErr = "Please select a staff."; 
    } else { 
     $staff = test_input($_POST["timetable-staff"]); 
    } 
    if (empty($_POST["timetable-email"])) { 
     $emailErr = "Email address is required"; 
    } else { 
     $email = test_input($_POST["timetable-email"]); 
    } 
} 
function test_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 

$con=mysql_connect("localhost","database_name","database_password"); 
if (!$con) { 
    die ('Could not connect:' . mysql_error()); 
} 

mysql_select_db("database_name", $con); 

mysql_query("set names utf8"); 
mysql_query("INSERT INTO timetable(staff,email) 
     VALUES('$staff','$email')"); 

mysql_close($con); 
sleep(2); 
?> 


<html> 
<style> 
    .error {color: #FF0000;} 
</style> 

<h1 style="text-align:center">Availability form for 
    <?php 
    $d=strtotime("+1 Months"); 
    echo date("M", $d) . " 2015 <br>"; 
    ?> 
</h1> 

<form class="mf-form floating-labels" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
    <div> 
     <p class="mf-select icon"> 
      <select name="timetable-staff" class="user" required> 
       <option value="">Select Person</option> 
       <option value="AMY">Amy</option> 
      <option value="TOM">Tom</option> 
      </select> 
      <span class="error">* <?php echo $nameErr;?></span> 
     </p> 
    </div> 
    <div class="icon"> 
     <label class="mf-label" for="mf-email">Email Address</label> 
     <input class="email" type="email" name="timetable-email" id="mf-email" required> 
     <span class="error">* <?php echo $emailErr;?></span> 
    </div> 
    <br><br> 
    <input type="submit" name="submit" value="Submit"> 
</form> 
</html> 

我希望有人能帮我指出我的错误需要。谢谢。

============================================== ========================

我试了很多方法来解决这个问题,但是仍然有'this'或'that'问题。我终于使用了一种实际可行的方法,但我不知道它是否不被推荐。

这是我在timetablesubmit.php 修改了代码(我的流程是:timetable.php ==> timetablesubmit.php ==>的welcome.php)

$email = trim($_POST['timetable-email']); 
if($email !='' and $email !=null) { 
    $sql1; 
} 
else { 
    echo '<html><head> 
      <link rel="stylesheet" type="text/css" href="/membership/style.css"/> 
      <head> 
     <div class="check-error-message"> 
      <p>Error: Email address is required.</p><br> 
      <a href="javascript:history.back(-1);">Return</a> 
     </div>'; 
    exit; 
}; 
+0

PHP无关与浏览器。你使用的是什么版本的jQuery? –

回答

0

,你可以在这里有一个条件避免空洞填充

mysql_query("INSERT INTO timetable(staff,email) 
     VALUES('$staff','$email')"); 

这里保持这个状态这样

if($staff!='' && $email!='') 
{ 
mysql_query("INSERT INTO timetable(staff,email) 
      VALUES('$staff','$email')"); 
} 
+0

其实这个工程。唯一的问题是,当页面刷新时,表单将自动提交.... – rebecca

2

呦你可以在插入操作前检查条件

if($nameErr =="" && $emailErr == "") 
{ 
    mysql_query("INSERT INTO timetable(staff,email) 
    VALUES('$staff','$email')"); 
} 
+0

实际上这个工作。唯一的问题是,当页面刷新时,表单将自动提交.... – rebecca

+0

你可以尝试在插入操作后将页面重定向到同一页面,即使用 \t \t header(“location:timetablesubmit.php”); – user3419778

0

Html 5“required”在safari中不起作用。

此行是问题<input class="email" type="email" name="timetable-email" id="mf-email" required>

写的jQuery/JavaScript验证检查必填字段。

希望它能帮助你。

0

正如他们所说,并非所有的浏览器都接受所需的属性,因为它是新的。

在PHP,服务器端,您可以验证过,如果有什么东西充满了:

$var = trim($_POST['var']); 
if(!is_empty($var)) { 
    //do mysqli function 
} 
else { 
    //show error 
} 

trim将在给定值的起点和终点删除空格。

is_empty将几乎像$var == ""