【问题标题】:Inserting form data to a mysql database将表单数据插入 mysql 数据库
【发布时间】:2017-02-06 01:35:19
【问题描述】:

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

<?php
// Create connection
$conn = mysqli_connect("localhost","nmhsmusi_admin" , "********", "nmhsmusi_musicdb");

// Check connection
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

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'];

    $run = mysqli_query($conn,"INSERT INTO musicdb (title, composer, unicode, temptxt, yearused, languages, pianokeys, piano, temposel, parts)
        VALUES
        (
            '$titleTag', '$composerTag', '$unicodeTag', '$tempoTag', '$yearTag', '$languageTag', '$keyTag', '$pianoTag', '$temposelTag', '$partsTag'
        )");

    if ($run) {
        echo "New record created successfully";
    } else {
        echo "failed";
    }
    mysqli_close($conn);
}
?>

任何帮助将不胜感激

【问题讨论】:

  • 您有几种检查错误的方法,您需要使用它们。顺便说一句,表单丢失了。

标签: php html mysql database forms


【解决方案1】:

你为什么使用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;
}
?>

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

如果文本中有任何错误,我们深表歉意。我知道如何用英语阅读,但我不知道如何写,所以我使用了翻译。 但就是这样,男孩!

【讨论】:

    猜你喜欢
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 2013-11-30
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多