【问题标题】:Header, logic and database标头、逻辑和数据库
【发布时间】:2013-07-27 20:52:03
【问题描述】:

我的标题位置有问题。我是 php 新手,运行这个单独的 php 文件后,我无法重定向到我的索引页面。此外,我的函数无法判断文本框的内容是空白还是等于“”的默认值。

谢谢

<?php
include('connectionFile.php');

//test for duplicate emails
$query="SELECT * FROM ClientEmail WHERE ClientEmailAddress = '$_POST[emailAdd]'";
$email=$_POST['emailAdd'];
$result=mysql_query($query);
$num=mysql_num_rows($result);

if($num==0)
  {
   if(isset($_POST['emailAdd']) && !empty($_POST['emailAdd']) &&        $_POST['emailAdd'].value != "<<please enter email>>")
{
// the form was submitted
//remove hacker HTML
$email2=strip_tags($_POST['emailAdd']);

//Insert data into database
$sql2="INSERT INTO ClientEmail SET ClientEmailAddress='$email2'";
$result=mysql_query($sql2);

//Direct back to homepage
echo "heloooo";
header('location:/index.php');
   }
else
{

header('location:/index.php');
}
}
else
{
header('Location:http://www.google.com');
`enter code here`}
?>

编辑

修改后提示我的错误日志如下

注意:使用未定义的常量 db_selected - 在第 15 行的 /home/clubbtpk/public_html/connectionFile.php 中假设为“db_selected”

警告:无法修改标头信息 - 第 28 行 /home/clubbtpk/public_html/addEmail.php 中的标头已由(输出开始于 /home/clubbtpk/public_html/connectionFile.php:15)发送

连接文件中的代码是:

<?php
$host="localhost";
$username="username";
$password ="password";
// Create connection to mysql server
$con=mysql_connect("$host","$username","$password");

// Check connection
if (!$con)
  {
      die ("Failed to connect to MySQL: " . mysql_error());
  }
  // Select database
  $db_selected = mysql_select_db("DB", $con);
  if(!db_selected)
  {
    die ("Cannot connect : " . mysql_error());
  }
?>

编辑 2

通过更改解决了第一个错误 如果(!db_selected) 至 if(!$db_selected)

已解决 在我的 index.php 文件中添加了以下代码行:

<?php
if(isset($_REQUEST["emailAdd"])){
include("addEmail.php");
}
?>

然后将表单的操作更改为“”,以便重新加载当前页面:

<form name="emailAddr" method="post" action="">

【问题讨论】:

    标签: php mysql database insert


    【解决方案1】:

    您在重定向之前不得输出任何内容。

    所以这是不允许的:

    echo "heloooo";
    header('location:/index.php');
    

    编辑:您绝对应该在脚本上启用 error_reporting。我在您的查询中发现了另一个错误:

    $query="SELECT * FROM ClientEmail WHERE ClientEmailAddress = '$_POST[emailAdd]'";
    

    应该是

    $query="SELECT * FROM ClientEmail WHERE ClientEmailAddress = '" . $_POST['emailAdd'] . "'";
    

    此外,您不应再使用 mysql_* 函数,而应升级到 mysqli_* 函数。并且总是在将输入的数据插入到 sql-queries 之前检查它们。

    EDIT2:在脚本开头添加:

    ini_set('display_errors',1);
    ini_set('display_startup_errors',1);
    error_reporting(-1);
    

    EDIT3:

    你也必须改变这一行:

    if(isset($_POST['emailAdd']) &amp;&amp; !empty($_POST['emailAdd']) &amp;&amp; $_POST['emailAdd'].value != "&lt;&lt;please enter email&gt;&gt;")

    应该是:

    if(isset($_POST['emailAdd']) &amp;&amp; $_POST['emailAdd'] != "&lt;&lt;please enter email&gt;&gt;")

    如果您打开 error_reporting,您会自己看到它。

    【讨论】:

    • 我用echo来测试代码的逻辑。我现在把它拿出来,我只是得到一个空白页
    • 我在答案中添加了另一个部分。您应该将此代码添加到脚本的开头并粘贴您在问题中收到的错误消息!
    • 即使使用我拥有的代码,我也可以将其添加到数据库中。如果我可能会问,您的修改版本究竟有什么变化?我的主要问题仍然是重定向
    • 如果您将我的答案的最新部分添加到您的代码中,您将看到错误消息。由于错误和您之前的回声,重定向不起作用。因此,添加代码并粘贴您收到的错误。由于错误使用引号,您的第一个查询将始终返回零行。
    • 注意:使用未定义的常量 db_selected - 在第 15 行 /home/clubbtpk/public_html/connectionFile.php 中假设为“db_selected”
    猜你喜欢
    • 1970-01-01
    • 2017-11-05
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 2016-12-29
    • 2011-10-23
    • 1970-01-01
    相关资源
    最近更新 更多