【问题标题】:PHP not saving data to databasePHP没有将数据保存到数据库
【发布时间】:2014-04-23 07:01:04
【问题描述】:

我觉得我越来越接近于弄清楚为什么 PHP 没有将数据保存到我的数据库中。 我尝试从众多教程中学习 PHP 和 MySQL,但都失败了。

所以...我觉得在尝试连接到 MySQL 数据库时可能有一些我没有指定的东西。

在最近的一个简单地将文本从输入输出到 MySQL 表的教程中,我收到一条错误消息,指出找不到服务器“localhost”。 我的 Apache 已安装在端口 60(不是默认端口 80)上。所以我认为这可能是问题所在。我尝试将localhost:60 添加到mysqli_connect 而不是localhost 本身,错误消失了!

还有一个问题: 1. 加载 demo.php 页面需要很长时间(参见下面的代码)。 2.数据仍然没有被添加......

这里是代码(我从视频中的原始 MySQL 转换为 MySQLi 并添加了 cmets):

demo.php:

   <?php

    define('DB_NAME', 'forms1');
    define('DB_USER', 'root');
    define('DB_PASSWORD', '');
    define('DB_HOST', 'localhost:60');

    // stored in a variable to TEST if it's working
    $link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_HOST);

    // TEST if a link has been established (connection)
    if (!$link) {
        die('Could not connect:' . mysqli_error($link));
    }
    // same as above
    $db_selected = mysqli_select_db($link,DB_NAME);

    if(!$db_selected) {
        die('Can\t use ' . DB_NAME . ': ' . mysqli_error($link));
    }
    // Check SUCCESS with commented command below
    // echo 'Connected successfully.';

    // stored in a variable to shorten
    $value = $_POST['input1'];

    // stored in a variable to TEST
    $sql = "INSERT INTO demo (input1) VALUES ('$value')"; 

    if(!mysqli_query($link, $sql)) {
        die('Error: ' . mysqli_error($link));
    }

    mysqli_close($link);
?>

demo-form.php:

<form action="demo.php" method="post" />
<p>Input 1: <input type="text" name="input1" /></p>
<input type="submit" value="Submit" />
</form>

我也有 同样的问题与另一个代码,请参阅此处的线程: PHP database won't save data

真的希望有人可以在这里帮助我。 可惜我还没有打好基础……

谢谢!

【问题讨论】:

  • 对 SQL 注入攻击敞开大门
  • 将所有 mysql_error 更改为 mysqli_error 您正在混合 SQL 函数,嗯......不要“混合”。 ;-)
  • @Dagon 这是用于学习目的,我知道它很容易受到攻击,Fred-ii- 我将编辑代码,谢谢。
  • 不客气。修复这些可能会很好地修复您的代码。我以前见过这种情况。
  • 还将$link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_HOST); 更改为$link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD); 你在重复DB_HOST

标签: php mysql database localhost


【解决方案1】:

试试这个:(你现在的代码对我不起作用)HTML 表单和 PHP/SQL 是一体的。

<?php
DEFINE ('DB_USER', 'xxx');
DEFINE ('DB_PASSWORD', 'xxx');  
DEFINE ('DB_HOST', 'xxx');
DEFINE ('DB_NAME', 'xxx');

$link = @mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) 
OR die("could not connect");

if(isset($_POST['submit'])){

    // stored in a variable to shorten
    $value = mysqli_real_escape_string($link,$_POST['input1']);

    // stored in a variable to TEST
    $sql = "INSERT INTO demo (input1) VALUES ('$value')"; 

    if(!mysqli_query($link, $sql)) {
        die('Error: ' . mysqli_error($link));
    }

    else { echo "Success"; }

} // if(isset($_POST['submit']))

    mysqli_close($link);
?>

<form action="" method="post" />
<p>Input 1: <input type="text" name="input1" /></p>
<input type="submit" name="submit" value="Submit" />
</form>

【讨论】:

  • 我收到了 Success 消息,但没有向数据库添加任何内容。我猜这一定是 phpmyadmin 或我设置表格的方式有问题。
  • 您的屏幕截图显示localhost 而不是localhost:60 您是否使用define('DB_HOST', 'localhost); 而不是define('DB_HOST', 'localhost:60');? @WalkOfLife
  • 那么localhost:3306@WalkOfLife
  • 我不知道这是否有帮助,但 phpmyadmin 可能没有正确设置。我有以下通知:i.imgur.com/SoVBnFS.png
  • @WalkOfLife 很可能就是这种情况
【解决方案2】:

MySQL 使用端口 3306 作为默认值。 PHP是否直接连接到数据库?如果是,请尝试使您的端口匹配。

您是否向 MySQL 添加了权限以允许您的应用程序连接并与数据库交互?您应该阅读有关 GRANT 和权限的信息。

但上面 Dagon 的评论很严肃:只有在您愿意让数据被盗、丢弃或两者兼而有之的情况下,才应该将数据库直接发布到 Internet。

【讨论】:

  • 我会阅读并回复您。这仅用于测试目的,并不直接暴露在 Internet 上。不过,我感谢您的关注。
  • 在“权限”下,我有权访问 ALL。
  • 那么,互联网上的每个人也是如此。为什么不把root密码改成纯文本格式,这样我们在“查看源代码”时都能看到呢?
猜你喜欢
  • 2014-02-09
  • 1970-01-01
  • 2013-08-19
  • 2014-11-26
  • 1970-01-01
  • 2020-10-11
  • 2012-09-29
  • 2011-04-01
  • 1970-01-01
相关资源
最近更新 更多