2015-11-19 40 views
0

php单提交失败,页面保持不变,数据也不会添加到数据库中。当我点击取消按钮时,我重定向到一个新的窗体,因为它应该工作。PHP单页提交失败,没有错误

我如何获得提交工作并将表单数据添加到数据库?下面是PHP和形式的html代码和连接的形式为图画

<div class="form-group"> 
       <label for="s_fname">First name</label> * 
       <input type="text" class="form-control" placeholder="First name"> 
       <label for="s_lname">Last name</label> * 
       <input type="text" class="form-control" placeholder="Last name"> 
       <label for="s_mname">Middle name</label> 
       <input type="text" class="form-control" placeholder="Middle name"> 
       <label for="s_dob">Date of Birth</label> * 
       <input type="text" class="form-control" placeholder="DD/MM/YYYY"> 
       <label for="g_phone">Phone Number</label> * 
       <input type="text" class="form-control" placeholder="Phone number"> 
       <label for="g_email">Email</label> * 
       <input type="text" class="form-control" placeholder="Email address"> 
       <label for="entry_year">Entry level</label> * 
       <input type="text" class="form-control" placeholder="Entry level"> 
      </div> 

      <div class="row text-right"> 
       <input type="submit" name="submit" value="Save" class="btn btn-default" /> 
       &nbsp 
       <button type="button" class="btn btn-default" aria-label="Left Align"><a href="new_student.php">Cancel</a></button> 
      </div> 

<?php 
if (isset($_POST['submit'])) { 
    # process the form 

    $s_fname = $_POST["s_fname"]; 
    $s_lname = $_POST["s_lname"]; 
    $s_mname = $_POST["s_mname"]; 
    $s_dob = $_POST["s_dob"]; 
    $g_phone = $_POST["g_phone"]; 
    $g_email = $_POST["g_email"]; 
    $entry_year = $_POST["entry_year"]; 

    $query = "insert into students (s_fname, s_lname, s_mname, s_dob, g_phone, g_email, entry_year) "; 
    $query .= "values ('{$s_fname}', '{$s_lname}', '{$s_mname}', {$s_dob}, {$g_phone}, {$g_email}, {$entry_year})"; 

    $result = mysqli_query($connection, $query); 

    if ($result) { 
     # successful 
     redirect_to("student.php"); 
    } else { 
     # failure 
     redirect_to("new_student.php"); 
    } 
} 
?> 

Form

+3

您的输入没有名称。 –

+1

一旦你纠正'输入'名称,你需要纠正你的SQL注入漏洞,http://php.net/manual/en/mysqli.quickstart.prepared-statements.php和/或http://stackoverflow.com/questions/60174/how-can-i-prevent-sql -injection-in-php?rq = 1 – chris85

+0

除了别人指出的其他问题外,似乎在传入数据的值周围使用了单引号sql,例如'{$ g_email}'还没有,我想这很可能是一个字符串。出生日期也可能是一个问题.... – RamRaider

回答

0
  1. 的名字添加到您的元素。
  2. 确保表单方法是“发布”而不是“获取”。
+1

另外,请确保实际上有一个具有方法的'

'。 –

+0

@ Don'tPanic我已经指出了更正。现在面临一个新问题,当我提交表单数据时,数据被清除并被重定向到同一页面,只有当提交不成功时才会发生 - 没有数据被添加到数据库表中。 我在做什么错了,以及如何在这里分享编辑后的代码? – Mena

+0

cc @AliSheikhpour – Mena

0

梅纳 -

我看到了一些问题与此代码:

  1. 你没有这个HTML的元素。你会想把整个元素包装在一个元素中,并确保它是以POST的形式提交的,而不是GET。请参阅表格上的W3C文档:http://www.w3schools.com/html/html_forms.asp

  2. 由于不要惊慌,您的表单输入字段没有名称,因此不会与表单一起提交。有关输入字段的名称属性,请参阅上面的链接。

  3. 除非您出于安全原因(如果您确实如此,请拨打电话!),否则您将需要一个有效的mysqli连接。查看PHP手册,了解有关如何创建连接的说明:http://php.net/manual/en/function.mysqli-connect.php

  4. 最后,你的PHP代码重定向回student.php或new_student.php网页将无法工作,除非你专门创建这些功能在其他地方,因为他们不会构建到PHP中。见这里头功能的PHP手册,以正确地重定向用户:http://php.net/manual/en/function.header.php

否则,一切看起来像它应该工作!

0

这个问题似乎在于你的HTML。表单中的输入未被命名。而且,如果这是整个代码,那么一些非常关键的部分就是错误。您没有将表格控件包含在<表格>标签中。您需要执行此操作并将窗体操作定义为SELF。因此,您的代码应如下所示:

<form name="myform" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
<!-- 
    Your other form elements go here as in 
    <input name="some name" class="some class" type="text" /> 
--> 
</form> 

这应该工作,如果它的表单提交没有达到其php代码。

+0

如果未指定该操作,则表单应默认提交给自己。 –

+0

任何认真对待自己的代码,并希望为可能的基于浏览器的错误留下一点空间的人都会认真地避免违约。但这是一个很好的提示。不要惊慌。 –

+0

我不争论是否明确定义表单动作是一种好的做法。我只是说,不这样做通常不会妨碍它的工作。 –