【问题标题】:html form to mysql databasehtml表单到mysql数据库
【发布时间】:2014-04-30 06:36:03
【问题描述】:

嗨,所以我必须创建一个博客,但在网页上显示我的条目时遇到了一点问题。

<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml"> 
<head> <title> Add entry </title> 
</head> 
<body>

<form action = "text1.php" method = "post">

Title: <input type = "text" name = "title"><br>
Body: 
<textarea rows="10" cols="100" name="textblock"></textarea>
<input type = "submit" value = "Add Entry" />
</body> 
</html>

还有我的 php 代码

<?php
$title = $_POST['title'];
$textblock = $_POST['textblock'];
$host   =   "xxxxxx"  ;
$user   =   "xxx"  ;
$pass   =   "xxx"  ;
$db   =   "xxx"  ;


// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db")or die(mysql_error());

$query = "INSERT INTO yourMySQLTable (title, textblock) VALUES ('$title','$textblock')";

mysql_query($query) or die('Error, insert query failed');

?>

我想在另一个网页上显示每个条目,包括标题和文本块,但由于某种原因,这些值没有进入表格。如何将值输入到表格中以及如何在另一个名为 viewblog.php 的网页上显示它们?

【问题讨论】:

  • 这是您实际代码的一部分吗? here$textblock = $_POST['textblock']; enter code here $host = "xxxxxx" ; 这是你的实际表名yourMySQLTable
  • 抱歉,这个论坛的新手,不小心把输入代码留在了这里,现在已经修复了。
  • 您的yourMySQLTable 是您的表的名称,并且两个title, textblock 列都存在?另外,您使用的是哪个版本的 PHP,您是在托管站点还是在您自己的计算机上执行此操作?
  • Click here 咨询我给你的答案。这应该可以帮助您开始使用 mysqli_* 函数,以及您可以访问的一些编写良好的教程网站。告诉我进展如何。

标签: php html mysql


【解决方案1】:

使用以下内容:

$host   =   "xxxxxx"  ;
$user   =   "xxx"  ;
$pass   =   "xxx"  ;
$db   =   "xxx"  ;


// Connect to server and select database.
mysql_connect($host, $username, $password)or die(mysql_error());
mysql_select_db($db)or die(mysql_error());

$title = mysql_real_escape_string($_POST['title']);
$textblock = mysql_real_escape_string($_POST['textblock']);

$query = "INSERT INTO tableName (title, textblock) VALUES ('$title','$textblock')";

mysql_query($query) or die(mysql_error());

显示它们:

$query = "SELECT * FROM tableName";
$res = mysql_query($query);
while($row = mysql_fetch_assoc($res)) {
    echo $row['title'] . ' - ' . $row['textblock'] . '<br />';
}
  1. 注意我在使用变量时没有使用“”,这是不需要的。
  2. 注意我是如何使用 mysql_real_escape_string 的,这样可以安全地插入数据库。
  3. 将所有错误消息替换为 mysql_error() 以显示实际错误(如果有)。
  4. 确保将 tableName 更新为表的名称

【讨论】:

  • 那么我将如何在网页上显示所有表单条目。这些是博客条目,我想将它们全部显示在网页上?
  • 阅读“展示它们”部分。
【解决方案2】:

您应该使用 PDO 进行数据库交互,mysql_* 函数已弃用且不安全。 PDO 将清理您的变量以防止 SQL 注入攻击。

http://code.tutsplus.com/tutorials/why-you-should-be-using-phps-pdo-for-database-access--net-12059

【讨论】:

  • 讲师指示我们使用mysql :)
  • 虽然这可能是一个好点,但它实际上并没有提供问题的答案。
  • 您在上面发布的代码中似乎有一些拼写错误。例如,您在 $textblock 旁边有“这里”一词。 $host 之前还有“在此处输入代码”。如果你坚持使用 mysql_* 函数(你应该使用 PDO 向你的导师炫耀),然后使用 mysql_real_escape_string($title) 转义你的变量,以便安全地插入数据库。如果您稍微清理一下上面的代码,并为我们提供无语法的 PHP,我将很乐意提供帮助。
  • 我不想听起来像个混蛋,但是如果他说要使用 mysql_* 函数,您的讲师对 PHP 的了解就已经过时了。 PDO 只是在编程中与 MySQL 数据库交互的一种方式。
  • @LeeSalminen 我认为他的意思是 mysql 而不是 mysql_* 函数。无论哪种方式使用 mysql_ 方法都不是不安全的,但已弃用。如果使用不当,PDO/MySQLI 与 mysql_ 方法一样不安全。
【解决方案3】:

您的变量附加了一个“此处”:here$textblock = $_POST['textblock'];

也可以试试这个:$query = "INSERT INTO yourMySQLTable (title, textblock) VALUES ('" . $title . "','" . $textblock . "')";

【讨论】:

    【解决方案4】:

    由于已给出其他答案以帮助您进行 INSERT,因此我不会在此答案中重复。

    编辑:下面添加了一个 INSERT 方法,使用 mysqli_* 函数。

    我的由你的第二部分组成:

    “我想在另一个网页上显示每个条目,包括标题和文本块”

    如果您希望显示数据库表中的数据,则需要使用循环。

    这是一个基于mysqli_* 的版本和一个非常基本的方法。

    <?php
    
    // $db = new mysqli("host", "user", "pw", "db");
    
    // CONNECT TO THE DATABASE
    
    $DB_HOST = "xxx";
    $DB_NAME = "xxx";
    $DB_PASS = "xxx";
    $DB_USER = "xxx";
    
    $db = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
    if($db->connect_errno > 0) {
      die('Connection failed [' . $db->connect_error . ']');
    }
    
    $result = $db->query("SELECT * FROM `yourMySQLTable`");
    
     while($row = $result->fetch_assoc()) {
    
       echo "<b>Title:</b> " . $row['title'] . " <b>Text:</b> " . $row['textblock'] . "<br>";
    
     }
    
    
    mysqli_close($db);
    
    ?>
    

    这是一个基于mysqli_*基本版本,用于将值插入数据库。

    <?php
    
    DEFINE ('DB_USER', 'xxx');
    DEFINE ('DB_PASSWORD', 'xxx');  
    DEFINE ('DB_HOST', 'xxx');
    DEFINE ('DB_NAME', 'xxx');
    
    $dbc = @mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) 
    OR die("could not connect");
    
    $title = mysqli_real_escape_string($dbc,$_POST['title']);
    $textblock = mysqli_real_escape_string($dbc,$_POST['textblock']);
    
    $query = ("INSERT INTO `yourMySQLTable` (`title`, `textblock`) 
    VALUES ('$title','$textblock')";
    
     mysqli_query($dbc, $query);
    
    if($query){
    echo "SUCCESS!";
    }
    
    else {
    echo "Sorry!";
    }
    
    ?>
    

    旁注:您当前的代码对SQL injection 开放。使用mysqli_* 函数。 (我建议你使用 prepared statementsPDO

    mysql_* 函数已弃用,将从未来的 PHP 版本中删除。

    这里有一些关于准备好的语句的教程,您可以学习和尝试:

    这里有一些关于 PDO 的教程:

    脚注:

    你不需要额外的标签:

    <?xml version = "1.0" encoding = "utf-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns = "http://www.w3.org/1999/xhtml"> 
    

    将其更改为以下内容就足够了:

    <!DOCTYPE html>
    

    【讨论】:

    • 我的 2 美分:上面的代码和使用 mysql_* 函数一样糟糕。如果您要为 mysqli/PDO 保留 mysql_* 函数,请正确执行(使用准备好的语句)。
    • @AzizSaleh 您的 2 美分表示赞赏和注意。但是,我建议您输入自己的答案,然后如果您觉得这与使用 mysql_* 函数一样糟糕,无论谁 +1 the answer 使用 mysql_* 函数,都应该有另一个 +1那么就你而言。这是使用mysqli_real_escape_string() 的基本方法,并且已经添加了足够的附加信息。在帮助别人时,我没有按小时或按工作获得报酬。现在,如果这还不够,那我就回去当摩托车修理工了 ;-)
    • @AzizSaleh 添加;如果 OP 不了解如何使用基本 SQL 进行简单的 INSERT,我们怎么能期望他/她了解准备好的语句和 PDO 的工作原理?这就像把一个婴儿扔给鲨鱼,并期望它终生游泳并学习如何击退它们。对函数如何工作的基本了解最终将导致更高的学习。 SQL 就是 SQL,之后添加的任何内容都需要特别注意。你知道,我知道,但这并不一定意味着 OP 会在几秒钟内知道它。想想看;-)
    • @AzizSaleh 愚蠢的我,你输入了那个答案。现在,那锅不就是叫水壶变黑吗?顺便说一句,这是一个表达方式,意思是“实践你所宣扬的”。下次您告诉某人使用准备好的语句而不是 mysql_* 时,这不是我用于您的信息的,然后不要仅使用它来回答; mysql_*
    • 我对使用 mysql_* 功能的人完全满意,如果操作正确,它与 PDO/MySQLi 一样安全。对我来说,上面的代码与使用 mysql_* 功能几乎相同,因为它没有增加任何价值。是的,您发布了教程和链接,但我怀疑这个不会编写简单检索功能的新编码员会阅读甚至理解。自从这些功能贬值以来,我们发布了几个主要版本和许多次要版本。我怀疑它会很快被删除。此外,还有一些图书馆可以覆盖它。
    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 2014-06-21
    • 1970-01-01
    相关资源
    最近更新 更多