2013-04-02 4 views
0

Je veux que cette partie du code ci-dessous sélectionne 2 lignes de données d'une table mysql et POST les données à une URL.cURL POST, tandis que

$qry = "SELECT id,email,forename,surname,ipaddress,optin_date,optin_url FROM $db_tble ORDER BY id ASC LIMIT 2"; 
$result = mysql_query($qry); 
$num = mysql_num_rows($result); 

if($result) 
{ 
$OK = 1; 
/** start feed **/ 

//create array of data to be posted 

while ($row = mysql_fetch_assoc($result)) 
{ 
// unset($post_items,$curl_connection,$result,$var,$info); 
$n++; 

$qry_id = $row["id"]; 
$post_data['u'] = $testfeed_user; 

$post_data['p'] = $testfeed_pswd; 

// Action data 
$post_data['email'] = $row["email"]; 

$post_data['fname'] = $row["forename"]; 

$post_data['lname'] = $row["surname"]; 

$post_data['ip'] = $row["ipaddress"];    

$post_data['date'] = $row["optin_date"]; 

$post_data['url'] = $row["optin_url"]; 

//traverse array and prepare data for posting (key1=value1) 

foreach ($post_data as $key => $value) { 
             $post_items[] = $key . '=' . $value; 

    } 

//create the final string to be posted using implode() 

$post_string = implode ('&', $post_items); 



//create cURL connection 

$curl_connection = curl_init($post_url); 


    //set options 

// HTTP request method defaults to GET 
    curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30); 

    curl_setopt($curl_connection, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); 

    curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true); 

    curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); 

    curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1); 

    curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, 1); 


//set data to be posted 

curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string); 



     //perform our request 

    $result = curl_exec($curl_connection); 


    //close the connection 

curl_close($curl_connection); 
unset($post_string); 
    unset($post_data); 
unset($post_items); 
/** end feed **/ 
} 

Il échoue avec PHP Warning: mysql_fetch_assoc(): argument fourni est pas une ressource de résultat MySQL dans ... 'erreur.

Cela signifie généralement qu'il existe une erreur avec la requête, mais le code ci-dessous fonctionne avec cette requête. Donc, ça doit être quelque chose dans la boucle while qui le brise mais, je ne peux pas savoir quoi.

// echo "Select OK!"; 
$qry = "SELECT id,email,forename,surname,ipaddress,optin_date,optin_url FROM $db_tble ORDER BY id ASC LIMIT 2"; 
$result = mysql_query($qry); 
$num = mysql_num_rows($result); 

if (mysql_num_rows($result) != 0) 
{ 
    $OK = 1; 
    /** start feed **/ 

    //create array of data to be posted 

    // $post_data['u'] = $testfeed_user; 

    // $post_data['p'] = $testfeed_pswd; 

    while ($row = mysql_fetch_assoc($result)) 
    { 
     $qry_id = $row["id"]; 
     $post_data['u'] = $testfeed_user; 

     $post_data['p'] = $testfeed_pswd; 

       // Action data 
     $post_data['email'] = $row["email"]; 

     $post_data['fname'] = $row["forename"]; 

     $post_data['lname'] = $row["surname"]; 

     $post_data['ip'] = $row["ipaddress"];    

     $post_data['date'] = $row["optin_date"]; 
     $post_data['url'] = $row["optin_url 



      //traverse array and prepare data for posting (key1=value1) 

     foreach ($post_data as $key => $value) { 

      $post_items[] = $key . '=' . $value; 
        } 



     //create the final string to be posted using implode() 

     $post_string = implode ('&', $post_items); 



     echo "id=" . $qry_id . " - " . $post_string . "<br /<br />"; 
     unset($post_items); 
    } 
} 

Répondre

3

vous écrasez $result dans la boucle while

$result = curl_exec($curl_connection); 

Je ne sais pas pourquoi puisque vous ne semblez pas l'utiliser. Juste curl_exec est assez.

+0

Merci, c'était le problème. Stupidement, je réutilisais la variable $ result dans un autre but, pour corriger les problèmes potentiels avec l'URL, la réponse HTTP et le contenu HTML. c'est-à-dire obtenir un 'OK' du site. – David