【问题标题】:PHP form in HTML, won't connectHTML中的PHP表单,无法连接
【发布时间】:2016-04-23 19:00:24
【问题描述】:

所以我对 PHP 和一般数据库非常陌生,所以请放纵! :)

我在 HTML 文件中创建了一个简单的表单:

<h1> Créez votre compte ici</h1>
<form action="form.php" method="post">
<p id="textdone"> </p>
<input type= "text" name="Surname" autocomplete="on" placeholder="Votre nom" required/> <br> <br>
<input type= "text" name="Name" autocomplete="on" placeholder ="Votre prenom" required/> <br> <br>
<input type= "email" name="Email" autocomplete="on" placeholder ="Adresse mail" required/> <br><br>
<input type= "text" name="Pseudo" autocomplete="off" placeholder ="Votre pseudo" maxlength="20" required/> <br>
<p>Ajoutez une photo de profil: <input type= "file" /> <br><br></p>
<p> Entrez un mot de passe: <input type="Password" name="Passwird" autocomplete="off"  maxlength="20" required placeholder="Mot de passe"/> <br><br>
Validez votre mot de passe: <input type="password1" autocomplete="off"  maxlength="20" required placeholder="Mot de passe"/> <br><br>
    </p>
<input type="submit" value="Soumettre"/>
</form>
    </body>

所以我的动作文件,form.php 文件,保存在同一个文件夹中(我确定)如下:

<?php
define('DB_NAME', 'Matchy');
define('DB_USER', 'root@localhost');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

if (!$link){
    die('Could not connect: ' .mysql_error());
}
$db_selected = mysql_select_db(DB_NAME, $link);

if (!$db_selected){
    die('Can\'t use' . DB_NAME. ':'. mysql_error());
}
echo 'Successful connection';

$surname = $_POST['Surname'];
$name = $_POST['Name'];
$email = $_POST['Email'];
$pseudo = $_POST['Pseudo'];
$password = $_POST['Password'];

$sql = "INPUT INTO users (Name) VALUES ('$name')";
$sql1 = "INPUT INTO users (Surname) VALUES ('$surname')";
$sql2 = "INPUT INTO users (Pseudo) VALUES ('$pseudo')";
$sql3 = "INPUT INTO users (Email) VALUES ('$email')";
$sql4 = "INPUT INTO users (Password) VALUES ('$password')";

if (!mysql_query($sql)) {
    die ('Error: ' .mysql_error());
}
if (!mysql_query($sql1)) {
    die ('Error: ' .mysql_error());
}
if (!mysql_query($sql2)) {
    die ('Error: ' .mysql_error());
}
if (!mysql_query($sql3)) {
    die ('Error: ' .mysql_error());
}
if (!mysql_query($sql4)) {
    die ('Error: ' .mysql_error());
}

mysql_close();
?>

但每次我填写表单并点击提交时,我都会收到以下消息: 无法发布 /form.php。

我从以下视频 (https://www.youtube.com/watch?v=wp6Ngpk5XiY&index=2&list=PL530D33D6E548481F) 中获得此代码,这非常有用。但我真的无法连接。我在我的数据库上创建了我的表,其中包含所有正确的列。 我使用 phpMyAdmin。

非常感谢任何可以提供帮助的人! :)

【问题讨论】:

  • INPUT 是有效的 mysql 命令吗?不应该是INSERT INTO users (Name) VALUES ('$name'); 吗?也许那只是我不熟悉的一个mysql的东西。
  • 你得到的错误是从哪里生成的:“Cannot Post /form.php”是从哪里生成的?我在上面的代码中没有看到。
  • ahem name="Passwird"$_POST['Password'] = 没有爱。这个php.net/manual/en/function.error-reporting.php 会告诉你的。
  • @Fred-ii- 脱帽致敬 :D &lt;input type="password1" autocomplete="off" maxlength="20" required placeholder="Mot de passe"/&gt; 这个人也没有提供爱。无输入type密码1
  • @AndreDebuisne 视频需要删除 lol

标签: php database forms


【解决方案1】:

让我们在这里概述错误。

INPUT INTO 不是有效的 MySQL 表达式,语法为 INSERT INTO

那么你有 name="Passwird"$_POST['Password'] 不匹配,错误报告 http://php.net/manual/en/function.error-reporting.php 会告诉你。

然后正如另一位成员在 cmets 中概述的那样:

&lt;input type="password1" autocomplete="off" maxlength="20" required placeholder="Mot de passe"/&gt; 这个也没有提供爱。没有输入类型密码1 - Hendra Nucleo

应该是password 而不是password1

最好使用正确的官方引用http://dev.mysql.com/doc/en/insert.html 并使用prepared statementsmysqli_* with prepared statements 切换到PDO,因为mysql_* 函数已被弃用。官方手册是最好的参考。

  • 他们不会误导你的 ;-)

那篇教程可能没有提到任何关于 SQL injection 的内容,所以这本身就是一本好书。

也没有提及密码。

我注意到您可能以纯文本形式存储密码。不建议这样做。

使用以下方法之一:

其他链接:

关于列长度的重要旁注:

如果您决定使用password_hash() 或兼容包(如果 PHP https://github.com/ircmaxell/password_compat/,请务必注意,如果您当前密码列的长度小于 60,则需要改为那个(或更高)。手册建议长度为 255。

您需要更改列的长度并使用新的哈希值重新开始以使其生效。否则,MySQL 将静默失败。


编辑:

整个代码块可以很容易地在几行中完成,例如并且不需要对同一个表进行如此多的调用:

$sql = mysql_query("

        INSERT INTO users (Name, Surname, Pseudo, Email, Password) 
        VALUES ('$name', '$surname', '$pseudo', '$email', '$password')

        ");

if($sql){
echo "Success!";
}

else { "Error: " . mysql_error(); }

【讨论】:

  • @Fred-ii- 简单的问题,为什么在使用过程方法打开连接并选择数据库时没有错误,然后使用 `$var->query('SELECT * FROM table_name') 运行查询?
  • 这绝对是一个比另一个更好的答案,并且涵盖了几个优点。这是一个很好的起点。一个很好的收获是:尝试预先进行尽可能多的分析和规划,尤其是在涉及数据库设计和技术(语言、代码结构、框架和库)时。尽管看起来你只是想学很多东西,但最好早点养成好习惯。它将最大程度地减少问题,并让其他人在遇到问题时更容易帮助您。
  • @HendraNucleo 特定错误很可能在代码执行中比特定调用更早发生。
  • @gmiley 绝对没有错误,从数据库中提取数据成功查询。
  • @HendraNucleo 如果在过程或面向对象中都没有使用错误检查,那么它不会抛出任何东西,除非服务器本身已经设置为抛出它们而不必使用错误检查功能。我的意思是在 * NIX 系统上的 sysop 级别,我们大多数人都拥有如此高的访问级别。
【解决方案2】:

是的,@gmiley 提出了一个很好的问题,检查您是否可以使用输入,而不是在单个语句中对所有值使用插入查询。语法可以参考以下链接:http://www.w3schools.com/sql/sql_insert.asp

【讨论】:

  • 好家伙笑脸没有接受其他东西,这不是我的反对意见;-)
  • 我没听懂你,你想说什么
  • 这不是真正的答案,更多的是评论。
  • 好的,下次我会注意的。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-02
  • 1970-01-01
  • 2022-10-15
  • 2020-07-24
  • 2017-09-06
相关资源
最近更新 更多