【发布时间】: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 员工的帮助下比任何其他方式都多 他们是 第一个人你应该保护你的系统,而不是最后一个!