2010-09-03 3 views
0

Cela devient vraiment déroutant maintenant ... Mise à jour d'une base de données mysql sans quitter la page .... J'ai 3 bits de code. Le javascript dans les balises de tête, le bouton d'action dans le corps et le code à exécuter sur une autre page. Voici les trois sections:Javascript lien, ajax, jquery, curseur est un éditeur de texte pas une main/doigt et même si le code a fonctionné, il renvoie toujours le résultat de l'erreur

<script type="text/javascript" src="jquery-1.4.2.js"></script> 
<script type="text/javascript"> 

function addItemToUsersList(itemId) 
{ 
    $.ajax({ 
     'url': 'member-bucketadd-exec.php', 
     'type': 'GET', 
     'dataType': 'json', 
     'data': {itemid: itemId}, 
     'success': function(data) 
     { 
      if(data.status) 
      { 
       if(data.added) 
       { 
         $("span#success"+itemId).attr("innerHTML","Item added to your personal list"); 
         alert("Item added to your list!"); 

       } 
       else 
       { 
         $("span#success"+itemId).attr("innerHTML","This item is already on your list"); 
         alert("This item is already on your list!"); 

       } 
      } 
     }, 
     beforeSend: function() 
     { 
       $("span#success"+itemId).attr("innerHTML","Adding item to your bucketlist..."); 

     } 
      ,'error': function(data) 
      { 
      // what happens if the request fails. 
      $("span#success"+itemId).attr("innerHTML","An error occureed"); 
      alert("On your list!"); 
     } 
}); 
        } 
    </script> 

Le bouton d'action ...

<a onclick="addItemToUsersList(<?php echo $itemid ; ?>)">Add<img src='images/plus-green.png' /> </a> 

Et le code qui est exécuté sur l'autre url ...

<?php 

ini_set('display_errors', 'On'); 
error_reporting(E_ALL); 


$bucketlist=MYSQL_QUERY("SELECT * FROM membersbuckets where userid = $userid AND bucketid = $bucketid") 
or die(mysql_error()); 

      $bucketlist=mysql_fetch_array($bucketlist) ; 

if($bucketlist < 1) 
{ 
    mysql_query("INSERT INTO membersbuckets (memberbucketid, userid, bucketid, complete) 
    VALUES ('', '$userid', '$bucketid', '0')"); 
     return json_encode(array("status" => true, "added" => true)); 
} 
else 
{ 
     return json_encode(array("status" => true, "added" => false)); 
} 


?> 

Il n'a pas d' si l'article est déjà sur la liste (comme il est censé vérifier seau < 1), ou pas sur la liste, je reçois toujours l'alerte ("Sur votre liste!"); , et aussi le lien/le bit du bouton d'activation, quand je le coche dessus je ne reçois pas la main/le doigt j'ai juste un curseur de texte !!

Je n'ai jamais utilisé jquery, ou ajax avant ce petit projet, donc je n'ai aucune idée de ce qu'il faut chercher pour voir ce qui est hors de propos. J'ai téléchargé firebug et testé avec ça mais je ne vois pas de problème/s. Quelqu'un peut-il aider?

Merci à tous et à tous! J'espère que vous pouvez aider.

+0

bonjour il Dan, depuis « Sur votre liste!"est en alerte, la condition d'erreur est la réunion.Il ne signifie pas réellement si l'élément est dans la liste de l'utilisateur ou non.Pour déboguer, mettre' echo 'ici "; print_r ($ bucketlist); exit;' après '$ bucketlist = mysql_fetch_array ($ bucketlist); 'et vérifiez la section Response sous la console firebug pour cette requête ajax –

+0

Merci pour votre réponse! (et tout le monde!) ... params = itemid \t 25. la section réponse est vide – Dan

+0

J'ai ajouté le span id succès après le lien a href comme Thau noté sur son code et vérifié la réponse à nouveau et c'est ce que j'ai obtenu .... iciArray ( [0] => 284 [memberbucketid] => 284 [ 1] => 1 [id_utilisateur] => 1 [2] => 25 [bucketid] => 25 [3] => 0 [compléter] => 0 ) – Dan

Répondre

1

vérification manuelle php pour mysql_fetch_array votre code dans

$bucketlist = mysql_fetch_array($bucketlist) 

sera FAUX avec aucune ligne.

+0

Je pense que ce n'est pas le problème. –

0

La main/doigts ne semble pas
parce qu'il est pas défini apparaître par défaut pour les points d'ancrage sans l'attribut href. Il suffit d'ajouter href="#" à votre ancre ou bien d'attribuer le style cursor: pointer à votre ancre et il pointera.

retour résultat d'erreur
Comme Thau a souligné, dans votre code de traitement des demandes de paiement ajax, dans la requête que vous utilisez deux variables $_GET['userid'] et $_GET['itemid'] mais vous passez seulement itemid dans la demande. Est-ce la raison de l'erreur? Avez-vous trouvé?

+0

href = "#" a parfaitement fonctionné! L'ID utilisateur est saisi à partir de la base de données en référençant le nom d'utilisateur de la session ...... – Dan

+0

$ user_data = "". $ _ SESSION ["nom d'utilisateur"]. ""; $ fetch_users_data = mysql_fetch_object (mysql_query ("SELECT * FROM' membres' O WH 'username' = '". $ User_data. "'")) ou die (mysql_error()); $ userid = "". $ Fetch_users_data-> ID utilisateur. ""; – Dan

+0

Ah, un href = "#" fait bondir la page vers le haut, c'est ce que j'essayais de faire pour commencer, lol. – Dan

0

a) Vérifiez votre demande de .ajax:

<script type="text/javascript" src="./jquery-1.4.2.min.js"></script> 
    <script type="text/javascript"> 

    function addItemToUsersList(itemId) { 
     $.ajax({ 
      'url': 'http://localhost/test/add_member.php', /*test6ed in my PC*/ 
      'type': 'GET', 'dataType': 'json', 
      'data': {itemid: itemid, userid: 1},   /*Added itemid, userid */ 

      /*Params in 'success function*/ 
      'success': function(data, textStatus, XMLHttpRequest){ 
      if(data.status) { 
       if(data.added) $("#success").attr("innerHTML","Item added"); 
       else $("#success").attr("innerHTML","Already on your list"); 
      } 
      }, 
      beforeSend: function(XMLHttpRequest){ 
       $("#success").attr("innerHTML","Adding item ..."); 
     }, 
     'error': function(XMLHttpRequest, textStatus, errorThrown) { 
       $("#success").attr("innerHTML","An error occureed"); 
       alert("On your list!"); 
      } 
    }); 
} 
    </script> 

    <a href="javascript:addItemToUsersList(1)">Add</a> 
    <span id="success"></span> 

2) Votre code PHP côté serveur doit recevoir même params dans votre demande de .ajax et retour faisant écho au lieu d'une peine de retour

$userid = $_GET['userid' ] ? $_GET['userid']: 0 ; 
$bucketid = $_GET['itemid'] ? $_GET['itemid']: 0 ; 

if(!$bucketid || !$userid) 
    echo json_encode(array("status" => false, "added" => false)); 

$sql = "SELECT * FROM membersbuckets where userid = $userid AND bucketid = $bucketid"; 
$bucketlist = mysql_query($sql) or die(mysql_error()); 

$bucketlist = mysql_fetch_array($bucketlist) ; //return FALSE in no rows 

if($bucketlist){ 
    $insert_sql = "INSERT INTO 
         membersbuckets 
           (memberbucketid, userid, bucketid, complete) 
          VALUES ('', '$userid', '$bucketid', '0')" ; 

    mysql_query($insert_sql); 

    //return with an echo 
    echo json_encode(array("status" => true, "added" => true)); 
}else { 
    echo json_encode(array("status" => true, "added" => false)); 
} 
+0

pouvez-vous envoyer à Dan vos fichiers testés. – vPJ

1

pour éviter la href="#" provoquant la page de sauter vers le haut, votre fonction onclick doit retourner false. Ceci indique au navigateur de ne pas continuer avec l'action href standard. Vous pouvez le faire de plusieurs façons, y compris l'ajout return false; à la fin de addItemToUsersList(), ou même directement dans le code onclick, comme ceci:

onclick="addItemToUsersList(<?php echo $itemid ; ?>); return false;" 
Questions connexes