2010-11-22 11 views
0

Ma fonction php récupère les tweets de twitter & les renvoie sous forme de chaîne codée json. Un script JS attrape ces données & POST le à un script php en utilisant ajax. Le script php de réception décode json et l'insère dans la table. Mais il n'y a pas de données dans mysql. La console d'erreur n'affiche aucune erreur. Voici mon code:Quelle est l'erreur dans mon code pour envoyer JSON à mysql?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd"> 

<html> 
<?php 

    function searchResults($q) { 

     $host = "http://search.twitter.com/search.atom?q=" . urlencode($q) . "&rpp=100"; 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $host); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 

    //Raw xml 
     $result = curl_exec($ch); 
     curl_close($ch); 
     $xml = simplexml_load_string($result); 
     return json_encode($xml); 
; 
     }   //--------------- end of function 

?> 
<head> 
    <script src="http://code.jquery.com/jquery-latest.min.js"></script> 
</head> 
<body> 

<script> 
    $(document).ready(function() 
    { 
     var msg_top = new Array(); 
     msg_top = "<"+"?php echo searchResults('windows');"+"?"+">"; 
     var url = "msg2_mysql.php" 
    var request = null; 
     if (window.XMLHttpRequest) 
      {// code for IE7+, Firefox, Chrome, Opera, Safari 
       request=new XMLHttpRequest(); 
      } 
      else 
      {// code for IE6, IE5 
       request=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
    request.open("POST", url, true); 
    request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
    request.setRequestHeader("Connection", "close"); 
    request.onreadystatechange = function(){ 
      if (request.readyState == 4) { 
        if (request.status == 200) { 
         alert('POST'); 
        } else { 
          alert(request.status); // 
        } 
        } 
        } 
     request.send("msg_top=" + encodeURIComponent(msg_top).replace(/%20/g, '+')); 
    }); 
    </script> 
</body> 
</html> 

Voici script que je me sers pour insérer des données dans la table

<?php 
     $username = "******"; 
     $password = "********"; 
     $hostname = "localhost"; 
     $dbh = mysql_connect($hostname, $username, $password) or die("Unable to connect 
     to MySQL"); 
     $selected = mysql_select_db("spec",$dbh) or die("Could not select first_test"); 
     if($_POST['msg_top']!="") 
     { 
      $json = $_POST['msg_top']; 
      $msg = strtoupper(json_decode($json)); 
      $query = "INSERT INTO msg2 (id,msg,msg_id,depth) VALUES ('','$msg','ID','3')"; 
      mysql_query($query); 
      if(!mysql_query($query, $dbh)) 
      {die('error:' .mysql_error());} echo'success'; 
     } 
    else echo('no value!'); 
    ?> 
+2

msg_top [] = "<" + "php echo searchResults ('windows'); "+"? "+"> "; // Tout ce que vous faites avec cette ligne est TRES dangereux. TRÈS TRÈS dangereux ... Comme ... Prenez votre serveur et volez votre vie dangereuse. - Pour clearifier, si vous l'exécutez sur votre serveur plus tard, quelqu'un pourrait utiliser firebug pour exécuter n'importe quel code sur votre serveur. – DampeS8N

+0

Que se passe-t-il avec msg_top? Vous l'évaluez sur votre serveur en PHP après l'avoir reçu de JS? Mais pourquoi enverriez-vous le tag PHP? Envoyez simplement les paramètres et ajoutez-les à votre code sur le serveur. Je ne suis pas sûr de comprendre ce qui se passe là-bas. – JAL

+0

@Alex, désolé, je n'ai pas compris vos deux premières questions. Que voulez-vous dire en envoyant une balise php? Je veux transmettre les résultats de php à js. & js implémente ajax qui insère ces résultats dans mysql lors du chargement de la page. – XCeptable

Répondre

0

Ces lignes sont fausses:

var msg_top = new array(); // Here error 
msg_top[] = "<"+"?php echo searchResults('windows');"+"?"+">"; 

D'abord, il est "Array", non "tableau". Vraiment tout ce dont vous avez besoin est:

var msg_top = whatever; 

Le problème va être comment coder la matrice du domaine php dans une constante de tableau JavaScript. Je pense que l'utilisation d'un codeur JSON serait la chose la plus simple à faire.

modifier — Je vais répéter la mise en garde que je ne sais pas php, mais votre code peut- ressembler à ceci:

<?php 
    echo "var msg_top = ", json_encode(searchResults('windows')), ";" 
?> 
+1

Je vais le dire ici aussi: passer PHP au serveur à partir d'une variable JS est une porte ouverte pour que les attaquants puissent exécuter n'importe quel code sur votre serveur, par exemple effacer le disque dur ou écrire dessus le fichier de mots de passe pour leur donner un accès direct, à un script complet qui installe un kit pirate sur votre serveur en le transformant en proxy ou en l'ajoutant à un botnet – DampeS8N

+0

Eh bien, on ne sait pas d'où vient la valeur, on dirait étant tiré d'un * autre * serveur – Pointy

+0

@Pointy, j'ai édité et ajouté des détails à ma question. Les données à enregistrer sont en fait des tweets que la fonction php récupère sur Twitter. J'ai besoin d'insérer tous les tweets qui sont retournés lorsque la page est chargée dans la base de données. Pour cela, j'essaie d'utiliser ajax. – XCeptable