2011-11-04 174 views
1

我有一个网站,其中包含产品列表,每个产品都有选项,您可以通过简单的形式将某些信息发送到电子邮件地址。无法从GET方法获取价值

窗体在新窗口中打开。它由一个输入字段(用于电子邮件地址)和一个提交按钮组成。 ?URL的例子:.../send_email.php的productid = 12345

这里是形式:

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
    <input type="text" name="youremail" value="youremail"><br /><br /> 
    <input type="submit" name="sendsubmit" value="Send"> 
</form> 

这是我发送的形式:

<?php 
    if(isset($_POST['sendsubmit'])){ 

    $productid = $_GET['productid']; 

    $youremail = $_POST['youremail']; 
    $subject = "Product name"; 

    $email_exp = '/^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/'; 
    if(!preg_match($email_exp,$youremail)) { 
     echo 'Your email address does not appear to be valid.<br />'; 
    } 

    mail($youremail, $subject, $productid); 
    } 
?>  

问题是我无法得到“productid”的价值。我究竟做错了什么?

+0

尝试获取if(isset())条件之前的产品ID。 –

回答

0

好吧,不要问这个问题,你必须检查你的表单的HTML代码,看看它有什么问题。
只有你可能会问一个问题,“什么服务器变量包含全部当前网址”。

检查代码的结果非常重要。没有经常使用这种做法,你就不能成为PHP用户。

为您particilar问题 - 见好就收的操作空白

<form method="post" action=""> 
+0

我不是一个真正的PHP用户,这是我第一次听说$ _SERVER ['QUERY_STRING']。在发布问题之前,我尝试了很多东西,但没有任何工作。我会更加注意这一点。 谢谢你的回答! – ptinca

+0

好吧,你不需要,因为空操作将是一个解决方案,根本不需要使用任何PHP变量 –

+0

因此,如果PHP代码在同一个文件中,我可以在任何情况下保留动作为空? – ptinca

2

$_SERVER['PHP_SELF']不包括查询字符串。你想要$_SERVER['REQUEST_URI']

-1

$_SERVER['PHP_SELF']不包含查询字符串。

尝试用$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']代替。

+0

这对我有用。谢谢! – ptinca

+0

我不会称这个解决方案为防弹解决方案。说,对于重写的URL,它不会有帮助。请使用REQUEST URI或将操作留空,以使其变得牢固和便携。 –

+0

我认为在我的情况下,最好是让它保持空白。 – ptinca

0

,如果你在send.php文件正在做的全过程,if(isset($_POST['sendsubmit']))之前使用$_GET['productid']

$productid = (isset($_GET['productid'])) ? $_GET['productid'] : 'error'; 
0

验证调用带有URL提交($ _ SERVER [ 'PHP_SELF'])包含?的productid = 12345