将表单数据插入mysql数据库

时间:2017-02-06 01:35:20

标签: php html mysql database forms

我已多次尝试运行此代码并将数据插入到我的数据库中。无论我尝试什么,我都无法弄清楚问题。 php看起来像这样:

  File "C:\Python35-32\lib\site-packages\flask_wtf\form.py", line 158, in __init__
    super(Form, self).__init__(*args, **kwargs)
TypeError: __init__() takes from 1 to 2 positional arguments but 7 were given

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

为什么使用mysqli?它已经被废弃了吗? 现在使用PDO。

以下是一个例子:

<?php
if (isset($_POST['submit'])) {

    $titleTag = $_POST['title'];
    $composerTag = $_POST['composer'];
    $unicodeTag = $_POST['unicode'];
    $tempoTag = $_POST['tempo'];
    $yearTag = $_POST['year-used'];
    $languageTag = $_POST['language'];
    $keyTag = $_POST['key-signature'];
    $pianoTag = $_POST['piano'];
    $temposelTag = $_POST['temposel'];
    $partsTag = $_POST['parts'];

    try {
        $pdo = new PDO(DSN,DBUSER,DBUSERPASSWD);
    } catch (PDOException $e) {
        echo "Failed to connect to Database: " . $e->getMessage() . "\n"; die();
    }
    $pdo->exec("SET NAMES 'utf8' COLLATE 'utf8_general_ci'");

    $sql = "INSERT INTO musicdb (title, composer, unicode, temptxt, yearused, languages, pianokeys, piano, temposel, parts)
    VALUES (:titleTag,:composerTag,:unicodeTag,:tempoTag,:yearTag,:languageTag,:keyTag,:pianoTag,:temposelTag,:partsTag)";
    $query = $pdo->prepare("$sql");
    $query->bindValue(':titleTag',$titleTag);
    $query->bindValue(':composerTag',$composerTag);
    $query->bindValue(':unicodeTag',$unicodeTag);
    $query->bindValue(':tempoTag',$tempoTag);
    $query->bindValue(':yearTag',$yearTag);
    $query->bindValue(':languageTag',$languageTag);
    $query->bindValue(':keyTag',$keyTag);
    $query->bindValue(':pianoTag',$pianoTag);
    $query->bindValue(':temposelTag',$temposelTag);
    $query->bindValue(':partsTag',$partsTag);
    $query->execute();
    if($query->rowCount() > 0){
        echo "New record created successfully!";
    } else {
        echo "Error!";
    }
}
?>

当然,您需要使用正则表达式过滤来自表单的所有内容。这很简单!

一旦正则表达式分析了将所有内容转换为htmlentities以避免恶意代码所需的所有内容:

下面的正则表达式“/([a-zÀ-ÿ0-9\ s] +)/ i”只允许包含或不包含重音符号,数字和空格的字母:

<?php
preg_match('/([a-zÀ-ÿ0-9\s]+)/i', $_POST['any_field_form'], $output);
if((isset($output[1]) == true) and ($output[1] != null)) {
    //Convert everything to htmlentities to avoid malicious code
    $get_the_data = htmlentities($output[1], ENT_QUOTES, 'UTF-8', false);
} else {
    $get_the_data = null;
}
?>

这样可以避免表单出现问题。当然,对于每个表单字段,您都必须执行特定的正则表达式。但这会让你的代码变得更聪明。

对不起,如果文本中有任何错误。我知道如何用英语阅读,但我不知道怎么写,所以我用翻译器。 但就是这样,男孩!