功能实现:提交订单,收到短信通知,同时跳转到订单成功界面。
本地测试一切正常,可以正常跳转,但是传到服务器之后,跳转不成功,一直停留在表单的action界面,并提示invalid address!求高手指点下,亟待解决!

解决方案 »

  1.   

    invalid address 无效地址
    那自然是你弄错了的
      

  2.   

    那不能说明什么
    可能目标文件你没有传上去
    也可能服务器端并不支持 header 函数你得先搞清楚 invalid address!是哪个环节发出的
      

  3.   

    这个是表单的跳转页面,action的目标是order.php,这个是order.php的header跳转,服务器上提交form之后,自动停留在了order.php,然后显示无效地址invalid address。
      

  4.   

    invalid address 是你代码里的提示信息吗?提供的代码太少,你order.php 中有输出invalid address吗?
      

  5.   

    这个是表单提交后出现的问题  
    本地测试不会出现这个  而是直接跳到orderok.php
      

  6.   

    直接访问 http://www.iptvbeijing.com/orderform/order.php 就是显然问题并不仅在最后的 header 上直接访问 http://www.iptvbeijing.com/orderform/orderok.php 有这样的画面
    你的跳转是 header('Location: /orderok.php?......
    显然还差了一级目录 orderform而直接 http://www.iptvbeijing.com/orderok.php 则是 404
      

  7.   

    观察到你本地测试时还多了一级 iptvpj
    显然你本地还做了特殊设置,而服务器上并没有
      

  8.   

    改了一下,还是不行  
    那个order.php只是一个给手机发短信然后跳转到orderok.php页面的过度,实际操作中并不需要他显示,只有在进行验证时才跳出提示。
    至于那个invalid adress  依旧找不到原因啊!
      

  9.   


    <?php
    error_reporting(0);
    session_start();
    date_default_timezone_set('Asia/Shanghai');
    require_once("class.phpmailer.php");
    require_once("config.php");
    $out_trade_nos = date('Ymdhis');
    $paytypes = $_POST['pay'];
    $products = $_POST['product'];
    $names = $_POST['name'];
    $mobs = $_POST['mob'];
    $years = $_POST['year'];
    $months = $_POST['month'];
    $days = $_POST['day'];
    $hours = $_POST['hour'];
    $halfdays = $_POST['halfday'];
    $provinces = $_POST['province3'];
    $citys = $_POST['city3'];
    $areas = $_POST['area3'];
    $addesss = $_POST['addess']; 
    $link_email = $_POST['email'];
    $total_fee = $dfprize * $alipayzk;
    $mail = new PHPMailer();
    $mail->IsSMTP(); 
    $mail->CharSet = "gb2312";
    $mail->Host = $Mailhost;
    $mail->SMTPAuth = true;
    $mail->Username = $MailUsername;
    $mail->Password = $MailPassword;
    $mail->From = $MailFrom;
    $mail->FromName = $FromName;
    $mail->AddAddress($MailTo,$FromName);
    $mail->AddAddress($MailTob,$FromName);
    $mail->WordWrap = 50;
    $mail->IsHTML(true);
    $mail->Subject = "有新订单,请及时查看发货!";
    $mail->Body = "
    <div style='width:50%;margin: 0 auto;padding:30px;border:2px dotted #bd0a01;background:#FFC;'>
    <p align='center' style='height:40px;line-height:40px;font-size:28px;font-weight:bold;color:#bd0a01;border-bottom:2px dotted #bd0a01;'>订单详情</p>
    <p>【订单编号】:<font color='#BD0000'>".$out_trade_nos."</font></p>
    <P>【产品】:"."$_POST[product]"."</P>
    <P>【姓名】:"."$_POST[name]"."</P>
    <P>【手机】:<a href='http://www.baidu.com/s?wd="."$_POST[mob]"."'>"."$_POST[mob]"."</a></P>
    <P>【安装时间】:"."$_POST[year]"."-"."$_POST[month]"."-"."$_POST[day]"."-"."$_POST[hour]"."."."$_POST[halfday]"."</P>
    <P>【地址】:"."$_POST[province3]".""."$_POST[city3]".""."$_POST[area3]".""."$_POST[addess]"."</P>
    <p>【邮箱】:<a href='http://www.baidu.com/s?wd="."$_POST[email]"."'>"."$_POST[email]"."</a></P>
    <P>【付款方式】:"."$_POST[pay]"."</P>

    </div>";
    if(empty($_POST['name'])||empty($_POST['mob'])||empty($_POST['email'])||empty($_POST['code'])||$_POST['code'] != $_SESSION['wfcode']){
        echo "<p style='font-size:12px;color:#BD0000;'>错误:信息填写不完整或验证码不正确!<a href='#' onClick='javascript:history.back(-1);'>返回重新填写 >></a></p>";
        exit(0);
    }if(!$mail->Send()){
        echo "<p style='font-size:12px;color:#BD0000;'>错误:".$mail->ErrorInfo."</p>";
    }
    elseif($paytypes=="Alipay"){
        $url="alipay_".$paytypes."/alipayto.php?product=".$products."&total_fee=".$total_fee."&body=".$names."&out_trade_no=".$out_trade_nos;
        Header("Location:$url"); 
        exit;
    }
    else{
    Header("Location :orderform/orderok.php?address=$addesss&area=$areas&province=$provinces&city=$citys&halfday=$halfdays&hour=$hours&day=$days&month=$months&year=$years&pay=$paytypes&name=$names&mob=$mobs&out_trade_no=$out_trade_nos&product=$products");
        exit;
    }?>
    这个是order.php的代码 
      

  10.   

    Header("Location:http://www.iptvbeijing.com/orderform/orderok.php?address=$addesss&area=$areas&province=$provinces&city=$citys&halfday=$halfdays&hour=$hours&day=$days&month=$months&year=$years&pay=$paytypes&name=$names&mob=$mobs&out_trade_no=$out_trade_nos&product=$products");
        exit;
    }
    依旧不行,郁闷了
      

  11.   

    问题是你不要总是纠结于 header 函数,因为他在代码段最后
    而直接访问 http://www.iptvbeijing.com/orderform/order.php,这肯定是没有数据提交的
    所以执行到
    echo "<p style='font-size:12px;color:#BD0000;'>错误:信息填写不完整或验证码不正确!<a href='#' onClick='javascript:history.back(-1);'>返回重新填写 >></a></p>";
        exit(0);
    就退出了,header 函数是肯定执行不到的
    但此时 invalid adress 已经显示过了(见 #9 截图1)所以 invalid adress 必然是在这之前产生的鉴于你的代码中并无 invalid adress 字样,所以 invalid adress 应在几个嵌入的文件之中
      

  12.   


    order.php引用的只有
    require_once("class.phpmailer.php");
    require_once("config.php");
    这两个 
    config作为配置查看了,肯定没有,刚查看了下phpmailer.php里面有一段
          'smtp_error' => 'SMTP server error: ',
          'empty_message' => 'Message body empty',
          'invalid_address' => 'Invalid address',
          'variable_set' => 'Cannot set or reset variable: '
    而涉及到  'invalid_address' 这个的,在phpmailer.php中有几处,根据版主在这个http://bbs.csdn.net/topics/390890071帖子的说法,貌似是这一段出问题了,但是该怎么改进呢?
    private function AddAnAddress($kind, $address, $name = '') {
        if (!preg_match('/^(to|cc|bcc|ReplyTo)$/', $kind)) {
          echo 'Invalid recipient array: ' . kind;
          return false;
        }
        $address = trim($address);
        $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
        if (!self::ValidateAddress($address)) {
          $this->SetError($this->Lang('invalid_address').': '. $address);
          if ($this->exceptions) {
            throw new phpmailerException($this->Lang('invalid_address').': '.$address);
          }
          echo $this->Lang('invalid_address').': '.$address;
          return false;
        }
        if ($kind != 'ReplyTo') {
          if (!isset($this->all_recipients[strtolower($address)])) {
            array_push($this->$kind, array($address, $name));
            $this->all_recipients[strtolower($address)] = true;
            return true;
          }
        } else {
          if (!array_key_exists(strtolower($address), $this->ReplyTo)) {
            $this->ReplyTo[strtolower($address)] = array($address, $name);
          return true;
        }
      }
      return false;
    }
      

  13.   

    Location:的冒号后放一空格,试了再说,别觉得不可思议