表单:INSERT到数据库,不工作

时间:2016-09-04 23:02:16

标签: php mysql mysqli insert sql-update

我似乎无法使此代码正常工作。 它也是我的其他页面(更新)的基础,不会 want to更新。

代码应该将信息添加到数据库中。

查询单独工作。我认为可能查询过于复杂(因为 pro 具有连接到不同表格的字段: fundpro 城市 typepro 城市连接到国家),但由于它本身是有效的,我想有一种方法可以让它在PHP中运行,我只是做错了。

在更新页面(上面链接到问题和代码)表单显示正确的字段,所以我假设两个页面都没有重大错误,问题在于将信息“传递”到数据库或其他什么。 / p>

我真的需要插入数据页面,它实际上是我最终真正需要的唯一页面,而且我无法使其适用于我的 org pro 表格,而我的国家/地区表格可以添加和编辑非常相似的页面。

我没有想法可能是什么原因,我不知道如何使它适合我。也许有人看到问题或知道另一种方法?

tl; dr 数据不会从字段中插入数据库。查询本身是coccer,基于update.php文件,表单正确返回信息。

以下是SQLFiddleEER Diagram

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


    isset($_GET['submit'])?$submit=true:$submit=false;

    if(!$submit){
        ?>
        <!DOCTYPE html>
    <html>
    <head>
    <style>h1{color:red;}label{color:darkred;}</style>
    <title>Add project</title>
    <meta charset=”UTF-8”>      

    </head>

    <body>
    <h1>Add project:</h1>
    <form name="f1" action="" method="GET" onSubmit="return validateForm(this)">


<label>IDpro </label><input type="text" name="idpro"><br>
<label>numpro</label><input type="text" name="numpro" ><br>
<label>namepro </label><input type="text" name="namepro" ><br>
<label>datef </label><input type="text" name="datef" ><br>
<label>datet </label><input type="text" name="datet" ><br>
<label>descr </label><input type="text" name="descr" ><br>
<label>typepro </label><input type="text" name="typepro" ><br>
<label>fundpro </label><input type="text" name="fundpro" ><br>
<label>IDci </label><input type="text" name="idpro" ><br>


    <input type="reset" value="clear">
    <input type="submit" value="add" name="submit"><br>
    </form>
    </body>
    </html>
    <?php
    }else{
        include "../config.php";
    isset($_GET['idpro']) ? $idpro=$_GET['idpro'] : $idpro='';
    isset($_GET['numpro']) ? $numpro=$_GET['numpro'] : $numpro='';
    isset($_GET['namepro']) ? $namepro=$_GET['namepro'] : $namepro='';
    isset($_GET['datef']) ? $datef=$_GET['datef'] : $datef='';
    isset($_GET['datet']) ? $datet=$_GET['datet'] : $datet='';
    isset($_GET['descr']) ? $descr=$_GET['descr'] : $descr='';
    isset($_GET['typepro']) ? $typepro=$_GET['typepro'] : $typepro='';
    isset($_GET['fundpro']) ? $fundpro=$_GET['fundpro'] : $fundpro='';
    isset($_GET['idci']) ? $idci=$_GET['idci'] : $idci='';

        $sql="INSERT INTO pro(idpro, numpro, namepro, datef, datet, descr,typepro_idtypepro, fundpro_idfundpro, city_idci) VALUES (?,?,?,?,?,?,?,?,?)";

        $stmt = $mysqli->prepare($sql);

        $stmt->bind_param('ssddsiiii', $numpro, $namepro, $datef, $datet,$descr, $typepro_idtypepro, $fundpro_idfundpro, $city_idci, $idpro);

        $stmt->execute();

        $stmt->close();

        $mysqli->close();

        header("Location: view.php");
        //}
    }
    ?>

更新:更简单的代码,相同的模式:

header('Content-type: text/html; charset=utf-8');


isset($_GET['submit'])?$submit=true:$submit=false;

if(!$submit){
    ?>
    <!DOCTYPE html>
<html>
<head>
<style>h1{color:red;}label{color:darkred;}</style>
<title>Add city</title>
<meta charset=”UTF-8”>      

</head>

<body>

<h1>Add city:</h1>
<form name="f1" action="" method="GET" onSubmit="return validateForm(this)" >
<label>city id </label><input type="text" name="idci"><br>
<label>city </label><input type="text" name="nameci"><br>

<label>country id </label><input type="text" name="country_idco"><br>
<input type="reset" value="clear">
<input type="submit" value="add" name="submit"><br>


</body>
</html>
<?php
}else{
    include "../config.php";
    isset($_GET['idci'])?$idci=$_GET['idci']:$idci='';
    isset($_GET['nameci'])?$nameci=$_GET['nameci']:$nameci='';
//  isset($_GET['nameco'])?$nameco=$_GET['nameco']:$nameco='';
    isset($_GET['idco'])?$idco=$_GET['idco']:$idco='';

    //if(($name!='')&&($nameci!='')&&($nameco!='')){
        //echo "$name $nameci $nameco";


    $sql="INSERT INTO city(idci, nameci,country_idco) VALUES (?,?,?)";

    $stmt = $mysqli->prepare($sql);

    $stmt->bind_param('isi', $idci, $nameci, $country_idco);

    $stmt->execute();

    $stmt->close();

    $mysqli->close();

    header("Location: view.php");
    //}
}

2 个答案:

答案 0 :(得分:1)

<label>IDpro </label><input type="text" name="idpro"><br>
<label>numpro</label><input type="text" name="numpro" ><br>
<label>namepro </label><input type="text" name="namepro" ><br>
<label>datef </label><input type="text" name="idpro" ><br>
<label>datet </label><input type="text" name="idpro" ><br>
<label>descr </label><input type="text" name="descr" ><br>
<label>typepro </label><input type="text" name="numpro" ><br>
<label>fundpro </label><input type="text" name="numpro" ><br>
<label>IDci </label><input type="text" name="idpro" ><br>

您已将多个输入字段的名称设置为相同的值。 像:

<label>typepro </label><input type="text" name="numpro" ><br>
<label>fundpro </label><input type="text" name="numpro" ><br>

您的查询:

  $sql="INSERT INTO pro(idpro, numpro, namepro, datef, datet, descr,typepro_idtypepro, fundpro_idfundpro, city_idci) VALUES (?,?,?,?,?,?,?,?,?)";

你看到了订单 - (idpro,numpro,namepro,datef,datet,descr,typepro_idtypepro,fundpro_idfundpro,city_idci);您的数据库期望您提供的参数与它们匹配。所以,第一个参数将映射到idpro。如果您发送idpro作为最后一个参数,它将被映射到city_idci导致数据类型不匹配错误。

纠正您的订单并确保您的基本知识。

答案 1 :(得分:-1)

您只允许在insert语句中使用9个参数,但在bind_param方法中传递10个参数。