如何使用mysql和php将唯一的id发送到数据库

时间:2014-06-15 12:45:23

标签: php mysql

我创建了一个申请表,它没有申请表。但它应该被隐藏。此应用程序不应该是自动增加唯一编号。我使用date()和mysql_insert_id()方法来生成它。但总是在我的表中显示0值。我已经发布了我的代码。请任何人都可以解释我......错误是什么......关于这种情况。这段代码成功地受到了限制。但没有显示正确的输出。总是显示0

if(isset($_POST['submitted'])){


    // catch data
    $loantype = $_POST['loantype'];
    $calcno = $_POST['calcno'];
    $memberid = $_POST['memberid'];
    $appno = date('Y-m-d')."-LN/SS-".mysql_insert_id();
    $amount = $_POST['amount'];
    $rental_type = $_POST['rental_type'];
    $apr = $_POST['apr'];
    $npy = $_POST['npy'];
    $flatrate = $_POST['flatRate'];
    $othercharges = $_POST['othercharges'];
    $repayment = $_POST['Repayment'];


    $payment = $_POST['payment'];
    $totpaid = $_POST['totpaid'];
    $intpaid = $_POST['intpaid'];

    date_default_timezone_set("Asia/Calcutta");
    $created = date('Y-m-d h:i:s');
    $status = "PENDING";
    $discription = "NOT DEFINED";
    $accepted_amount = "NOT DEFINED";


    //create new loan application
    $sql ='INSERT INTO tbl_loan_application VALUES (NULL,"'.$loantype.'","'.$calcno.'","'.$memberid.'","'.$appno.'","'.$amount.'","'.$rental_type.'","'.$apr.'","'.$npy.'","'.$flatrate.'","'.$othercharges.'","'.$repayment.'",
    "'.$created.'","'.$status.'","'.$discription.'","'.$accepted_amount.'","'.$payment.'","'.$totpaid.'","'.$intpaid.'")';


    /*else{

    }*/


        mysql_query($sql, $conn) or die(mysql_error());
        echo'<div class="alert alert-dsgn alert-success fade in" style="width:400px; align:center; margin-left:35%;     margin-top:5px;>
                            <button class="close" aria-hidden="true" data-dismiss="alert" type="button"></button>
                        <i class="fa fa-thumbs-up fa-3x"></i>
                        <article>
                        <h4>Nice! </h4>
                        <p>New Loan application successfully saved..<br /> </p>
                        </article>
                    </div>';
    echo '<a href="newloan.php"><p align="center">Back</p></a>';    
    echo '<p align="center">If you want to view loan application! click <a href="approved_loan_list.php">here</a></p>'; 
    echo mysql_insert_id();
    die();


    //

}

3 个答案:

答案 0 :(得分:1)

你需要在制作mysql数据库的同时做到这一点。例如:

    CREATE TABLE IF NOT EXISTS `tablename` (
      `Id` int(11) NOT NULL auto_increment,
      `Username` varchar(255) NOT NULL,
      `Password` varchar(255) NOT NULL,
      PRIMARY KEY  (`Id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

这样,每次添加数据库记录时,ID列都将自动增加1。您不需要手动执行此操作,因为使用$ _POST方法时,它将具有唯一ID(例如1,2,3,4,..等..)。

答案 1 :(得分:0)

首先,考虑删除mysql,支持mysqli或PDO,因为不推荐使用mysql函数。更多信息here

其次,您使用的函数返回您运行的LAST查询的ID,如here所述,因此如果最后一个查询没有生成新ID,它将返回0。

要开始学习mysqli或PDO,您可以考虑官方MySQL documentationPDOmysqli的PHP文档。

另外在相关通知中,最好使用insert来说明您希望影响的字段,如下所示:

INSERT INTO table1(field_name1, field_name2, ... , field_nameN) VALUES(value1, value2, ... ,  valueN)

建议解决: 使用一些默认appno插入它们,并添加此触发器:

CREATE TRIGGER `UPDATES` AFTER INSERT ON `tbl_loan_application`
FOR EACH ROW BEGIN
    SET NEW.appno = CONCAT(CURDATE(), "-LN/SS-" , NEW.ID);
END

这将在数据库内的每次插入后自动分配代码。我假设您的数据库中的字段名称是代码的“appno”和自动增量字段的“ID”。

编辑:

触发器如何工作:

如上所述here,触发器是“存储函数”,它在事件之后或之前执行(更新,插入或删除)。正确的语法是:

CREATE TRIGGER `Trigger_Name` [BEFORE/AFTER] [INSERT/UPDATE/DELETE] ON `table_name`
/* Some function usually with FOR EACH ROW */

使用NEW.field_name或OLD.field_name选择受影响的值。这两个选择器返回操作前后受影响字段的值。所以,通过说这句话,答案中给出的例子如下:

  1. 创建名为“UPDATES”的触发器
  2. 设置每次为表'tbl_loan_application'执行insert语句后触发的事件。
  3. 该函数逐个选择插入的所有行,并执行与php相同的操作,它加入CURDATE(),即当前日期,字符串“-LN / SS-”和ID该行,只要你有一个。
  4. 触发器就像表一样,通常在mysql控制台中编写一次,但有些人使用其他工具(如phpmyadin)来简化过程。

    触发器在许多情况下派上用场,不仅可以编辑受监控的表,还可以编辑任何其他表。

    简而言之,这是每次编辑/插入指定表格中的新行/删除行时执行的代码。

答案 2 :(得分:-1)

使用此函数生成格式正确的ID。

mt_rand(10,100);