【问题标题】:Undefined Variable in PHPPHP中的未定义变量
【发布时间】:2010-10-11 15:09:36
【问题描述】:

我正在努力使用 PHP 中的 cURL 向 URL 发送 XML 请求。

首先,我只是想确保我的请求正在发送正确的数据,所以这里是我的代码中的一个 sn-p。一旦我知道我正在发送正确的数据,我将在稍后添加 curl 语句。

到目前为止,这是我的代码:

$format = 'Y-m-j G:i:s'; 

$date = date ( $format );
$d = date ( $format, strtotime ( '-90 days' ) );

$sql = mysql_query("SELECT * FROM recurringPayments WHERE lastpmt <= '$d'");

$num_rows = mysql_num_rows($sql); 
echo $num_rows . " results found";

echo "<table style=\"border:1px solid green;\">
            <tr bgcolor=\"#bdd73b\">
            <th>ID</th>
            <th>Company Name</th>
            <th>Annual Subscription</th>
            <th>Package</th>
            <th>Cost</th>
            <th>Payer Ref</th>
            <th>Payment Ref</th>
            <th>Last Payment Date</th>
            </tr>";

            while ($row = mysql_fetch_array($sql))
            {
                echo "<tr>";
                echo "<td>" . $row['ID'] . "</td>";
                echo "<td>" . $row['compName'] . "</td>";
                echo "<td>" . $row['annualSub'] . "</td>";
                echo "<td>" . $row['package'] . "</td>";
                echo "<td>" . $row['cost'] . "</td>";               
                echo "<td>" . $row['payerref'] . "</td>";
                echo "<td>" . $row['pmtref'] . "</td>";
                echo "<td>" . $row['lastpmt'] . "</td>";
            }
            echo "</table>";        
while ($row = mysql_fetch_array($sql))
{
$xml_data ='<request type="receipt-in" timestamp="20030520151742">'.
       '<merchantid>test</merchantid>'.
           '<account>internet</account>'.
       '<orderid>transaction01</orderid>'.
       '<amount currency="EUR">'.$row['cost'].'</amount>'.
           '<payerref>'.$row['payerref'].'</payerref>'.
           '<paymentmethod>'.$row['pmtref'].'</paymentmethod>'.
           '<autosettle flag="1" />'.
           '<md5hash />'.
       '<sha1hash>c81377ac77b6c0a8ca4152e00cc173d01c3d98eb</sha1hash'.  
       '</request>';
}

 echo $xml_data;

当我尝试回显 $xml_data 时,我收到以下错误消息:

注意:未定义变量:xml_data 在 C:\wamp\www\Internal\paymentDue.php 在第 63 行

我的逻辑是我可以在输出表格时输出 XML,但是我可能(可能)错了。任何指导表示赞赏。

谢谢。

PS:

我也刚刚意识到,当我发布这个时,如果我在当前上下文中使用 while 循环,每次循环时 $xml_data 都会被覆盖。对此的任何帮助也会很棒。

【问题讨论】:

    标签: php mysql xml curl


    【解决方案1】:

    您正在从头到尾循环您的结果集以构建 html 表,然后尝试为您的 xml 再次循环它,即使您已经通过了集合的末尾。在同一个循环中构建两者。

    在循环之前将 xml_data 设置为 '',然后使用 xml_data .= 来构建它(或者甚至使用 SimpleXML 或 XMLWriter 而不是将其构建为字符串)

    【讨论】:

    • 嗨,马克,感谢您的回复。这似乎奏效了。我有一个简短的问题。我看不到 XML 标签,是吗?我只是想知道稍后我何时在其中实施 curl 请求。这有关系吗?谢谢:)
    • XML 标签在网络浏览器中不可见...使用浏览器的“查看源代码”选项来查看它们
    【解决方案2】:

    试试这个:

       <?php
    
        $format = 'Y-m-j G:i:s'; 
    
        $date = date ( $format );
        $d = date ( $format, strtotime ( '-90 days' ) );
    
        $sql = mysql_query("SELECT * FROM recurringPayments WHERE lastpmt <= '$d'");
    
        $num_rows = mysql_num_rows($sql); 
        echo $num_rows . " results found";
    
        $xml_data = "";
    
        echo "<table style=\"border:1px solid green;\">
                    <tr bgcolor=\"#bdd73b\">
                    <th>ID</th>
                    <th>Company Name</th>
                    <th>Annual Subscription</th>
                    <th>Package</th>
                    <th>Cost</th>
                    <th>Payer Ref</th>
                    <th>Payment Ref</th>
                    <th>Last Payment Date</th>
                    </tr>";
    
                    while ($row = mysql_fetch_array($sql))
                    {
                        echo "<tr>";
                        echo "<td>" . $row['ID'] . "</td>";
                        echo "<td>" . $row['compName'] . "</td>";
                        echo "<td>" . $row['annualSub'] . "</td>";
                        echo "<td>" . $row['package'] . "</td>";
                        echo "<td>" . $row['cost'] . "</td>";               
                        echo "<td>" . $row['payerref'] . "</td>";
                        echo "<td>" . $row['pmtref'] . "</td>";
                        echo "<td>" . $row['lastpmt'] . "</td>";
    
                        $xml_data .='<request type="receipt-in" timestamp="20030520151742">'.
                               '<merchantid>test</merchantid>'.
                                   '<account>internet</account>'.
                               '<orderid>transaction01</orderid>'.
                               '<amount currency="EUR">'.$row['cost'].'</amount>'.
                                   '<payerref>'.$row['payerref'].'</payerref>'.
                                   '<paymentmethod>'.$row['pmtref'].'</paymentmethod>'.
                                   '<autosettle flag="1" />'.
                                   '<md5hash />'.
                               '<sha1hash>c81377ac77b6c0a8ca4152e00cc173d01c3d98eb</sha1hash'.  
                               '</request>';
    
    
                    }
                    echo "</table>";        
    
    
         echo $xml_data;
    

    循环两次没有意义,循环导致光标移动到末尾。这应该在初始循环期间建立您的 xml_data 变量。 另请注意,我已将 $xml_data 声明为循环外的空字符串,每次循环时我只是使用 .=

    附加到字符串

    【讨论】:

      【解决方案3】:

      您的第二个循环遍历已经循环的 mysql_query,因此循环指针位于末尾,这意味着该代码永远不会运行。由于它尚未运行 $xml_data 未设置,当您尝试在最后回显它时,您会收到通知。

      while ($row = mysql_fetch_array($sql))
      {
      $xml_data ='<request type="receipt-in" timestamp="20030520151742">'.
             '<merchantid>test</merchantid>'.
                 '<account>internet</account>'.
             '<orderid>transaction01</orderid>'.
             '<amount currency="EUR">'.$row['cost'].'</amount>'.
                 '<payerref>'.$row['payerref'].'</payerref>'.
                 '<paymentmethod>'.$row['pmtref'].'</paymentmethod>'.
                 '<autosettle flag="1" />'.
                 '<md5hash />'.
             '<sha1hash>c81377ac77b6c0a8ca4152e00cc173d01c3d98eb</sha1hash'.  
             '</request>';
      }
      

      尝试添加

      mysql_data_seek($sql, 0);
      

      在第二个 while 循环之前

      【讨论】:

        【解决方案4】:

        在迭代初始打印时,您将结果集点向前移动。当您想要输出 XML 时,指针作为结果集的结尾,因此您需要重置它或在打印时构建 XML。

        对于后者,试试这个:

        $xmlData = '';
        while ($row = mysql_fetch_array($sql))
        {
            echo "<tr>";
            echo "<td>" . $row['ID'] . "</td>";
            echo "<td>" . $row['compName'] . "</td>";
            echo "<td>" . $row['annualSub'] . "</td>";
            echo "<td>" . $row['package'] . "</td>";
            echo "<td>" . $row['cost'] . "</td>";               
            echo "<td>" . $row['payerref'] . "</td>";
            echo "<td>" . $row['pmtref'] . "</td>";
            echo "<td>" . $row['lastpmt'] . "</td>";
        
            $xmlData .= '<request type="receipt-in" timestamp="20030520151742">'.
           '<merchantid>test</merchantid>'.
               '<account>internet</account>'.
           '<orderid>transaction01</orderid>'.
           '<amount currency="EUR">'.$row['cost'].'</amount>'.
               '<payerref>'.$row['payerref'].'</payerref>'.
               '<paymentmethod>'.$row['pmtref'].'</paymentmethod>'.
               '<autosettle flag="1" />'.
               '<md5hash />'.
           '<sha1hash>c81377ac77b6c0a8ca4152e00cc173d01c3d98eb</sha1hash'.  
           '</request>';
        }
        
        echo "</table>";
        

        【讨论】:

          【解决方案5】:
          $format = 'Y-m-j G:i:s'; 
          
          $date = date ( $format );
          $d = date ( $format, strtotime ( '-90 days' ) );
          
          $sql = mysql_query("SELECT * FROM recurringPayments WHERE lastpmt <= '$d'");
          
          $num_rows = mysql_num_rows($sql); 
          echo $num_rows . " results found";
          
          $xml_data = ''; // init empty
          
          echo "<table style=\"border:1px solid green;\">
                      <tr bgcolor=\"#bdd73b\">
                      <th>ID</th>
                      <th>Company Name</th>
                      <th>Annual Subscription</th>
                      <th>Package</th>
                      <th>Cost</th>
                      <th>Payer Ref</th>
                      <th>Payment Ref</th>
                      <th>Last Payment Date</th>
                      </tr>";
          
          while ($row = mysql_fetch_array($sql))
          {
             echo "<tr>";
             echo "<td>" . $row['ID'] . "</td>";
             echo "<td>" . $row['compName'] . "</td>";
             echo "<td>" . $row['annualSub'] . "</td>";
             echo "<td>" . $row['package'] . "</td>";
             echo "<td>" . $row['cost'] . "</td>";               
             echo "<td>" . $row['payerref'] . "</td>";
             echo "<td>" . $row['pmtref'] . "</td>";
             echo "<td>" . $row['lastpmt'] . "</td>";
          
             $xml_data .='<request type="receipt-in" timestamp="20030520151742">'.
                                 '<merchantid>test</merchantid>'.
                                     '<account>internet</account>'.
                                 '<orderid>transaction01</orderid>'.
                                 '<amount currency="EUR">'.$row['cost'].'</amount>'.
                                     '<payerref>'.$row['payerref'].'</payerref>'.
                                     '<paymentmethod>'.$row['pmtref'].'</paymentmethod>'.
                                     '<autosettle flag="1" />'.
                                     '<md5hash />'.
                                 '<sha1hash>c81377ac77b6c0a8ca4152e00cc173d01c3d98eb</sha1hash'.  
                                 '</request>';
          
          }
          echo "</table>";        
          
          echo $xml_data;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-05-24
            • 1970-01-01
            • 2016-04-07
            • 2015-11-17
            • 2012-03-04
            • 1970-01-01
            • 2017-11-18
            • 2020-10-22
            相关资源
            最近更新 更多