【问题标题】:PHP Not Posting to MYSQLPHP 没有发布到 MYSQL
【发布时间】:2015-10-31 17:44:26
【问题描述】:

我一定忽略了一些非常明显的东西,但是我已经检查了我所有的 PHP 代码,并将其与其他有效的形式进行了比较。我找不到任何差异。基本上,当我提交此表单时,它不会在我的数据库中的 cmets 表中添加任何内容。一定有一些非常明显的东西我忽略了。你能帮我弄清楚我错过了什么吗?这是我的php表单:

<?php
session_start();
require_once('functions/functions.php');

echo do_html(array('title'=>'Comments', 'css_file'=>'assets/css/style.css'));
echo do_header();
?>

<div id="usernameDiv"><?php echo do_greetings(); ?></div> 
<div>
    <p class="lead">We are always looking for new feedback, whether you have registered or not! Please leave your name and email address. Thank you!</p>
</div>

<form action="actions/comments.php" method="post">

    First Name:<br>
    <input type="text" name="fname">
    <br>
    Last Name:<br>
    <input type="text" name="lname">
    <br>
    Email Address:<br>
    <input type="text" name="eaddress"> <br><br> 

    <textarea name="ucomment" cols="50" rows="7" placeholder="Enter comments here..."></textarea>

    <br><br>
    <input type="submit" name="submitButton" value="Submit" >

</form>

<?php echo do_footer(); ?>

然后,这里是处理它到表单的php文件。

<?php
require_once("constants.php"); 

$link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
mysqli_set_charset($link, 'utf8');
if (!$link) {
    die("Database connection failed: " . mysqli_error($link));
}
if (isset($_POST['fname'])) {

    $post_vars = array('fname', 'lname', 'eaddress', 'ucomment');
    foreach($post_vars as $key) {
        $$key = mysqli_real_escape_string($link, $_POST[$key]);

    }

    $sql = "INSERT INTO comments (fname, lname, eaddress, ucomment) VALUES ('$fname', '$lname', '$eaddress', '$ucomment');";
    $result = mysqli_query($link, $sql);
}
mysqli_close($link);
?>

另外,这是我的常量文件,但我怀疑它在这里,因为我的其他表单都可以正常发布:

<?php
//This is constants.php file
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASSWORD', 'password');
define('DB_NAME', 'conference');
?>

【问题讨论】:

  • 有什么错误吗?当您使用 mysqli 时,请使用准备好的查询!
  • 是否进入if?生成的查询是什么样的?
  • 在调用 mysqli_query 之前打印查询“$sql”变量
  • $result = mysqli_query($link, $sql) or die(mysqli_error($link));
  • 您也可以尝试去掉 '$ucomment'); 中的分号 foreach 中跨度>

标签: php mysql database forms


【解决方案1】:

添加更多错误处理....

<?php
if ( !isset($_POST['fname']) ) {
    echo '...';
}
else {
    require_once "constants.php";

    $link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
    if ($link->connect_errno) {
        trigger_error( sprintf('mysqli connect error (%d) %s', $link->connect_errno, $link->connect_error), E_USER_ERROR);
        die;
    }
    else if ( !mysqli_set_charset($link, 'utf8') ) {
        trigger_error('Error loading character set utf8: '. $link->error, E_USER_ERROR);
    }
    else {
        $post_vars = array('fname', 'lname', 'eaddress', 'ucomment');
        foreach($post_vars as $key) {
            if ( !isset($_POST[$key]) ) {
                trigger_error('missing POST parameter '.$key, E_USER_ERROR);
                // ....and some bailout code here
            }
            $$key = mysqli_real_escape_string($link, $_POST[$key]);
        }
        $sql = "INSERT INTO comments (fname, lname, eaddress, ucomment) VALUES ('$fname', '$lname', '$eaddress', '$ucomment')";
        $result = mysqli_query($link, $sql);
        if ( !$result ) {
            trigger_error('query failed. '. $link->error, E_USER_ERROR);
        }
        else {
            echo $link->affected_rows, ' record(s) inserted';
        }
    }
    mysqli_close($link);
}

【讨论】:

  • 看看上面的OP评论。他们说删除的答案stackoverflow.com/a/33454696 解决了它。如何/为什么,我不知道。
  • 我承认我不在乎这个(几小时前才决定的 ;-) )这完全是关于用不完全的 php/pdo/mysql 答案淹没 SO > 关于错误处理和 sql 注入很糟糕。 :-D(否则这将是另一个令人费解的“到底是如何那个解决任何事情”的时刻)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 2011-09-24
  • 2016-10-06
  • 1970-01-01
  • 2012-01-13
相关资源
最近更新 更多