Keresés
Hírlevél
 
Kiemelt témák
»10 éves a prog.hu
»Párhuzamos programozás
»Párhuzamos végrehajtás == szemléletváltás!
Állás/munka
»Tanárt keresek
»Port.hu film tartalmának kinyerése
»PHP programozó kerestetik
»Fejlesztői megbízásokat/munkát keresek
»Senior .Net fejlesztő szabad kapacitással
» több téma
Tudástár
? torrent file helyett txt-t
?PHP:keresés szó szerint...
*PHP if-nél megakadtam
Mobilinternet használata robotokban
?Delphi Form méretezési probléma
?HelpProvider alkalmazás .HLP fájlban
2 oldalas form
SetFocus hatástalan
?XP-n megy Win7-en megakad (Delphi)
?Hiányos mp3 hallgatás telefonról! C#
A legalsó scrollTop értéket nem veszi figyelembe
3 dív pozicionálása (2 egymás mellé, 1 ezek alá)
?Curl login Joomla-ba (PHP)
*Java Axis webservice file küldés és fogadás
?C# scrollozható form
» több téma
Társalgó
»Az általános műveltség része kellene, hogy legyen a programozni tudás?
»Get flood elleni védekezés
»Újra programozni fog a Facebook alapítója és multimilliárdos elnöke
»Firebird - Több adatbázis vagy egy?
»Clipper kontra XP
»Webshop ár kb...
»Hogy működik egy apróhirdető oldal (MySQL)?
»Körlevél script PHP + MySQL
»New project probléma VS 2010 C#
»Kezdőknek:grafikus felület választás
» több téma
ASPC#C++CSSDelphiFlashJavaJavaScriptPascalPerlPHPPythonuniPaaSVisual BasicVisual C++  »    

Tudástár

»

Mysql lekérdezésben ajax-ot meghívó gombok

»

Mysql lekérdezésben ajax-ot meghívó gombok

nyitotta: manii, idő: 2012.02.06., moderátor: moderator, megoldás elfogadva: 2012.02.06. 21:25
  Értesítés változás esetén Felvétel kedvencekhez Küldés emailben Nyomtatható verzió

Kategóriák:Programozási nyelvek » PHP
Programozási nyelvek » JavaScript

Kulcsszavak:
Sorrend:
Időzóna:
Blokkméret:
Oszd meg másokkal is!
Üdv mindenkinek!

Van ez a kis leegyszerűsített kódom, ami ugye meghívásra tovább küld a háttérben egy bizonyos értéket a php fájlnak. Ebben a kódban egy button "html tag"-nak az értékét küldi tovább, de úgy, hogy pont ugyanarra a gombra kell kattintani ami a küldendő értéket tartalmazza.
Na most itt jön a csavar, hogy ez a button egy mysql lekérdezésben ismétlődik annyiszor amennyi sor van egy táblában, de a buttonnak az értéke soronként a lekérdezés alapján változik és igy az a baj, hogy mindig csak a lekérdezés első sorának az értékét továbbítja. Tehát ha például a 10-dik lekérdezett sornál szeretném megnyomni, akkor állandóan csak az első sornak az értékét küldi..
Rájöttem, hogy az a gondja, hogy minden sorban a buttonnak azonos id-je van és csak ezért veszi figyelembe az első sort. Na de hogy lehetne átalakítani? Köszönöm előre is nagylelkű segítségeteket!

ajax post:
<script type="text/javascript">


$(function() {

$(".button").click(function() {

        var gomb = $("#button").val();
       
       
    var dataString = 'buttonvalue='+ gomb;
       
       
$.ajax({
                type: "POST",
  url: "valami.php",
   data: dataString,
  cache: false,
  success: function(html){
 
document.getElementById('kesz').innerHTML="Kész!";

       
       
  }
 });

return false;
        });



</script>
mysql lekérdezésre példa:
SELECT valami stb...
while($row = mysql_fetch_array( $result )) {
echo "<button name='button' id='button' value='".$row[email]."'>Katt</button>";

}
Hello!

echo "<button name='button' id='button' value='".$row[email]."'>Katt</button>";

hiba: ha ezt ciklusba ágyazod, akkor ugye lesz n számú gombod. Mindegyiknek ugyanaz lesz a NAME és az ID értéke. Az ID egyedi, egy doksin belül egy elemnek lehet csak ugyanaz az ID-je. A NAME szintén egyedi kell, hogy legyen. Így ne csodálkozz, hogy nem jön össze.

<?php
  print "<pre>";
  print_r($_POST);
  print "</pre>";


  echo "<form name='teszt' method='post' action=''>";
  for($i=0;$i<20;$i++){
   echo "<button name='button[]' id='button[]' value='adat_".$i."'>katt_".$i."</button>";
  }
  echo "</form>";
?>

A WHILE részt most én for ciklussal helyettesítettem... valami ilyesmi kell neked. Külön fájlban tesztelgesd, és elemezd az eredményt...

/tökfilkó/ előzmény
ne adj meg neki id-t, vagy fűzz sorszámot a button után, pl. button_$i.

Hivatkozni meg így is tudsz rá, this-el:

$(".button").click(function() {
 var gomb = $(this).val();
 var dataString = 'buttonvalue='+ gomb;               
 $.ajax({
  type: "POST",
  url: "valami.php",
  data: dataString,
  cache: false,
  success: function(html){
        // document.getElementById('kesz').innerHTML="Kész!";               
        // Ha van jQuery, akkor miért nem ez?
        $("#kesz").html("Kész!");
 
 });
 return false;
});
előzmény
Ugyanex jquery-vel és ajax-al


<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
<?php
  for($i=0;$i<20;$i++){
   echo "<button name='button[]' id='button[]' value='adat_".$i."'>katt_".$i."</button>";
  }
?>
<script type="text/javascript">
$(function(){
        $('button[id|="button"]').click(function(event){
                alert(this.value);
                //$.ajax({ ... });
        });
});
</script>

A saját ötletemből kiindulva... előzmény
Köszönöm a segítségeteket, tökfilkó kapja a pontot. Az ő ötlete alapján sikerült megcsinálnom. De ha nem gond, lenne még egy kérdésem: Ha én például abba a for ciklusba a button mellé szeretnék még egy div tag-ot rakni és csak abban a divben jelenjen meg a success részben meghatározott szöveg, ahol megnyomtam a gombot, akkor azt igy csináljam?


<?php
  for($i=0;$i<20;$i++){
   echo "<button name='button[]' id='button[]' value='adat_".$i."'>katt_".$i."</button><div id='divtag[]'></div>'";
  }
?>
<script type="text/javascript">
$(function(){
        $('button[id|="button"]').click(function(event){
                alert(this.value);
                $.ajax({ ... });
                .......
                ......
                success: function(html){ $('div[id|="divtag"]').html("Kész");
}
        });
});
</script>

Na de ennél azt vettem észre hogy minden sorban kiirja a divben a Kész szót. Mit kellene módosítanom rajta? előzmény
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
<?php
  for($i=0;$i<20;$i++){
   echo "<button name='button[]' id='button[]' value='adat_".$i."'>katt_".$i."</button><div></div>";
  }
?>
<script type="text/javascript">
$(function(){
        $('button[id^="button"]').click(function(event){
                $(this).next('div').html('ide jöhet a response eredménye')
                //$.ajax({ ... });
        });
});
</script>

A lényeg itt van:

$(this).next('div').html('kész');

Ugyanis ott belül már midnent az aktuális elemhez kell viszonyítani. Ha másra nem fogod használni azokat a diveket, akkor el is hagyhatod az id-t.

Ez ugyanis a következőt teszi. Az adott buttonhoz képes a első div elembe ír... Persze, ha másra is kell a div, vagy máshonnan is el kell érni, akkor adhatsz neki id-t.

Persze én most nem tettem bele az ajax-os kérésen belülre, de onnan is működik. :)

és egy apró bakit javítanék:
ezt
$('button[id|="button"]').click(function(event){...

cseréld erre
$('button[id^="button"]').click(function(event){...

Ugyanis a fenti minden gombra meghívódik ami a html forrásban van, míg a második csak azokra, amelyek id-i 'button'-al kezdődnek.

Ez egész addig nem gond, amíg más gombok nincsenek az oldalban, de így a tisztább.
/tökfilkó/ előzmény
És ezt sehogysem lehet id-vel megoldani? előzmény
ja semmi előzmény
Nekem ez a div-es rész nem akar működni, szerintem az a gond hogy a lekérdezésben szerepel még azon kivül két id nélküli div. Vagy azoknak nem kellene bezavarniuk? előzmény
Az nem gond...
A button és a div legyen egymás mellett

<button...></button><div></div> legyen egymás mellett, más HTML elem ne legyen közöttük...

Vagy ha ID-st akarsz, akkor az is megoldható, de akkor gondoskodni kell az egyedi id-kről, valós id-kről nem valami[]-félékről

és akkor azzal megoldható:


<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
<?php
  for($i=0;$i<10;$i++){
    echo "<button name='button_".$i."' id='button_".$i."' value='adat_".$i."'>katt_".$i."</button>";
    echo "<div id='divs_".$i."'></div>";
  }
?>
<script type="text/javascript">
$(function(){
  $('button[id^="button"]').click(function(event){
    var id_num = this.id.split('_')[1];
    $('#divs_' + id_num).html(this.value)
    //$.ajax({ ... });
  });
});
</script>

Ez egy id-s változat.
Ha nem for ciklusban lesz, hanem while ciklusban akkor a while ciklus elé tegyél be egy $i=0 és a ciklus végére egy $i++ és akkor lesz $i változód az egyedi id-khez...

$i=0;
while{
...
...
...
$i++;
}
előzmény
$(".buttons button").click(function() {
 var i = $(this).attr("id").toString().split("_")[1];
 var gomb = $(this).val();
 var dataString = 'buttonvalue='+ gomb;
 $.ajax({
  type: "POST",
  url: "valami.php",
  data: dataString,
  cache: false,
  success: function(html){
        $("#div_"+i).html("Kész!");
 });
 return false;
});

</script>
<div class='buttons'>
$i = 0;
while($row = mysql_fetch_array( $result ))
{
    $i++;
    echo "<button name='button' id='button_$i' value='{$row['email']}'>Katt</button><div id='div_$i'></div>";
}
</div>

Persze $i helyett használhatsz id-t is, ha van a resultban id-d esetleg.

Szerk:

Nem olvastam végig, hogy tökfilkó már írta ezt a megoldást. előzmény
Igen már írta, és igy tökfilkóé lesz a pont.

var id_num = this.id.split('_')[1];

az id_num-ra undefined-et ad, amikor más minden jól van megcsinálva előzmény
az id-k formátuma ilyen legyen:

id="valami_".$i

Ugyanis az a split("_") azt csinálja, hogy a "_" jelnél kettéválasztja az id-t, és az eredmény[0] a _ jel előtti része az eredmény[1] a "_" jel utáni része.

Ezért ezen példa működéséhez elvárt, hogy az id "valami_1"... "valami_100" formátumú legyen. És egynél több _ jel ne legyen egy id-ben...

Szerintem ez lesz a hiba, de ha megmutatot a konkrét kódrészletet, ahogy átalakítottad, akkor talán meg tudom mondani. De nálam a bemásolt kód FF, IE8, IE9, CHROME alatt szuper... előzmény
Igen, azt tudom hogy mit csinál a Split.


De akkor a $('button[id^="button"]').click(function(event){ sorban nem kell változtatni valamit, ha átírom ott is a button idjét? előzmény
Attól függ mit és mire írsz át...
Másolsz kódot? Vagy titok? előzmény
Köszönöm a segítségedet, megtudtam oldani, csak én voltam bamba mert egy dolgot rosszul írtam. Szóval a kód tökéletesen működik, köszönöm mégegyszer! előzmény
Örülök, ha segíthettem... jó kis móka volt ez nekem is most. Elvoltam... előzmény
Hát elhiszem, és köszi mégegyszer előzmény
Oszd meg másokkal is!
Belépés
E-mail cím:
Jelszó:

cvonline.hu
»iOS fejlesztő
»Senior web programozó
»Java fejlesztő (Bécs)
»Java fejlesztő (front-end, backend)
»PHP fejlesztő (Ausztria, Németország)
»Solaris rendszermérnök
» még több állás
Kérdésed van?
Problémád, kérdésed van? Segítünk neked is. Csak kattints ide!
RSS források
-Hírek
-Cikkek
-Fórumok
-Állás/munka
Top pontgyűjtők
»Árnyék1.100
»silentworks910
»Robi80910
»szabofe860
»bubori.attila760
»djjjozsi680
»Galovics660
»Riha590
»Frostech0560
»Csaboka2550
A nap kifejezései
»Adatszegmens
»Konstans
»Makró
» ugrás a wikire
Hírek
»Az általános műveltség része kellene, hogy legyen a programozni tudás?
»Újra programozni fog a Facebook alapítója és multimilliárdos elnöke
»Vizuális felülettervezőt adott ki .NET-es Android-alkalmazásfejlesztéshez a Xamarin
» több hír
PC Fórum hírek
»Elvennék és felhasználóinak adnák a Facebook összes pénzét
»Rejtélyes ikont dugdosgat a Microsoft a Windows 8-ban
»Út a Windows 8-ig - a Windows rendszerek három évtizedének története, képekben
»Mától bárki regisztrálhat a so.cl-ra, a Microsoft közösségi oldalára
»Megérkeztek az első képek az Unreal Engine 4 játékmotorról
»Itt az első videó a a Firefox Windows 8-as változatáról
»Nyártól akár 150 megabites nethozzáférést is ad az Invitel
»Kilenc kritikus biztonsági hibát javít az új Google Chrome
Top wikieditorok
»Sting
»Doi
»FlamingClaw
»Argathron
»Csaboka2
»Muki987
»NevemTeve
»Ivn
»Kelemzol
»Joexy
» ugrás a wikire