2010-10-11 4 views
0

Je travaille à l'envoi d'une requête XML à une URL en utilisant cURL en PHP.Variable indéfinie en PHP

D'abord, je voulais juste m'assurer que ma requête envoyait les bonnes données donc voici un extrait de mon code. Je vais ajouter les déclarations curl plus tard une fois que je sais que j'envoie les bonnes données.

ici est mon code à ce jour:

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

Lorsque je tente de faire écho xml_data $, je reçois le message d'erreur suivant:

Avis: Undefined variable: xml_data dans C: \ wamp \ www \ Internal \ paymentDue.php en ligne 63

C'était ma logique que je serais en mesure de produire le XML comme I out mettre la table, mais je pourrais être (probablement) faux. Toute orientation est appréciée.

Merci.

PS:

Je viens aussi de réaliser tout ce que je poste, que si j'utilise la boucle while dans le contexte actuel, xml_data $ sera écrasé à chaque fois il boucle. Toute aide avec ce serait génial aussi.

Répondre

4

Vous parcourez votre ensemble de résultats du début jusqu'à la fin pour créer la table html, puis essayez de la parcourir à nouveau pour votre fichier XML, même si vous avez déjà dépassé la fin de l'ensemble. Construire les deux dans la même boucle.

Set xml_data à « » avant que la boucle, puis utilisez xml_data. = Pour le construire (ou même utiliser SimpleXML ou XMLWriter plutôt que de construire comme une chaîne)

+0

Salut Mark, merci pour votre réponse. Cela semblait faire l'affaire. J'ai une petite question à ce sujet. Je ne peux pas voir les balises XML, devrais-je? Je me demande juste plus tard quand j'implémente une requête curl dedans. Est-ce que cela compte? merci :) – 109221793

+0

Les balises XML ne seront pas visibles dans un navigateur web ... utilisez l'option "view source" du navigateur pour les voir –

+0

c'est génial Mark. Merci :) – 109221793

1

votre deuxième boucles boucle à travers un mysql_query qui était déjà bouclé donc le pointeur de boucle est à la fin ce qui signifie que ce code ne sera jamais exécuté. Comme il n'a pas été exécuté, $ xml_data n'est pas défini et lorsque vous essayez d'en faire écho à la fin, vous recevez un avis.

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>'; 
} 

Essayez d'ajouter

mysql_data_seek($sql, 0); 

avant votre deuxième boucle while

0

Vous vous déplacez le point de consigne de résultat avant lorsque nous parcourons pour l'impression initiale. Lorsque vous souhaitez générer le fichier XML, le pointeur correspondant à la fin du jeu de résultats doit être réinitialisé ou généré lors de l'impression.

Pour ce dernier, essayez ceci:

$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>"; 
2

Essayez ceci:

<?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; 

Il n'y a aucun point en boucle deux fois, et en boucle est à l'origine du curseur pour passer à la fin. Cela devrait construire votre variable xml_data pendant la boucle initiale. Notez également que j'ai déclaré $ xml_data comme une chaîne vide en dehors de la boucle, et chaque fois que nous faisons une boucle, je ne fais que l'ajouter à la chaîne en utilisant.=

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; 
Questions connexes