网站表单没有向mssql数据库提交数据

时间:2016-09-09 15:05:06

标签: php sql-server

我花了几天时间试图计算如何在我的网页上获取表单数据以插入到forklift数据库mssql上的employee表中。当我单击表单上的提交时,它会刷新页面并建立连接,但数据库中没有数据。

<?php

/* Connect using Windows Authentication. */

$serverName = "EXAMPLE";
$connectionOptions = array("Database"=>"FORKLIFT");

/* Connect using Windows Authentication. */
$conn = sqlsrv_connect( $serverName, $connectionOptions);

if($conn) 

{
echo "Connection established.<br />";
}

else 

{
echo "Connection could not be established.<br />";
die(print_r(sqlsrv_errors(), true));

}

if(empty($_POST) === false && empty($errors)=== true)

{ 
//assign form input to variables
$FIRSTNAME = $_POST["FIRSTNAME"];
$LASTNAME = $_POST["LASTNAME"];
$DATEOFBIRTH = $_POST["DATEOFBIRTH"];
$PHONENUMBER = $_POST["PHONENUMBER"];
$ADDRESS = $_POST["ADDRESS"];

/*Insert data.*/
$INSERT_ROW = $query = "INSERT INTO              
EMPLOYEE(FIRSTNAME,LASTNAME,DATEOFBIRTH,PHONENUMBER,ADDRESS)
VALUES ('$FIRSTNAME','$LASTNAME','$DATEOFBIRTH','$PHONENUMBER','$ADDRESS')";

$result = sqlsrv_prepare($conn,$query)or die('Error querying MSSQL     
database');
        sqlsrv_execute($result);              
}

?>

HTML

        <form name="submit" action="employee.php" method="POST" >


           <h2>Register New Member</h2>

           <table border="0">
              <tr>
                 <td>FIRSTNAME</td>
                 <td>
                    <input type="text" name="FIRSTNAME" id="FIRSTNAME"/>
                 </td>
              </tr>

              <tr>
                 <td>LASTNAME</td>
                 <td>
                    <input type="text" name="LASTNAME" id="LASTNAME"/>
                 </td>
              </tr>

              <tr>
                 <td>DATE_OF_BIRTH</td>
                 <td>
                    <input type="date" name="DATE_OF_BIRTH" id="DATE_OF_BIRTH"/>
                 </td>
              </tr>   

              <tr>
                 <td>PHONENUMBER</td>
                 <td>
                    <input type="text" name="PHONENUMBER" id="PHONENUMBER"/>
                 </td>
              </tr>     

              <tr>
                 <td>ADDRESS</td>
                 <td>
                    <input type="text" name="ADDRESS" id="ADDRESS"/>
                 </td>
              </tr>  


              <tr>
                 <td></td>
                 <td align="right"><input type="submit" name="submit" value="REGISTER"/></td>

              </tr>
           </table>      

2 个答案:

答案 0 :(得分:1)

我进行了一些小的改动,但无法测试看 - 运行它,看看结果sql语句是什么样的。我希望它有所帮助。

<?php
    if( !empty( $_POST ) && isset( $_POST["FIRSTNAME"], $_POST["LASTNAME"], $_POST["DATE_OF_BIRTH"], $_POST["PHONENUMBER"], $_POST["ADDRESS"] ) ) {

        /* 
            There is no point creating a db connection if a later condition fails
            so create the db conn after testing key variables are set
        */

        $server = "EXAMPLE";
        $options = array( "Database"=>"FORKLIFT" );


        $conn = sqlsrv_connect( $server, $options );

        /* In production environment do not display actual errors! */
        if( !$conn ) die( print_r( sqlsrv_errors(), true ) );   


        /* as pointed out by @Daniel Rutter, the field is actually called `DATE_OF_BIRTH` */
        $FIRSTNAME = $_POST["FIRSTNAME"];
        $LASTNAME = $_POST["LASTNAME"];
        $DATEOFBIRTH = $_POST["DATE_OF_BIRTH"];
        $PHONENUMBER = $_POST["PHONENUMBER"];
        $ADDRESS = $_POST["ADDRESS"];



        $sql = "INSERT INTO EMPLOYEE
            ( FIRSTNAME,LASTNAME,DATEOFBIRTH,PHONENUMBER,ADDRESS )
                VALUES
            ( '$FIRSTNAME','$LASTNAME','$DATEOFBIRTH','$PHONENUMBER','$ADDRESS' )";



        /* Comment out the following line after running the script and observing the output here */
        exit( $sql );


        /* I assume that `sqlsrv_prepare` returns either true or false */
        $stmt = sqlsrv_prepare( $conn, $sql ) or die( 'Error querying MSSQL database' );

        if( $stmt ) sqlsrv_execute( $stmt );

    /* debug post vars */           
    } else { echo 'Error::' . print_r($_POST,true ); }
?>

简要介绍一下各种sqlsrv_*命令的在线PHP手册,或许你应该尝试这些方法 - 它与给出的一个例子紧密相关 - 尽管它没有经过测试,因为没有要使用的mssql服务器实例。

<?php
    if( !empty( $_POST ) && isset( $_POST["FIRSTNAME"], $_POST["LASTNAME"], $_POST["DATE_OF_BIRTH"], $_POST["PHONENUMBER"], $_POST["ADDRESS"] ) ) {

        /* 
            There is no point creating a db connection if a later condition fails
            so create the db conn after testing key variables are set
        */

        $server = "EXAMPLE";
        $options = array( "Database"=>"FORKLIFT" );


        $conn = sqlsrv_connect( $server, $options );

        /* In production environment do not display actual errors! */
        if( !$conn ) die( print_r( sqlsrv_errors(), true ) );   



        $FIRSTNAME = $_POST["FIRSTNAME"];
        $LASTNAME = $_POST["LASTNAME"];
        $DATEOFBIRTH = $_POST["DATE_OF_BIRTH"];
        $PHONENUMBER = $_POST["PHONENUMBER"];
        $ADDRESS = $_POST["ADDRESS"];



        $sql = "INSERT INTO EMPLOYEE
            ( FIRSTNAME, LASTNAME, DATEOFBIRTH, PHONENUMBER, ADDRESS )
                VALUES
            ( ?,?,?,?,? )";

        $params=array(
            &$FIRSTNAME,
            &$LASTNAME,
            &$DATEOFBIRTH,
            &$PHONENUMBER,
            &$ADDRESS
        );

        /* add the posted variables as an array here as the third arg */
        $stmt = sqlsrv_prepare( $conn, $sql, $params ) or die( 'Error querying MSSQL database' );
        if( $stmt ) sqlsrv_execute( $stmt );



    /* debug post vars */           
    } else { 
        echo 'Error::' . print_r( $_POST, true );
    }
?>

关于sqlsrc_prepare的PHP在线手册:

  

准备执行查询。此功能非常适合准备   将使用不同参数多次执行的查询   值。

  

当您准备一个使用变量作为参数的语句时,   变量绑定到语句。这意味着如果您更新   下次执行语句时变量的值   它将使用更新的参数值运行。对于你的陈述   计划只执行一次,使用sqlsrv_query()。

答案 1 :(得分:1)

我注意到你试图将数据发布到数据库,这实际上并没有在PHP端正确命名,这只会导致与你的DATE OF BIRTH相关的信息首先没有发布,因为它当您声明要检索发布的数据时,必须完全匹配PHP方面。我非常肯定,从内存中你只需要将客户端表单中的名称更改为DATEOFBIRTH,否则你必须将PHP端更改为DATE_OF_BIRTH而不是此,同时将客户端保持为DATE_OF_BIRTH

<input type="date" name="DATE_OF_BIRTH" id="DATE_OF_BIRTH"/>

需要:

<input type="date" name="DATEOFBIRTH" id="DATEOFBIRTH"/>