MYSQL-将多个输入插入表问题

耶涅娃

我一直在使用此确切的代码(更改的变量名称)在整个网站上向我的数据库中输入信息,而我从来没有遇到过问题。这是我厌倦了一次插入数据库中的大多数变量。没有错误消息,只是不会插入数据。

有一个更好的方法吗?这是一个已知问题吗?

的PHP

<?php
if (isset($_POST['Save'])) {
  $f_name = $_POST['franchise_name'];
  $f_email = $_POST['fran_email'];
  $f_mangn = $_POST['mang_name'];
  $f_addline_1 = $_POST['franc_address'];
  $f_addline_2 = $_POST['address2'];
  $f_city = $_POST['city'];
  $f_pcode = $_POST['pcode'];
  $f_phone = $_POST['franc_phone'];

  $insert_franc_dets = "INSERT INTO Franchise_manager_account(Area_Name,Franchise_email,Fran_Fname,Fran_business_add_line1,Fran_business_add_line2,Fran_City,fran_Postcode,Fran_Contact_Num) 
  VALUES (?,?,?,?,?,?,?,?)
  ON DUPLICATE KEY 
  UPDATE
  Area_Name = '$f_name',
  Franchise_email = '$f_email',
  Fran_Fname = '$f_mangn',
  Fran_business_add_line1 = '$f_addline_1',
  Fran_business_add_line2 = '$f_addline_2',
  Fran_City = '$f_city',
  fran_Postcode = '$f_pcode',
  Fran_Contact_Num = '$f_phone'";

  $c = mysqli_prepare($dbc, $insert_franc_dets);
  //new
  // $stmt = mysqli_prepare($dbc, $insert_c);
  //debugging
  //$c = mysqli_prepare($dbc, $insert_franc_dets)  or die(mysqli_error($dbc));

  mysqli_stmt_bind_param($c,'sssssssi', $f_name, $f_email, $f_mangn, $f_addline_1, $f_addline_2, $f_city, $f_pcode, $f_phone);

  /* execute query */
  $execute = mysqli_stmt_execute($c);

  // if inserted echo the following messges
  if ($execute) {
    echo "<script> alert('Addrrss Saved')</script>";
  } else {
    echo "<b>Oops! we have an issue </b>";
  }
}
$dbc->close();
?>

的HTML

<form id="franchiseDets" action ="Franchise-Details.php" method="POST">


  <!--                franchise details form-->
  <div class="field">

      <input type="text" name="franchise_name" id="fran_name" placeholder="e.g One Delivery Leeds" pattern="[a-zA-Z]" 
             autofocus required tabindex="1">
      <br>

      <input type="email" name="fran_email" id="fran_email" placeholder="[email protected]" required tabindex="2">
      <br>

      <input type="text" name="mang_name" id="name" placeholder="Joe Blogs" required tabindex="3">
      <br>


      <input type="text" name="franc_address" id="address1" placeholder="Address Line 1" tanindex="4">
      <input type="text" name="address2" id="address2" placeholder="Address Line 2" tabindex="5">
      <input type="text" name="city" id="city" placeholder="Town/City" tabindex="6">
      <input type="text" name="pcode" id="pcode" placeholder="Postcode" tabindex="7">
      <br>


      <input type="tel" name="franc_phone" id="phone" placeholder="Customer service number" min="10" maxlength="11" pattern="[0-9]{3}[-][0-9]{4}[-][0-9]{4}" 
             required title="Please provide your customer service number in the following format: 000-0000-0000" tabindex="8">

<input type="submit" name="Save" value="Save">
</form>
      <br>
  </div>

表(3个唯一元素)Session_start(); 位于页面顶部。仍在进行sql注入。

spencer7593

您正在为插入使用绑定占位符。(这是好事)

但是您在更新的SQL文本中有了文字(出于对世界上所有美好事物的热爱,您为什么要这么做?)

带绑定占位符的预处理语句是对SQL注入的防御。但是这项工作只完成了一半。

只需使用该VALUES()函数来引用将已插入到列中的值(如果插入已起作用)。我没有查看要为更新部分中的哪些列分配哪些值,下面的示例分配为插入提供的值。

 INSERT INTO franchise_manager_account
      ( area_name
      , franchise_email
      , fran_fname
      , fran_business_add_line1
      , fran_business_add_line2
      , fran_city
      , fran_postcode
      , fran_contact_num
      ) VALUES
      ( ?
      , ?
      , ?
      , ?
      , ?
      , ?
      , ?
      , ?
      )
 ON DUPLICATE KEY 
 UPDATE area_name               = VALUES(area_name)
      , franchise_email         = VALUES(franchise_email)
      , fran_fname              = VALUES(fran_fname)
      , fran_business_add_line1 = VALUES(fran_business_add_line1)
      , fran_business_add_line2 = VALUES(fran_business_add_line2)
      , fran_city               = VALUES(fran_city)
      , fran_postcode           = VALUES(fran_postcode)
      , fran_contact_num        = VALUES(fran_contact_num)

为了UPDATE执行部分,INSERT将必须引发“重复键异常”。为了使该错误发生,需要至少定义一个PRIMARY和/或UNIQUE KEY。(从问题中尚不清楚哪个列构成主键和/或唯一键。通常,我们从UPDATE中忽略这些列。)

如果需要在更新中提供其他值,则可以使用SQL表达式执行任何检查或操作(例如,不要替换非NULL值,也不要添加到现有值中,等等。

       , col7  = IF(col7 IS NULL, VALUES(col7), col7) 
       , col8  = col8 + VALUES(col8)
       , col9  = CONCAT(col9,',',VALUES(col9))
       , colA  = ?

如果它是一个完全不同的值,那么我将为其提供一个绑定占位符,就像在INSERT中一样。

至于为什么不插入行...如果是SQL注入引起问题,例如其中一个值包含单引号或其他内容,则上述模式应能解决该问题。

该代码应真正检查prepare和和的返回值execute,并处理错误。发出mysqli_error文本不是生产就绪代码的最佳实践,但开发和调试很容易。至少,您的代码应检查错误并具有代码块。为了开发,至少回显/打印mysqli_error。

如果您的代码没有执行此操作,则说明是将虚拟小指放在虚拟嘴角上(Dr.Evil风格),然后说:“我只是认为一切都会按计划进行。这是什么?”

并确保已启用PHP错误报告。

您确定第一个脚本正在执行吗?

如果仍然找不到问题,请开始添加一些其他调试输出。

如何调试小程序

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

尝试使用php将数据插入MySQL表的问题

来自分类Dev

尝试使用php将数据插入MySQL表的问题

来自分类Dev

将ID插入MYSQL表中以上传多个图像

来自分类Dev

PHP:将多个数组插入mysql表

来自分类Dev

MySQL批量插入多个表

来自分类Dev

MYSQL innerjoin插入多个表

来自分类Dev

mysql查询多个表的问题

来自分类Dev

MySQL从多个表中插入多个元组

来自分类Dev

MySQL将小数插入表

来自分类Dev

Mysql,在表中插入行的问题

来自分类Dev

Mysql,在表中插入行的问题

来自分类Dev

插入并更新到多个表中,MySQL

来自分类Dev

具有多个表的高级MySQL插入

来自分类Dev

将POST数组插入mySql表的多行时出现问题

来自分类Dev

用PHP将数据插入MySQL表时遇到问题

来自分类Dev

有效地将数据插入C#中多个表的MySQL中

来自分类Dev

使用codeigniter以单一形式将多个数据插入mysql表中

来自分类Dev

从数组将多个记录插入MySQL

来自分类Dev

将多个数组插入mysql

来自分类Dev

跨多个表的MySQL查询问题

来自分类Dev

无法将值插入MYSQL表

来自分类Dev

使用Ansible将数据插入mysql表

来自分类Dev

MySQL将重复的值插入表

来自分类Dev

将JSON数据插入MySQL表

来自分类Dev

将多维数组插入mysql表

来自分类Dev

无法将数据插入MySQL表

来自分类Dev

动态将数据插入mysql表

来自分类Dev

MySql:将python列表插入表中

来自分类Dev

将嵌套的Json插入MySQL表