【问题标题】:Html/php/mysql forms are not submitting and redirecting issueHtml/php/mysql 表单没有提交和重定向问题
【发布时间】:2014-02-04 11:39:13
【问题描述】:

我正在为我的用户制作仪表板。我按等级设置,每个等级都可以做自己的事情。现在,我有三个问题。一个和两个是关于表单的,另一个是关于重定向问题的。这些表格没有提交到数据库中,我不知道为什么。两种形式如下。第三个问题是重定向。由于系统是按等级设置的,我不希望等级访问其他等级仪表板。它不会将其他等级从那里重定向到仪表板作为其全部一次登录,并且当这些等级登录时,它会将它们重定向到正确的仪表板,但是如果说合作伙伴进入管理仪表板,它会让他们进入我不想要的地方。另外我忘了提到,当用户登录时,如果他们转到我不想要的登录网址,它会让他们回到登录页面,我希望它将他们重定向到那里的仪表板。表格如下。

第一种形式:

<?php

$id = $_GET['id'];
$result = $db->query("SELECT * FROM users WHERE Id = '.$id.'");

if(isset($_POST['submit']))
{
  $username1 = $_POST['username'];
  $email1 = $_POST['email'];
  $password1 = $_POST['password'];
  $f_name = $_POST['f_name'];
  $l_name = $_POST['l_name'];
  $rank1 = $_POST['rank'];
  $skype1 = $_POST['skype'];

  $db->query("UPDATE users SET (Email, Username, FName, LName, Rank, SkypeID) VALUES(''.$email1.'', ''.$username1.'', ''.$f_name.'', ''.$l_name.'', ''.$rank1.'', ''.$skype1.'') WHERE Id = ".$id."");
}

?>

<?php
$id = $_GET['id'];
$result = $db->query("SELECT * FROM users WHERE id='$id'");
while($row = $result->fetch_assoc()) 
{
  $username = $row['Username'];
  $email = $row['Email'];
  $fname = $row['FName'];
  $lname = $row['LName'];
  $rank = $row['Rank'];
  $skype = $row['SkypeID'];
}
?>
<form method="POST">
  Username: <input type="text" name="username" value="<?php echo ($username); ?>"><br>
  Email: <input type="email" name="email" value="<?php echo ($email);?>"><br>
  Passowrd: <input type="password" name="password"><br>
  First Name: <input type="text" name="f_name" value="<?php echo ($fname);?>"><br>
  Last Name: <input type="text" name="l_name" value="<?php echo($lname); ?>"><br>
  Rank: <input type="text" name="rank" value="<?php echo ($rank); ?>"><br>
  Skype: <input type="text" name="rank" value="<?php echo ($skype); ?>">
  <button type="submit" name="submit">Update User</button>
</form>

第二种形式:

<?php
if(isset($_POST['submit']))
{
  $c_name = $_POST['c_name'];
  $v_link = $_POST['v_link'];
  $v_title = $_POST['v_title'];
  $v_desc = $_POST['v_desc'];
  $v_tags = $_POST['v_tags'];
  $m_sources = $_POST['m_sources'];
  $s_requests = $_POST['s_requests'];

  if(empty($c_name) or empty($v_link) or empty($v_title) or empty($v_title) or empty($v_desc) or empty($v_tags))
  {
    echo 'You must fill in the first 5 fields.';
  }
  else
  {
    $getRank = $db->query("SELECT * FROM users WHERE username = ".$_SESSION['username']."");
    while ($row = $getRank->fetch_assoc($getRank))
    {
      $usename = $row['username'];
      $rank = $row['rank'];
    }
    $db->query("INSERT INTO submitted_forms (username, rank, channel_username, video_link, video_title, video_description, video_tags, music_sources, special_requests) VALUES (''.$username.'', ''.$rank.'', ''.$c_name.'', ''.$v_link.'', ''.$v_title.'', ''.$v_desc.'', ''.$v_tags.'', ''.$m_sources.'', ''.$s_requests.'')");
    echo 'Form submitted successfully.';
    }
  }
?>

<form method="POST">
  Channel name: <input type="text" name="c_name" required>*<br>
  Video Link: <input type="text" name="v_link" required>*<br>
  Video Title: <input type="text" name="v_title" required>*<br>
  Video Description: <input type="text" name="v_desc" required>*<br>
  Video Tags: <input type="text" name="v_tags" required>*<br>
  Music Sources: <input type="text" name="m_sources"><br>
  Special Requests: <input type="text" name="s_requests"><br>
  <button type="submit" name="submit">Submit</button><br>
</form>

现在,如果仪表板不存在,我将使用以下代码将用户重定向到仪表板之外。它重定向未登录的用户,但与其他用户不同。它应该只允许管理员进入。

<?php session_start();
if(isset($_SESSION['admin']))
{
$_SESSION['username'];

} else {
  header("location: ../index.php");
} ?>

现在,这是登录脚本。如果他们已登录,我希望它将排名重定向到仪表板,我不知道如何植入。

<?php
require 'core/config.php';


if(isset($_POST['submit']))
{
  $username = $db->real_escape_string($_POST['username']);
  $password = md5($_POST['password']);

  if(empty($username) or empty($password))
  {
    echo 'You must fill in both boxes!';
  } else {
    $query = $db->query("SELECT * FROM users WHERE username = '".$username."'");
    while($row = $query->fetch_assoc())
    {
      $dbpassword = $row['Password'];
    }

    if($password !== $dbpassword)
    {
      echo 'Password was incorrect.';
    } else {
      $query1 = $db->query("SELECT * FROM users WHERE username='".$username."'");
      while($rows = $query1->fetch_assoc())
      {
        $rank = $rows['Rank'];
      }

      if($rank === 'admin')
      {
        $_SESSION['admin'] = '1';
        $_SESSION['username'] = $username;

        echo '<script>window.location="management/index.php";</script>';
      }
      elseif ($rank === 'partner')
      {
        $_SESSION['partner'] = '1';
        $_SESSION['username'] = $username;

       echo '<script>window.location="partner/index.php";</script>';
      }
      elseif ($rank === 'trainee')
      {
         $_SESSION['trainee'] = '1';
         $_SESSION['username'] = $username;

        echo '<script>window.location="trainee/index.php";</script>';
      }
      else 
      {
        echo 'Account not found.';
      }
    }
  }
}
?>

【问题讨论】:

  • 请在您的登录页面中。
  • 等等,它在里面。它在最顶端。我只是复制了整个 php 部分
  • 它以前就在里面,这不是问题。登录工作正常
  • “这些表单没有提交到数据库,我不知道为什么” – 表单不与数据库通信,您的脚本可以。而且您还没有对您的数据库查询可能出现的问题一无所知 - 所以请阅读有关如何在数据库查询方面进行一些适当的错误处理,然后实施它。
  • 没必要对此大惊小怪。我还在学习。我知道脚本确实如此,这就是我的意思。

标签: php html mysql forms


【解决方案1】:

在你的登录脚本中试试这个:

<?php
require 'core/config.php';

//assuming that you have already start your session at the very top

if(isset($_POST['submit']))
{
$username = $db->real_escape_string($_POST['username']);
$password = md5($_POST['password']);

if(empty($username) or empty($password))
{
echo 'You must fill in both boxes!';
} else {
$query = $db->query("SELECT * FROM users WHERE username = '".$username."'");
while($row = $query->fetch_assoc())
{
  $dbpassword = $row['Password'];
}

if($password !== $dbpassword)
{
  echo 'Password was incorrect.';
} else {
  $query1 = $db->query("SELECT * FROM users WHERE username='".$username."'");
  while($rows = $query1->fetch_assoc())
  {
    $rank = $rows['Rank'];
  }

  if($rank === 'admin')
  {
    $_SESSION['rank'] = $rank;
    $_SESSION['username'] = $username;

    echo '<script>window.location="management/index.php";</script>';
  }
  else if ($rank === 'partner')
  {
    $_SESSION['rank'] = $rank;
    $_SESSION['username'] = $username;

   echo '<script>window.location="partner/index.php";</script>';
  }
  else if ($rank === 'trainee')
  {
     $_SESSION['rank'] = $rank;
     $_SESSION['username'] = $username;

    echo '<script>window.location="trainee/index.php";</script>';
  }
  else 
  {
    echo 'Account not found.';
  }
 }
}
}
?>

在您的 management/index.php 或应该只允许管理员进入的页面中。

 <?php session_start();
  if(isset($_SESSION['rank']) and $_SESSION['rank'] == "admin")
  {
  $_SESSION['username'];

  } else {
  header("location: ../index.php");
  } ?>

如果你存钱,你可能会忘记正确的引用:

<?php
 if(isset($_POST['submit']))
 {
 $c_name = $_POST['c_name'];
 $v_link = $_POST['v_link'];
 $v_title = $_POST['v_title'];
 $v_desc = $_POST['v_desc'];
 $v_tags = $_POST['v_tags'];
 $m_sources = $_POST['m_sources'];
 $s_requests = $_POST['s_requests'];

 if(empty($c_name) or empty($v_link) or empty($v_title) or empty($v_title) or empty($v_desc) or empty($v_tags))
 {
   echo 'You must fill in the first 5 fields.';
 }
 else
 {
  $getRank = $db->query("SELECT * FROM users WHERE username = '$_SESSION[username]'");
while ($row = $getRank->fetch_assoc($getRank))
 {
   $usename = $row['username'];
   $rank = $row['rank'];
 }
 $db->query("INSERT INTO submitted_forms (username, rank, channel_username, video_link, video_title, video_description, video_tags, music_sources, special_requests) VALUES ('$username', '$rank', '$c_name', '$v_link', '$v_title', '$v_desc', '$v_tags', '$m_sources', '$s_requests')");
echo 'Form submitted successfully.';
 }
 }
?>

【讨论】:

  • 我试过这个,现在我收到一堆“警告:session_start() [function.session-start]:无法发送会话缓存限制器 - 标头已发送(输出开始于 /:1 ) 在 /index.php 第 1 行'
  • 对于你给我的表格,我收到了这个错误,也是在原来的'警告:mysqli_result::fetch_assoc() 需要 0 个参数,1 在第 37 行给出'
  • 稍后再考虑在数据库中插入数据,但首先关注页面的重定向,“Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers已经在第 1 行的 /index.php 中发送(输出开始于 /:1)” = 这意味着您已经开始了一个会话,您的 index.php 是否有一个 include("somePHPpageHEre.php")?
  • 我的页面上没有包含文件。我在多页上做了,但都没有。会话开始一直在顶部,因此它不能是空格。我不知道它是什么。我现在要试试表格的编辑版本。现在,你能看到我发布的另一个表格吗?
  • 您的第一个表单还没有更新,让我们一步一步来吧。如果您同意,我们必须先尝试重定向。
猜你喜欢
  • 2022-01-16
  • 1970-01-01
  • 2012-05-28
  • 2017-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多