【问题标题】:Php+data from form to database [closed]从表单到数据库的PHP +数据[关闭]
【发布时间】:2015-01-05 18:31:37
【问题描述】:

我在尝试将数据从 html 表单保存到 SQL 数据库时遇到问题。我看到了一些其他帖子,但没有任何帮助。 这是表单代码:

<?php

    require("connection.php");
echo '<html>
<title>Υποβολή Βιογραφικού</title>
</head></head>
<body>
    <form method='Post' action='insert.php'>
    Όνομα:<br>
    <input type="text" name="firstname">
    <br>
    Επώνυμο:<br>
    <input type="text" name="lastname">
    <br>
    Ηλικία:<br>
    <input type="number" name="age">
    <br>
    Σπουδές:<br>
    <textarea name="education" rows="10" cols="30"></textarea>
    <br>
    Επαγγελματική Εμπειρία:<br>
    <textarea name="experience" rows="10" cols="30"></textarea></textarea>
    <br>
    Ξένες Γλώσσες:<br>
    <textarea name="languages" rows="5" cols="10"></textarea>
    <br>
    Δυνατότητα Μετακίνησης:<br>
    <input type="text" name="travelling">
    <br>
    <br>
    <input type='submit' value='Υποβολή Βιογραφικού' />
    </form>




</body>
</html>';
?>

这就是将数据保存到数据库的代码。

<?php

include("connection.php");

$firstname=$_POST["firstname"];
$lastname=$_POST["lastname"];
$age=$_Post["age"];
$education=$_Post["education"];
$experience=$_Post["experience"];
$languages=$_Post["languages"];
$travelling=$_Post["travelling"];

mysql_query("INSERT INTO cv (Onoma, Epwnimo, Hlikia, Spoudes,
EpagelmatikiEmpeiria, KsenesGlwsses, DinatotitaMetakinisis)
VALUES 
('".$firstname."', '".$lastname."', '".$age."', '".$education."', 
'".$experience."', '".$languages."', '".$travelling."')");
header("Location:index.php");

?>

我是使用 php 编程的新手,所以错误可能很小

【问题讨论】:

  • 旁注:您不需要回显您的完整 HTML。只需执行 &lt;?php require("connection.php"); ?&gt; 然后您的 HTML。
  • 警告您的代码极易受到 sql 注入攻击!
  • 这可能有助于描述您在运行代码时实际观察到的内容。某些字段是否保留在数据库中,而其他字段则没有?不正确的数据是否持续存在?等

标签: php html sql database forms


【解决方案1】:

基本 PHP 字符串:不能在字符串内使用与使用 DEFINE 字符串相同的引号:

echo '<html>
     ^---start of string
<title>Υποβολή Βιογραφικού</title>
</head></head>
<body>
    <form method='Post' action='insert.php'>
                 ^---end of string
    Όνομα:<br>

所以你正在做相当于

echo 'foo' Post

这是一个明显的语法错误。

绝对有理由以这种方式使用多行回显。你在代码中没有变量,没有关于 html 的“动态”。所以就跳出 PHP 模式吧:

<?php
    require ...
?>
<html>
etc...

现在您不必担心 PHP 语法错误,因为您在输出该 html 时不再“使用”PHP。

【讨论】:

  • 马克的名言很好。
【解决方案2】:

这是问题之一。你所有的$_Post 必须是大写的$_POST,因为它是一个超全局的。

更多信息请访问:

另外,您当前的代码对SQL injection 开放。使用mysqli with prepared statementsPDO with prepared statements它们更安全

我也不知道你为什么要这样回应 HTML。

只需执行&lt;?php require("connection.php"); ?&gt; 然后您的 HTML,这样您就不必处理引号问题,您使用单引号来回显...

然后将它们放入&lt;form method='Post' action='insert.php'&gt;

&lt;input type='submit' value='Υποβολή Βιογραφικού' /&gt;

正如 Marc 在他的回答中所说,这会导致解析错误。

回复您的使用require("connection.php");。如果您不在该页面内进行查询,并且您的查询在另一个文件中作为您的操作处理程序,那么您不需要它,可以安全地删除它,只需使用标准的未回显的 HTML。

您在看似“insert.php”的文件include("connection.php");中进行操作


error reporting 添加到文件顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

还将or die(mysql_error()) 添加到mysql_query()

旁注:错误报告只能在暂存阶段完成,而不能在生产阶段完成。

【讨论】:

  • 你的耐心令人难以置信
  • @FélixGagnon-Grenier 是的,我是 Félix。一定是我心中的“仙人掌种植者”。
【解决方案3】:

将表单方法中的 Post 全部大写! POST 和所有 $_Post 都应该是大写的,比如 $_POST 也尝试像下面那样删除所有双引号和句点。

mysql_query("INSERT INTO cv (Onoma, Epwnimo, Hlikia, Spoudes, Epagelmatiki Empeiria, KsenesGlwsses, DinatotitaMetakinisis) 价值观 ('$firstname', '$lastname', '$age', '$education', '$experience', '$languages', '$travelling')");

【讨论】:

    猜你喜欢
    • 2014-06-29
    • 2016-03-24
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 2015-08-31
    相关资源
    最近更新 更多