【问题标题】:Showing the users' username on screen. Getting 'Undefined Index' error在屏幕上显示用户的用户名。出现“未定义索引”错误
【发布时间】:2014-08-11 03:04:13
【问题描述】:

好的,所以我正在尝试在 index.php 上将用户的名字显示为问候消息,例如“你好,(用户的名字),但我对所有这些 php 内容都很陌生,所以我真的不知道这个怎么做。我尝试遵循一个简短的教程,但是每当我尝试使用 'print $_POST['first_name'] 打印名字时,我都会收到未定义的索引错误.... 可能是一个愚蠢的问题,但我就是想不通.

这是我的 db_connect.php,如果它很重要的话:

<?php
$host = "localhost";
$user = "root";
$pass = "";
$db = "Byt til Nyt";
$ms = mysql_pconnect($host, $user, $pass);
if ( !$ms )
{
echo "Could not connect to database.";
}

mysql_select_db("$db");

?>

这是我的 register.php 的简短版本:

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>Register</title>
<?php
include('includes/db_connect.php');
if (@$_GET["op"] == "reg") {
    $bInputFlag = false;
    foreach ($_POST as $field) {
        if ($field == "") {
            $bInputFlag = false;
        } else {
            $bInputFlag = true;
        }
    }
    if ($bInputFlag == false) {
        die("Der opstod et problem med dine oplysninger. Gå tilbage og prøv igen.");
    }
    $q = "INSERT INTO 'users' ('first_name','last_name','email','username','password')" . "VALUES ('" . $_POST["username"] . "'," . "PASSWORD ('" . $_POST["password"] . "')," . "'" . $_POST["email"] . "')";
    $r = mysql_query($q);
    if (!mysql_insert_id()) {
        die("Der opstod en fejl. Du er ikke blevet tilføjet til databasen.");
    } else {
        Header("Location: register.php?op=thanks");
    }
} elseif (@$_GET["op"] == "thanks") {
    echo "<h2>Tak fordi du registrerede!</h2>";
}
?>
</head>
<body>
<form method="post" action="includes/verify.php" name="register">
//recaptcha script here
<label>First name</label>
<input type="text" name="first_name" placeholder="Your first name" required><br>
<label>Last name</label>
<input type="text" name="last_name" placeholder="Your last name" required><br>
//some more input fields and stuff

这是我的 index.php 的简短版本:

<?php
session_start();
include("includes/functions.php");
include("includes/db_connect.php");
?>
<!DOCTYPE html>
<html lang="dk">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<head>
<title>
Byt til Brugt
</title>
<link rel="stylesheet" href="index.css">
</head>
<body background="http://i.imgur.com/urLzQr5.jpg" bgcolor="navy">
<div class="menu">
<p>Velkommen, <?php if (isset($username)) {
print $_POST['first_name'];
}
?>
</p>

那么,问题出在哪里?? :/ 任何帮助将不胜感激,我已经尝试解决这个问题 2 天了.... 只要说如果你需要我的 login.php 或其他任何东西(:非常感谢!对不起我的英语不好。 .

【问题讨论】:

  • 问题是您使用单引号来分隔列名和表名。这是一个印刷错误,我投票结束。仅对日期和字符串常量使用单引号。
  • 修复后仍然出现同样的错误...
  • 。 .编辑您的问题并打印出$q。您在insert 中提供的列似乎比values 子句中的值更多。
  • 你提到了表单 action="include/verify.php" 但是为什么你在 register.php 中执行你的函数并且还使用头位置 Header("Location: register.php?op=thanks") ;现在我的问题是你从哪个页面获得 $_POST[first_name];
  • 如果您是 PHP 新手,那么您应该使用更新的教程。不推荐使用像mysql_query 这样的 mysql_* 函数。最好从一开始就避免它们。

标签: php html mysql phpmyadmin xampp


【解决方案1】:
$_POST['first_name']  

可能没有设置,试试

<?php if (isset($_POST['first_name'])) {
print $_POST['first_name'];
}
?>

【讨论】:

    【解决方案2】:

    您没有让用户发布到您的索引页面,因此当您尝试访问它时 $_POST 变量为空。

    您的注册表单张贴到includes/verify.php

    仅当用户使用 POST 方法提交表单时,才会为您填充变量 $_POST。所以你永远不要期望它包含数据,总是先检查它(至少!empty($_POST))。

    您可能打算使用他们的用户名从数据库中检索名称。 (可能存储在会话中?) 填充变量后,您只需在需要时回显该变量,您将获得他们在注册时输入的名字。

    此外,出于同样的原因,您的注册页面也无法按预期工作。您正在发布到 includes/verify.php 并且从您的代码来看,您的验证页面看起来像是将用户重定向回 register.php?op=reg 这意味着您只是丢失了所有 POST 数据,除非您使用 javascript 回发register.php?op=reg (但这不是必需的)

    另外,你的 MySQL 是错误的。您正在尝试插入 5 个字段

    'first_name','last_name','email','username','password'
    

    你只传递了 3 个值

    'username', 'password', 'email' 
    

    您应该传递 5 个值,并且顺序应该与列列表匹配。如果您为用户名和密码设置默认值,那么这可能不会导致 MySQL 错误,但您的数据将与预期字段不匹配。
    (用户名到名字,密码到姓氏,电子邮件到电子邮件,用户名中没有任何内容,密码中没有任何内容)

    您提到您正在学习一个教程,所以最好还是寻找另一个教程。考虑到您应该避免使用 mysql_connect 或 mysql_pconnect 作为数据库方法,可能会更新一些。

    【讨论】:

      猜你喜欢
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 2014-11-23
      相关资源
      最近更新 更多