【问题标题】:Multiple add in multiple sql request?多个添加多个sql请求?
【发布时间】:2016-09-13 07:58:30
【问题描述】:

我想用一个表单同时在我的数据库中添加多行,但是我对每个 sql 请求的成功都是错误的,我不知道该怎么办:(

它用于 Charts.js,我需要每次输入年份(annee)、金额(montant)和公司名称(societe)。

我的数据库的每一行看起来像:ID |兴业 |安妮 |蒙坦

我的表格:

<form action="ca/ajout-ca.php" method="post" enctype="multipart/form-data"> 
     <h3>ANNÉE</h3>
     <div class="form-group">
            <label for="annee"></label>
            <input type="text" name="annee" id="annee" class="form-control" />
        </div>   
        <h4>GROUPE</h4>
        <div class="form-group">
            <label for="montant_groupe"></label>
            <input type="text" name="montant_groupe" id="montant_groupe" class="form-control" />
        </div>                          
        <br>
        <h4>APRIME</h4>
         <div class="form-group">
            <label for="montant_aprime"></label>
            <input type="text" name="montant_aprime" id="montant_aprime" class="form-control" />
        </div>                          
        <br>
        <h4>ENTI</h4>
        <div class="form-group">
            <label for="montant_enti"></label>
            <input type="text" name="montant_enti" id="montant_enti" class="form-control" />
        </div>                          
        <br>
        <h4>S2MI</h4>
        <div class="form-group">
            <label for="s2mi"></label>
            <input type="text" name="montant_s2mi" id="montant_s2mi" class="form-control" />
        </div>                          
        <br>
        <h4>JBM41</h4>
        <div class="form-group">
            <label for="montant_s2mi"></label>
            <input type="text" name="montant_s2mi" id="montant_s2mi" class="form-control" />
        </div>                          
        <br>
        <button type="submit" class="btn btn-primary">Valider</button>
    </form>

我的添加sql文件

<?php
require_once('../connexion.php');

$return = array('success' => false);
$return1 = array('success' => false);
$return2 = array('success' => false);
$return3 = array('success' => false);
$return4 = array('success' => false);


$annee            = isset($_POST['annee']) ? $_POST['annee'] : null;
$montant_groupe    = isset($_POST['montant_groupe']) ? $_POST['montant_groupe'] : null;
$montant_aprime    = isset($_POST['montant_aprime']) ? $_POST['montant_aprime'] : null;
$montant_enti    = isset($_POST['montant_enti']) ? $_POST['montant_enti'] : null;
$montant_s2mi    = isset($_POST['montant_s2mi']) ? $_POST['montant_s2mi'] : null;
$montant_jbm41    = isset($_POST['montant_jbm41']) ? $_POST['montant_jbm41'] : null;

var_dump($_POST);

if(!is_null($annee) && !is_null($montant_groupe) &&     !is_null($montant_aprime) && !is_null($montant_enti) && !is_null($montant_s2mi)     && !is_null($montant_jbm41)){

$sql = "INSERT INTO ca SET annee = '$annee', montant = '$montant_groupe', societe = 'groupe'";
                $return['success'] = $connexion->exec($sql);

$sql1 = "INSERT INTO ca SET annee = '$annee', montant = '$montant_aprime', societe = 'aprime'";
                $return1['success'] = $connexion->exec($sql1);

$sql2 = "INSERT INTO ca SET annee = '$annee', montant = '$montant_enti', societe = 'enti'";
                $return2['success'] = $connexion->exec($sql2);

$sql3 = "INSERT INTO ca SET annee = '$annee', montant = '$montant_s2mi', societe = 's2mi'";
                $return3['success'] = $connexion->exec($sql3);

$sql4 = "INSERT INTO ca SET annee = '$annee', montant = '$montant_jbm41', societe = 'jbm41'";
                $return4['success'] = $connexion->exec($sql4);
}  

echo json_encode($return);
echo json_encode($return1);
echo json_encode($return2);
echo json_encode($return3);
echo json_encode($return4);
/*
header('Location: ../admin_ca.php');*/

my $return(number) 在每一行都返回 false 并且我的 vardump 的结果很好,它记录了我的表单编号

感谢大家的帮助!

【问题讨论】:

  • 首先,您需要将$sql = 'INSERT INTO ca SET annee = \'' . $annee . '\', montant = \'' . $montant_groupe . '\', societe = \''groupe\''; 中的代码修复为... \'groupe\''。那么在进一步建议之前显示connexion.php的内容会很有用。
  • 所有单引号的文字和转义的东西让你的喜欢变得困难。在双引号字符串$sql = "INSERT INTO ca SET annee = '$annee', montant = '$montant_groupe', societe = 'groupe'";中查找variable expansion
  • 如果您使用来自 $_POST 数组的不受信任的数据来避免SQL Injection Attack,那么您真的应该使用参数化查询
  • Ty @RiggsFolly,这是一种更好更简单的双引号,我认为我不需要保护我的 sql,因为这是用于后台,如果我有时间我会做的,链接
  • 仅供参考:更多的 hack 是由 INTERNAL 员工完成的,或者在 INTERNAL 员工的帮助下比任何其他方式都多 他们是 第一个人你应该保护你的系统,而不是最后一个!

标签: php sql forms chart.js


【解决方案1】:

我发现了问题,我在表单中犯了一个错误,我输入了 2 个相同的名称“montant_s2mi”而不是“montant_s2mi”和“montant_jbm41”

所以当我的 if (!is_null) 启动时,我的“montant_jbm41”为空,我的 if 无法进入 sql 请求。

【讨论】:

    猜你喜欢
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    相关资源
    最近更新 更多