jQuery + PHP - richtige ID übergeben.

sonicks

Erfahrenes Mitglied
Hi

Ich lasse mir per PHP 7 Bilder nebeneinander ausgeben, die zu 7 Usern gehören. Jetzt möchte ich bei Klick auf das Bild per jQuery AJAX unterhalb der Bilder die Userdetails anzeigen lassen. Funktioniert auch alles, nur leider übergibt er mir immer nur die letzte ID des zuletzt angezeigten Users:

Ausgabe der Bilder:

PHP:
$sql_img = "SELECT * FROM user";
$result = mysql_query($sql_img);
                
while($data = mysql_fetch_array($result, MYSQL_ASSOC)){
                
         echo '<a class="profil_img"><img src="'.$data["img"].'" width="220" height="145" alt="Test" class="profil_img"/><input type="hidden" value="'.$data["id"].'" name="user_id" class="user_id" /></a>';
                
 }

Code:
$('.profil_img').click(function() {
				
// Loading GIF im Div Containter "Kommentar" anzeigen
$('#about_wrapper').append('<img src="images/icons/ajax-loader.gif" alt="Lädt gerade..." id="loading" />');
					
var user_id = $('.user_id').val();					
					
$.ajax({
						   
  type: 'GET',
  url: 'includes/about.inc.php',
  data: 'user_id=' + user_id,


Wie kann ich jetzt die richtige ID bei einem Klick auf das jeweilige Bild übergeben?

MfG
Stefan
 
Naja ganz einfach
1) du spezifizierst nicht mit "this" dass auch das geklickte element genommen wird. Statt dessen selektierst du alle und .val() liefert dir aus diesem set immer nur das erste.
2) die klasse .profil_img liegt auch auf dem bild selbst, sobald das klick-ereignis dort auftritt kann natürlich eh kein vernünftiger value ausgelesen werden.

Code:
$('a.profil_img').click(function(){
  var user_id = $(this).find('input').val();
});


ich würd's warscheinlich aber über den url-hash oder zumindest die id lösen statt ein input zu nehmen
PHP:
echo '<a href="#'.$data["id"].'" class="profil_img">'
     .'<img src="'.$data["img"].'" width="220" height="145" alt="" />'
    .'</a>';
Code:
$('a.profil_img').click(function(){
  var user_id = $(this).attr('href').replace(/^#/,'');
});
 
Zuletzt bearbeitet:
Super, es funktioniert!

Vielen Dank.


Eine kurze Frage hätte ich noch: Wenn ich jetzt auf das erste Bild klicke, wird es unten angezeigt. Wenn ich danach auf das zweite Bild klicke, wird das erste immer noch angezeigt und das zweite darunter.

Eigentlich müsste ich doch am Anfang vom ajax.success einfach ein

HTML:
$('#about_wrapper').remove();

einfügen, damit das nicht mehr passiert oder? Funktioniert leider nicht.


HTML:
$('a.profil_img').click(function(){
				
					// Loading GIF im Div Containter "Kommentar" anzeigen
					$('#about_wrapper').append('<img src="images/icons/ajax-loader.gif" alt="Lädt gerade..." id="loading" />');

  					var user_id = $(this).attr('href').replace(/^#/,'');
				
					$.ajax({
						   
						type: 'GET',
						url: 'includes/about.inc.php',
						data: 'user_id=' + user_id,
						
						success: function(response){
							$('#about_wrapper').append(response);
							$('#loading').fadeOut(500, function() {
								$(this).remove();								 
							});
						}
					
					});
 
pffja ... eigentlich schon irgendwie so:

Code:
$('#about_wrapper').find('.details').remove()
.end().append('<div class="details">'+response+'</div>');

oder so

Code:
$('#about_wrapper').replaceWith('<div id="about_wrapper">'+response+'</div>');

oder vergleichbares.

Kommt halt drauf an was du als response erhälst, schnapp die halt die doku und spiel ein bisschen rum ;o)
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück