Неопределенная переменная в PHP

0

Я работаю над отправкой XML-запроса на URL-адрес с использованием cURL в PHP.

Сначала я просто хотел удостовериться, что мой запрос отправляет правильные данные, поэтому вот фрагмент из моего кода. Я добавлю инструкции 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;

Когда я пытаюсь выполнить echo $xml_data, я получаю следующее сообщение об ошибке:

Примечание: переменная Undefined: xml_data в C:\wamp\www\Internal\paymentDue.php в строке 63

Это была моя логика, что я смогу вывести XML по мере вывода таблицы, однако я мог бы (вероятно, я) ошибаться. Любые рекомендации приветствуются.

Спасибо.

PS:

Я также понимаю, что, когда я отправляю это сообщение, если я использую цикл while в текущем контексте, переменные $xml_data будут перезаписаны каждый раз, когда он будет завершен. Любая помощь с этим будет отличной.

Теги:
curl

5 ответов

4
Лучший ответ

Вы зацикливаете свой набор результатов с самого начала, чтобы построить таблицу html, а затем попытаетесь снова пропустить ее для вашего xml, даже если вы уже прошли конец набора. Постройте оба в одном цикле.

Установите xml_data в '' перед циклом, затем используйте xml_data. =, чтобы создать его (или даже использовать SimpleXML или XMLWriter, а не создавать его как строку)

  • 0
    Привет Марк, спасибо за ваш ответ. Казалось, это сработало. У меня есть один быстрый вопрос по этому поводу. Я не вижу теги XML, не так ли? Я просто удивляюсь позже, когда я внедряю запрос curl в него. Будет ли это иметь значение? Спасибо :)
  • 0
    Теги XML не будут видны в веб-браузере ... используйте опцию браузера "просмотреть исходный код", чтобы увидеть их
Показать ещё 1 комментарий
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 как пустую строку за пределами цикла, и каждый раз, когда мы зацикливаем, я просто добавляю к строке, используя. =

1

ваш второй цикл петли через 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

0
$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;
0

Вы перемещаете заданную точку результата вперед, когда выполняете итерацию для начальной печати. Когда вы хотите вывести XML, указатель как конец набора результатов, вам нужно либо reset, либо создать 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>";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню