Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将带有/不带有可选输入的表单插入MySQL的逻辑_Php_Mysql_Mysqli - Fatal编程技术网

Php 将带有/不带有可选输入的表单插入MySQL的逻辑

Php 将带有/不带有可选输入的表单插入MySQL的逻辑,php,mysql,mysqli,Php,Mysql,Mysqli,使用:括号Html编辑器,MySQL工作台 简而言之,我有一个包含这些表的数据库 (主表)人 idperson PKNN UN AI *fk_作业NN UN(外键引用idjob) fn NN 林恩 工作 idjob PK NN UN AI 工作名称NN 地址 伊丹恩·恩艾 *fk_人员NN UN(外键指idperson) 地址NN 还有这个表格。在表格中,要求填写一个地址,并可选择填写第二个地址 <?php $con = new mysqli("localhost","user

使用:括号Html编辑器,MySQL工作台

简而言之,我有一个包含这些表的数据库

  • (主表)人
    • idperson PKNN UN AI
    • *fk_作业NN UN(外键引用idjob)
    • fn NN
    • 林恩
  • 工作
    • idjob PK NN UN AI
    • 工作名称NN
  • 地址
    • 伊丹恩·恩艾
    • *fk_人员NN UN(外键指idperson)
    • 地址NN
  • 还有这个表格。在表格中,要求填写一个地址,并可选择填写第二个地址

    <?php
    $con = new mysqli("localhost","user","password","database");
    if ($con->
    
    connect_error) {
        die('Error : ('. $con->connect_errno .') '. $con->connect_error .'');
        }
    
    $job_sql = "SELECT idtype, typename FROM type;";
    $job_data = $con->query($job_sql);
    
    //insert if(isset()) here
    
    $con->close();
    ?>
    <form method="post">
     <select name="typeSlc" required>
      <option disabled selected>_</option>
      <?php while($row = mysqli_fetch_array($job_data)) { ?>
      <option value="<?php echo $row['jobid'];?>"><?php echo $row['jobname'];?></option>
      <?php } ?>
     </select>
     <input name="fnTxt" required type="text">
     <input name="lnTxt" required type="text">
     <input name="adressTxt" required type="text">
     <input name="cityTxt" required type="text">
     <input name="opt_adressTxt" type="text">
     <input name="opt_cityTxt" type="text">
     <input name="submit" value="submit" type="submit">
    </form
    
    当我尝试运行查询时,它不会进入数据库(我使用的是MySQL工作台)。没有错误消息,但查询未成功

    如果可选输入中存在现有值,我想在事务中插入批次if查询。这是正确的字符串吗?还是有一个更圆滑的代码我可以使用

    这个问题中的表单和数据库是我实际使用的表单和数据库的简化版本


    提前感谢,-burrdie

    您必须理解查询和批查询之间的区别

    由于必须执行几个单独的查询,因此还必须进行几个单独的query()调用

    所以像这样更改代码

    $con->query("BEGIN");
    $con->query(sprintf ("INSERT INTO person (fk_job, fn, ln)...");
    $con->query("SELECT LAST_INSERT_ID() INTO @id");
    // ...so on
    
    你会被安排好的


    此外,它会让你编写SLIEK代码,因为你可以在执行过程中添加你的条件,从而不会复制代码。

    你说没有错误,但是你检查过了吗?代码>$con->错误在
    $sql
    上运行var_dump并检查sql错误,您如何知道查询成功?在这段代码中,您从不检查它。在
    sprintf
    中不使用
    opt\u-addrestxt
    的最后两个条目之间也缺少逗号
    。在
    sprintf
    操作状态中,我还统计了比占位符更多的参数,它们正在使用工作台检查查询。。。如果没有错误,它会说“查询成功,0行受影响”。根据我们掌握的信息,我一秒钟也不相信(第一个)查询成功。因为
    address.fk_person
    是唯一的和AI的,但是在同一个查询中有两个插入,使用了相同的SQL变量(最后插入的id)。但是PHP中也有错误,所以我很确定没有做过很多错误检查。看看这些,谢谢!这解决了问题,可能是因为我在编辑代码墙时无意中删除了一个错误。只是一个小细节。。。这是结束语吗在sql代码中可选?我知道你没有在代码中使用它。这不是无意中删除的,而是这个函数的工作方式,因为它一次只能运行一个查询。
    $con->query("BEGIN");
    $con->query(sprintf ("INSERT INTO person (fk_job, fn, ln)...");
    $con->query("SELECT LAST_INSERT_ID() INTO @id");
    // ...so on