Comunidad de diseño web y desarrollo en internet online

selectores jquery

Citar            
MensajeEscrito el 25 Abr 2010 10:48 pm
Saludos gente!

Estoy diseñando una web con feeds RSS, funciona de la siguiente manera, cuando un usuario se logea, se cargan las noticias que previamente a seleccionado en el formulario de registro, es problema que tengo es el siguiente: He añadido a cada noticia un botón para guardarla en un base de datos MYSQL, cuando cargo las noticias lo hago con un archivo php utilizando un bucle por lo que cada titulo, link, descripción tienen el mismo id, con lo cual al clickar en el boton guardar, siempre me guarda la primera noticia, aunque haya señalado otra.

Os dejo el código por si le queréis echar un vistazo:

1.Este es el bucle php donde imprimo las noticias personalizadas para cada usuario, para guardarlas a al base de datos utilizo campos hidden.

Código PHP :

<?php
//$i = 0;
while($row = mysql_fetch_array($data)){
   $doc->load($row['link']);
   foreach ($doc->getElementsByTagName('item') as $node) {
         //$i++;
         echo '<form name="formnews" id="formnews">';
         echo '<h1>' . $node->getElementsByTagName('title')->item(0)->nodeValue . '</h1>';
         echo '<input type="hidden" class="hidd" id="h1title" name="h1title" value="' . $node->getElementsByTagName('title')->item(0)->nodeValue  . '" />';
         echo '<p class="a">' . $node->getElementsByTagName('description')->item(0)->nodeValue . '</p>';
         echo '<input type="hidden" class="hidd" id="pdescription" name="pdescription" value="' . $node->getElementsByTagName('description')->item(0)->nodeValue  . '" />';
         echo '<p class="b"><a href="' . $node->getElementsByTagName('link')->item(0)->nodeValue . '">' . $node->getElementsByTagName('link')->item(0)->nodeValue . '</a></p>';
         echo '<input type="hidden" class="hidd" id="plink" name="plink" value="' . $node->getElementsByTagName('link')->item(0)->nodeValue . '" />';
         print('<input type="submit" class="savenews" id="news" name="news" value="Save it"></button>');
         echo '</form>'; 
         echo '<ul>';
      foreach ($node->item as $item) {
         echo '<li><a href="' . $item->getElementsByTagName('link')->item(0)->nodeValue . '">';
         echo $item->getElementsByTagName('title')->item(0)->nodeValue . '</a><br />';
         echo $item->getElementsByTagName('description')->item(0)->nodeValue . '</li>';
      }
      echo '</ul>';
   }
}//end for array resEmp

?>


2.Y con este Jquery selecciono:

Código Javascript :

 $(document).ready(function() {
 $("form").submit(function() {
 $.ajax({
 async:       true,
            data:       "email="+$("#email").val()+"&h1title="+$("#h1title").val()+"&plink="+$("#plink").val()+"&pdescription="+$("p").val(),
            url:      "savenews.php",
            type:            "post",

 })
 });
 });


gracias de antemano.

Por nodachi86

0 de clabLevel



 

opera
Citar            
MensajeEscrito el 27 Abr 2010 02:30 pm
me parece que la soluciona tu problema podria ser esta

Código PHP :

<?php 
$i = 0;
 while($row = mysql_fetch_array($data)){
    $doc->load($row['link']);
    foreach ($doc->getElementsByTagName('item') as $node) {
          $i++;
          echo '<form name="formnews" id="formnews'.$i.'">';
          echo '<h1>' . $node->getElementsByTagName('title')->item(0)->nodeValue . '</h1>';
          echo '<input type="hidden" class="hidd" id="h1title'.$i.'" name="h1title" value="' . $node->getElementsByTagName('title')->item(0)->nodeValue  . '" />';
          echo '<p class="a">' . $node->getElementsByTagName('description')->item(0)->nodeValue . '</p>';
          echo '<input type="hidden" class="hidd" id="pdescription'.$i.'" name="pdescription" value="' . $node->getElementsByTagName('description')->item(0)->nodeValue  . '" />';
          echo '<p class="b"><a href="' . $node->getElementsByTagName('link')->item(0)->nodeValue . '">' . $node->getElementsByTagName('link')->item(0)->nodeValue . '</a></p>';
          echo '<input type="hidden" class="hidd" id="plink'.$i.'" name="plink" value="' . $node->getElementsByTagName('link')->item(0)->nodeValue . '" />';
          print('<input type="submit" class="savenews" id="news" notice="'.$i.'" name="news" value="Save it"></button>');
          echo '</form>';
          echo '<ul>';
       foreach ($node->item as $item) { 
          echo '<li><a href="' . $item->getElementsByTagName('link')->item(0)->nodeValue . '">';
          echo $item->getElementsByTagName('title')->item(0)->nodeValue . '</a><br />';
          echo $item->getElementsByTagName('description')->item(0)->nodeValue . '</li>';
       }
       echo '</ul>';
    } 
}
//end for array resEmp
?>


Ojo he reactivo la variable $i que habias comentado y la he añadido como la parte final de todos los ids presentes en tu codigo (por ahi se me puede haber escapado alguno asi que chequealo), adicional a eso he añadido una propiedad de nombre notice y le he asignado el valor de la variable, esto nos servira al momento de usar jQuery el cual podria quedar asi

Código Javascript :

$(document).ready(function() {
  $('.savenews').click(function(){
    $i = $(this).attr('notice'); // recuperamos el valor de la propiedad notice equivalente al indice de noticia
    $email = $("#email").val(); // presumo que recojes este valor antes pues no veo el TAG en el codigo que mandaste
    $title = $("#h1title"+$i).val(); // Ojo agregamos el valor de $i al final del nomrbe de la etiqueta para recuperar el valor deseado
    $link = $("#plink"+$i).val();
    $desc = $("#pdescription"+$i).val(); //aqui habias peusto $('p').val() supongo que te equivocaste al postear
    $nc = Math.random(); // una variable adicional para evitar la cache yasi evitar el envio de datos no actualizados
    $.post('savenews.php',{'email':$mail,'h1title':$title,'plink':$link,'pdescription':$desc},function($data){
      // Aqui puedes colocar instrucciones para tu callback, la variable $data contiene la respuesta que genero "savenews.php", ojo no utilices "return" para dentro de savenews.php para emitir la respuesta, pues no se mostrara aqui, en cambio si podras ver el resutlado de instruccion echo emitidas de acuerdo al resultado de las acciones.
    });
    //$.post() es el equivalente corto de la funcion $.ajax que estabas usando existe tb un equivalente para GET $.get() para mas detalle visita la pagina de documentacion de jQuery
  });
}); 


Con todo esto deberia de funcionar

COPY, PASTE PLAY AND ENJOY

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

msie8

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.