script executen via ui-dialog button

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Anthony de meulemeester

anthony de meulemeester

16/05/2013 14:37:54
Quote Anchor link
beste mensen,

ik heb via PHP een WHILE loop die telkens in een DIV gegevens toont.

via een link klik ik op die div en opent die div in dialoog op het scherm met titel "bent u zeker deze post te verwidjeren?"

hoe kan ik nu via die ja button de gegevens vrwijderen? of een PHP query aanroepen?
elke div bevat ook een hidden field met het post id in zodat ik het ID kan gebruiken om de juiste post te verwijderen. ik zit enkel vast om via een dialog button een script aan te roepen.

iemand die me kan helpen ?
 
PHP hulp

PHP hulp

20/10/2021 03:34:59
 
Joakim Broden

Joakim Broden

16/05/2013 17:24:48
Quote Anchor link
Ajax
 
Anthony de meulemeester

anthony de meulemeester

16/05/2013 17:28:03
Quote Anchor link
ben ik aan het proberen zit al uren vast op
hidden field heet ID
form heet IDKE

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
<script>
$(document).ready(function() {
               
$('.timeline_shout_buttons').click(function() {
            $('#nodig').dialog({
                width: 625,
                height: 'auto',
                buttons: {
                            Ok: function() {
                                    $.ajax({
           type: "POST",
           url: "delete.php?id=document.getElementById(#id).value",
           data: $("idke").serialize(), // serializes the form's elements.
           success: function(data)
           {

               alert(data); // show response from the php script.
           }
         });

          return false; // avoid to execute the actual submit of the form.

                                            }
                        }
    });                  
           });
             });

</script>

?>


het wil maar niet lukken
Gewijzigd op 16/05/2013 17:29:08 door anthony de meulemeester
 
Erwin H

Erwin H

16/05/2013 17:38:03
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$("idke").serialize()

Zo selecteer je idke element. Dat bestaat niet, dus je zal neem ik aan een id op het form hebben:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$("#idke").serialize()


Toevoeging op 16/05/2013 17:40:39:

En dit zal ook niet werken, aangezien javascript niet aan variable expansion doet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
url: "delete.php?id=document.getElementById(#id).value"

Maak hiervan
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
url: "delete.php?id="+$(id).val()

Waarbij je nog wel even moet kijken waar variabele id vandaan komt. Dat komt nu een beetje uit de lucht vallen.
 
Anthony de meulemeester

anthony de meulemeester

16/05/2013 17:58:01
Quote Anchor link
wel Erwin alvast bedankt voor de info maar er doet zich denk ik een probleem voor

stap1 dit is mijn WHILE loop = OK
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
 echo "<div class='timeline_shout_wrap'>";
  echo "<div id='nodig' class='timeline_shout_innerwrap'>";
  echo "<div class='timeline_shout_profilepic'><a href='user_profile?username=".$row['username']."'><img id='fotoprev' src='profielfotos/".$thepic['profielfoto']."' width='60' height='60'/></a></div>";
  echo "<div class='timeline_shout_text'><span style='color: #000; font-weight: bold;'>" . $row['username'] . "</span> <span style='color: #09F'>@" . $row['vakgebied'] . "</span><span style='float:right; color: #666; font-size:12px'>" . $row['datum'] . "</span><br />" . $row['shouts'] . "<br /><span style='font-size:10px; color:#666'>Reshout</span><div class='timeline_shout_buttons'><form id='idke' method='post' name='idke'><input id='id' name='id' type='hidden' value=' ".$row['id']." '/></form>verwijder</div></div></div></div>";
  }

?>


ik krijg dan 40 resultaten op het scherm alemaal mooi in een divs

stap2 klik op de link verwijder die de dialog opener is en open een dialog met de results van die div bv, shout nr 36 met zijn foto en text = OK

stap3 klik op de dialog button ok om de post te verwijderen = niet OK

hoe weet de jquery terwijl #id 40 keer is ge echo'd welk id nummer hij nu moet nemen of is dat automatisch doordat ik de juiste div met text in dialog heb? snapje?
 
Erwin H

Erwin H

16/05/2013 18:11:20
Quote Anchor link
Dat weet jquery niet, dat zal jij moeten aangeven. Je zal vanuit de button die geklikt is moeten afleiden welk id het is dat bij dat element hoort. Je HTML is een beetje moeilijk te lezen zo, dus ik zal een abstract voorbeeld geven. Stel je hebt drie elementen met dezelde buttons en als er een button wordt geklikt dan wil je het juiste id hebben. Dat kan (bijvoorbeeld) op de volgende manier:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<div class="timeline_shout_wrap">
  <input type="submit" class="timeline_shout_buttons" data-id="1" value="SHOUT">
</div>
<div class="timeline_shout_wrap">
  <input type="submit" class="timeline_shout_buttons" data-id="2" value="SHOUT">
</div>
<div class="timeline_shout_wrap">
  <input type="submit" class="timeline_shout_buttons" data-id="3" value="SHOUT">
</div>

Merk op dat ik elke button een custom attribuut heb gegeven waarin het id staat.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
$(document).ready(function(){
  $('.timeline_shout_buttons').click(function(e){
    e.preventDefault();
    var id = $(this).attr('data-id');
  });
});

Je zal dus aan de hand van de geklikte button (welke je altijd in de event handler met this kan opvragen) het id moeten ophalen. Staat het id in een andere element dan zal je dus met behulp van jquery functies door de DOM moeten gaan zoeken naar dat element (via parent(), closest(), find(), etc).
 
Anthony de meulemeester

anthony de meulemeester

16/05/2013 19:35:41
Quote Anchor link
ok alles werkt MAAR 1 kleinigheedje doet zich voor

ik gebruik nu de clone functie om de div te clonen in de dialog

maar hoe krijg ik die erna weg enkel de clone niet de dialog div.

$(document).ready(function() {

$('.timeline_shout_buttons').click(function() {
$(this).closest('#wrappy').clone().appendTo('#nodig');
var id = $('#id').val();
$("#id").serialize();

$('#nodig').dialog({
width: 625,
height: 'auto',
buttons: {
Ok: function() {
$(this).dialog('close');
$.ajax({
type: "GET",
url: "delete.php?id="+$(id).val(),
data: $("#id").serialize(), // serializes the form's elements.
success: function(data)
{
alert(data); // show response from the php script.
}
});
return false; // avoid to execute the actual submit of the form.

}
}
});
});
});
 
Erwin H

Erwin H

16/05/2013 19:43:25
Quote Anchor link
Probeer een referentie naar de clone in een variabele op te slaan en dan vanuit die referentie te verwijderen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
var clone = $(this).closest('#wrappy').clone();
clone.appendTo('#nodig');

//dan later als je het niet meer nodig hebt
clone.remove();
 
Anthony de meulemeester

anthony de meulemeester

16/05/2013 19:55:58
Quote Anchor link
zalig Erwin, jij bent men dag aan het redden man :P.


Toevoeging op 16/05/2013 20:19:31:

shit ik kan mijn ID niet fetchen hij geeft altijd 28 aan

de laatste result in de rij

ik heb in code var id = $(this).find('#id').val(); geprobeerd met closest ook maar altijd 28

dit is het laatste dan is alles prima ok

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
echo "<div class='timeline_shout_wrap'>";
  echo "<div id='wrappy' class='timeline_shout_innerwrap'><input id='id' name='id' type='hidden' value=' ".$row['id']." '/>";
  echo "<div class='timeline_shout_profilepic'><a href='user_profile?username=".$row['username']."'><img id='fotoprev' src='profielfotos/".$thepic['profielfoto']."' width='60' height='60'/></a><form id='idke' method='post' name='idke'></form></div>";
  echo "<div class='timeline_shout_text'><span style='color: #000; font-weight: bold;'>" . $row['username'] . "</span> <span style='color: #09F'>@" . $row['vakgebied'] . "</span><span style='float:right; color: #666; font-size:12px'>" . $row['datum'] . "</span><br />" . $row['shouts'] . "<br /><span style='font-size:10px; color:#666'>Reshout</span><div class='timeline_shout_buttons'>Reshout</div></div></div></div>";
  }

  ?>


Toevoeging op 16/05/2013 21:06:47:

alert(id) geeft de correcte nummer

aleen ik krijg het niet verzonden met ajax


$(document).ready(function() {

$('.timeline_shout_buttons').click(function(e) {

e.preventDefault();
var id = $(this).attr('data-id');
var clone = $(this).closest('#wrappy').clone();
clone.appendTo('#nodig');
alert(id);



$('#nodig').dialog({
width: 625,
height: 'auto',
buttons: {
Ok: function() {
clone.remove();
$(this).dialog('close');

$.ajax({

type: "GET",
url: "delete.php?id="+$(id).val(),
// serializes the form's elements.
success: function(data)
{
alert(data); // show response from the php script.
}
});
return false; // avoid to execute the actual submit of the form.

}
}
});
});
});
 
Erwin H

Erwin H

17/05/2013 10:25:44
Quote Anchor link
Een id attribuut moet uniek zijn. Je kan dus niet voor elke shout box het (database)id van die box opslaan in een element met als HTML id attribuut 'id'. Dan raakt zelfs een computer in verwarring. Geef ze dus een class mee en selecteer daarop:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<input class='shout_id' type='hidden' value='...'/>

//en dan moet je even puzzelen hoe bij het element te komen
//dit zal denk ik niet werken, maar je html is te ondoorzichtig voor mij om het te bepalen
var id = $(this).closest('.shout_id').val();


Vervolgens moet je ook nog even het volgende veranderen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
//van:
url: "delete.php?id="+$(id).val(),

//naar:
url: "delete.php?id="+id,
Gewijzigd op 17/05/2013 10:26:19 door Erwin H
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.