【问题标题】:Inserting data in database through modal and PHP [duplicate]通过模态和PHP在数据库中插入数据[重复]
【发布时间】:2016-05-02 08:02:36
【问题描述】:

我试图在用户单击提交按钮后从模态插入数据。但它不起作用,我有 2 个文件索引来显示模式和 PHP 文件来运行连接 MySQL 并将数据插入其中。我认为它不承认提交动作。我也有疑问如何将主键 id 插入数据库或自动添加。

HTML 提交代码:

<button type="submit" action="add.php"class="btn">Finish!</button>

PHP 代码:

<?php

include 'db.php';

$cName = $_POST['form-name'];
$ser = $_POST['form-s-name'];
$link = $_POST['form-t'];
$info = $_POST['form-des'];


  $sql = "INSERT INTO crewlist(id, name,sname,linkname,description)
VALUES ('','".$cName."','".$ser."','".$link."','".$info."')";


mysqli_query($conn,$sql);

if(mysqli_affected_rows($conn) > 0){
    echo "<p>Added</p>";

【问题讨论】:

  • 检查列和值计数??两者都不一样!1
  • 如果id 是自动生成的,它可能是,你不需要INSERTAUTO_INCREMENT 列会为您执行此操作。
  • “如果字段是自动递增的,我是在数据库中插入主键 id 还是自动添加”
  • 请启用errors.so你可以看到错误
  • 不知道按钮是否支持action属性:(

标签: php html mysql mysqli


【解决方案1】:

教科书的方法是使用准备好的语句:

$stmt = mysqli_prepare($conn,
  "INSERT INTO crewlist(name,sname,linkname,description) VALUES (?,?,?,?)"
);

mysqli_stmt_bind_param($stmt, 'ssss',
  $_POST['form-name'],
  $_POST['form-s-name'],
  $_POST['form-t'],
  $_POST['form-des']
);

$result = mysqli_stmt_execute($stmt);

如果您正确使用准备好的语句,则可以保证您的值以正确的转义方式插入。这里我使用s作为字符串,但文档中还列出了其他类型。

您需要启用exceptions for errors,以防您出错。

如果您正在做大量的数据库工作,我强烈建议您使用像 DoctrinePropel 这样的 ORM,因为它们使您与记录的交互更加愉快。

【讨论】:

    【解决方案2】:

    你没有在 sql 查询中使用变量,你应该像这样使用它

    $sql = "INSERT INTO crewlist(id, name,sname,linkname,description)
            VALUES ('','{$cName}','{$ser}','{$link}','{$info}')";
    

    【讨论】:

    • 对不起,这是dangerously bad。安全的方法是使用parameterized queriesbind_param
    • @tadman 我知道我只是在建议使用 sql 查询的正确方法
    • 谢谢,但是当我点击完成时它仍然没有做任何事情
    • 很抱歉在这里遇到这么困难,但这不是正确的方法。这不仅不能正确地转义数据,而且如果其中任何一个值包含',就会出错,而且这就是你如何让你的服务器被黑客入侵的方式。使用bind_param 并不难,而且是绝对基线。
    • 回显sql查询并尝试通过在phpmyadmin中运行它来查找错误并尝试使用bind_param,因为@tadman还建议它会更安全
    【解决方案3】:

    插入与您的列不匹配的查询使用它会起作用:

       $sql = "INSERT INTO crewlist(id, name,sname,linkname,description)
    VALUES ('',cName,ser,link,info)";
    

    如果您想使用数据,这将在表中插入 cName、ser、link、info:

    '".$cname."'
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多