2013-10-27 93 views
0

我在提交表单后加载新鲜的“thankyou.php”文件时出现问题。表单将数据发送给自己,如果所有数据都通过了验证,则会继续将它们保存在数据库中。PHP URL重定向不能按预期方式工作

“thankyou.php”负载很重,但“signup.php”仍然存在,两个文件的输出仍保留在同一页面中。我想要一个新的页面,但它不会工作。

这里是我的环境卫生:

if ($_SERVER["REQUEST_METHOD"] == "POST") 
{ 
if (empty($_POST["firstName"])) 
{$Err[] = "* First Name is required";} 
else 
{ 
$name = test_input($_POST["firstName"]); 
// check if name only contains letters and whitespace 
if (!preg_match("/^[a-zA-Z ]*$/",$name)) 
    { 
    $Err[] = "Only letters are allowed in First Name"; 
    } 
} 

if (empty($_POST["email"])) 
{$Err[] = "* Email is required";} 
else 
{ 
$email = test_input($_POST["email"]); 
// check if e-mail address syntax is valid 
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) 
    { 
    $Err[] = "Invalid email format"; 
    } 
} 
} 

而且形式:

<div id = "signupform"> 

“> 邮箱地址 名

和数据库连接和插入:

try { 
    $conn = new PDO('mysql:host=localhost; dbname=mydb', 'root', ''); 
    $conn->setAttribute(PDO:: ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} 

赶上(PDOException $ PE){ 回波( '连接错误,这是因为:'。$ PE->的getMessage()); }

//插入数据到数据库,如果值不为空,并进行消毒 如果(!空($ _ POST [ “名字”])& &!空($ _ POST [ “电子邮件”])) { $ qry =“INSERT INTO userdetails(email,firstName)values(?,?)”;

$q = $conn->prepare($qry) or die("ERROR: " . implode(":", $conn->errorInfo())); 

$q->bindParam(1, $email); 
$q->bindParam(2, $firstName); 


try { 
    if($q->execute()){ 
    header("Location: invoice.php"); 
    exit; 
    } 
    } 
catch(PDOException $pe) { 
    echo('Connection error, because: ' .$pe->getMessage()); 
} 

}

而这一切,但它仍然不加载新的一页。

+0

出口是否必需? – Duver

+1

@DuverJaramillo是的建议。 –

+0

你可以试试''if($ q){'而不是'if($ q-> execute()){' –

回答

0

我认为这个问题是您呼叫$q->execute()两次,试试这个:

try { 
    if ($q->execute()){ 
     header("Location: thankyou.php"); 
     exit; 
    } 
} catch(PDOException $pe) { 
    echo('Connection error, because: ' .$pe->getMessage()); 
} 
+0

我做到了,但问题仍然是一样的。 –

+0

@YaxMokwa您是否尝试过我在[我的评论](http://stackoverflow.com/questions/19614565/php-url-redirection-problema#comment29117021_19614565)上面写的内容?使用'if($ q){'而不是'if($ q-> execute()){' –

+0

@YaxMokwa向我展示了更多的代码,您将POST请求发送到signup.php的地方在哪里? – TrungDQ

0

更多的挖掘和更了解你实际上是在做什么(错误的方式),我想到了我的解决方案后, 。几乎你需要做到这一点,以便MySQL插入语句成为错误验证的一部分,而不是独立的。如果你看看我以前的代码,PDO语句在代码中没有真正的地位,它就在那里。

但是,如果确实没有$Err,它将运行插入脚本并对该脚本进行错误检查。如果插入正确,则会将用户重定向到下一页。

有关验证码,请使用提交按钮进行检查。

if(isset($_POST["submit"])){if (empty($_POST["firstName"])){$Err[] = "* First Name is required";}else{$name = test_input($_POST["firstName"]);if (!preg_match("/^[a-zA-Z ]*$/",$name)) { $Err[] = "Only letters are allowed in First Name"; }}if (empty($_POST["email"])){$Err[] = "* Email is required";}else{$email = test_input($_POST["email"]);if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)){ $Err[] = "Invalid email format"; }} } 

验证的错误消息:

if (empty($Err) === false) { 
     echo '<h3>'; 
     foreach ($errors as $Err) { 
      echo '<center><li>', $error, '</li></center>'; 
     } 

     echo '<h3>'; 
    } 

你的HTML表单应该是这样的:

<form method="post" action ="echo $_SERVER['PHP_SELF'];"><table >   
<tr><td>Email Address < input type="text" name="email" value="email" ></td> 
</tr><tr valign="baseline"> 
    <td>First Name <br/>< input type="text" name="firstName" value="" ></td> 
</tr> 
<input type="submit" value="submit" name="submit"> 
</form> 

现在服务器端的查询操作将只验证执行:

try { 
    $conn = new PDO('mysql:host=localhost; dbname=mydb', 'root', ''); 
    $conn->setAttribute(PDO:: ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
}catch(PDOException $pe) { 
    echo('Connection error, because: ' .$pe->getMessage()); 
}if (!empty($_POST["firstName"]) && !empty($_POST["email"])){ 
$qry = "INSERT INTO userdetails (email, firstName) values (?, ?)"; 
$q = $conn->prepare($qry) or die("ERROR: " . implode(":", $conn->errorInfo())); 
$q->bindParam(1, $email); 
$q->bindParam(2, $firstName); 
try { 
    if($q->execute()){ 

// You can use Two Way to Redire Server side Depending on version 

     // http_redirect("invoice.php"); 
     //OR (Above & below any 1 line can be workout for you. 
     header("Location: invoice.php"); 
     exit; 
    } 
    } 
catch(PDOException $pe) { 
    echo('Connection error, because: ' .$pe->getMessage()); 
}}