• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[JQUERY] .load nach div ausgehend von einer Form anhängen?

Crushed

New member
..load nach div ausgehend von einer Form anhängen?

Ich versuche grade mithilfe von append etwas an meinen "Container" für Einträge anzuhägen, was aber ausgehend von einer Form geschieht. Ohne funktioniert das ja auch glaube ich gar nicht, zumindest in meinem Fall? Es geht dabei konkret um ein Gästebuch und eine Löschen Funktion.

Das ist die HTML Datei, die meine Einträge dann bereitstellt. Ich habe jetzt allerdings jetzt mal die ganzen unnötigen Sachen entfernt. Das ist nur, damit ihr auch seht, wie die Struktur ist und von aus ich ausgehe.
HTML:
<div id="guestbook-entrys">
    <div id="guestbook-entrys-head">
    </div>
    <div class="guestbook-entry">
        <div class="guestbook-entry-head">
        </div>
        <div class="guestbook-entry-content">
            <form action="guestbook.php" class="modify" method="post">
                <input type="submit" value="Bearbeiten" name="edit">
                <input type="submit" value="Löschen" onclick="return confirm('Wollen Sie diesen Eintrag wirklich löschen?');" name="delete">
            </form>
        </div>
    </div>
</div>

Das wäre dann jetzt aber nur das Beispiel für einen Eintrag. Jeder weitere Eintrag fängt dann wieder mit guestbook-entry an und alle zusammen befinden sich on dem Container (guestbool-entrys).
Das ist ja auch hoffentlich klar, das denke ich zumindest.

Das hier ist dann jetzt ein Teil des ajax requests denn ich mache, um den Kommentar zu löschen.

Das funktioniert auch aber jetzt soll nach der Löschung des Kommentars ein Eintrag der nächsten Seite (falls vorhanden), nachgeladen werden. Dieser soll dann nach dem (bisher) letzten Eintrag eingefügt werden.

Ich befinde mich dabei grade auch immer noch in dem sjax request. In dem .done part des Ajax Requests um genau zu sein.

Code:
$this = $(this); // this ist ja die Form, oben gennant "modify"

$this.load('guestbook.php&delete', function(){
    $('#guestbook-entrys').append($(this)).fadeIn("slow");
});

Jetzt ist aber das Problem, das der neue Gästebucheintrag oder eher gesagt der Eintrag der nächsten Seite in dem Eintrag eingefügt wird, der entfernt wird. Ich sehe dann auch kurz, wie dieser erscheint aber es verschwindet dann direkt wieder. Leider scheint der Eintrag also nicht in dem Bereich der guestbook-entrys eingefügt zu werden aber warum? Was mache ich falsch?

So wird der alte dann entfernt und der zielt ja nur auf den aus, wo auch die Form ist, also kann da ja irgendwas mit dem .load Teil nicht stimmen.
Code:
$this.closest('.guestbook-entry').remove();

Ich will den Eintrag ja unter dem letzten guestbook-entry anzeigen und mit append wird doch immer hinter dem letzten child eingefügt oder?
 
Zuletzt bearbeitet:
Du hast da mehrere Probleme:

1. this ist in dem Callback von .load() nicht das neue HTML, sondern die DOM-Node, in die etwas eingefügt wird. Also dein <form>.
2. Du willst ja nichts in das <form> einfügen, sondern in den Kontainer.
3. .load() ist die komplett flasche Funktion, da hierbei der alte Inhalt entfernt wird. Du willst eigentlich ein $.get() mit einem .append().
 
Hidden field Wert wird nicht übergeben | $_GET funktioniert auch nicht

Danke für den Ratschlag und für die Hilfe aber das hatte ich auch kurz vor deiner Antwort herausgefunden. Ich war aber wohl nicht schnell genug. :p

Ich habe dasselbe auch so ungefähr bei einem Kommentar. Wenn ein Kommentar gelöscht wird, dann soll ja einer der nächsten Seite nachgeladen werden, damit auch immer dieselbe Anzahl an Einträgen pro Seite angezeigt wird aber derzeit läuft das nicht. Das mache ich ja dann auch noch im ajax request und so sieht das aus:

Code:
var entry = $('input[name="entryTest"]').val(); 

$.ajax(
{ 
    method: "POST",
    url: "comment.php&entry=" + entry + "&delete",
    cache: false,
    data: $(this).serializeArray()            
}).done(function(data)
{           
    $this.closest('.comment').fadeOut(500, function(){ 
        $this.closest('.comment').remove(); 
    });
    
    $.get("comment.php&delete", function(data){
        $("#sites").before(data).fadeIn("slow");
    });
}).fail(function()
{
    alert("fail");
});

$this ist dabei die aktuelle Form, also unten erst einmal test genabnt aber das funktioniert ja auch, von daher ist das ja eigentlich eher unwichtig. Das ganze befindet sich wieder in der jQuery Submit Funktion.
Daher das ja wirklich fast identisch ist, schreibe ich das mal hier mit rein.

Das ist die Struktur eines Kommentars.
Code:
<div class="comment">
    <div class="comment-head">
    </div>
    <div class="comment-content">
        <form action="index.php?site=comments" class="test" method="post">
            <input type="submit" value="Bearbeiten" name="edit">
            <input type="submit" value="Löschen" onclick="return confirm('Wollen Sie diesen Eintrag wirklich löschen?');" name="delete">

            <input type="hidden" value="{$entry.commentID}" name="commentID"> // ist auch gesetzt, nur so zur info
            <input type="hidden" value="{$id}" name="entryTest">
        </form>
    </div>
</div>

Für jeden weiteren Kommentar wird dann wieder ein entry erzeugt. Dabei ist dann ja die Form, damit der Admin diesen dann löschen kann.

So sieht die comment.php Datei aus, wo dann der neue Kommentar auch geladen werden soll und wo der alte gelöscht wird. Das mit dem {$ ... } entspricht einem php echo und alle Werte sind auch gesetzt, das habe ich auch schon überprüft. Ich arbeite mit smarty, falls das jemand kennt.
PHP:
$entry = (int)$_GET["entry"] 
//$entry = $_POST["entryTest"]; ist auch nicht bekannt
   
$postId = $entry;
$smarty->assign('id', $postId); 

if(isset($_POST["delete"]) or isset($_GET['delete']))
{         
    echo $entry;
    echo $postId;
    echo $_GET["entry"];
    echo $_POST["entryTest"];       
    
    $query = $dbz->prepare("DELETE FROM comment WHERE commentID = :id");
    $query->bindParam(':id', $_POST['commentID']);
    
    try
    {
        $query->execute();
        
        $query_getNewComment = $dbz->prepare("SELECT Name, Meinung, Zeit, Aktiv FROM comment WHERE commentID > :lastComNumber AND entryID = :id LIMIT 1");
        $query_getNewComment->bindParam(':lastComNumber', $lastComNumber); // lastComNumber ist auch gesetzt nur so zur Info.
        $query_getNewComment->bindParam(':id', $entry);
            
        $query_getNewComment->execute();
        $newComment = $query_getNewComment->fetch();
    
        $smarty->display('templates/comment-entry.tpl');  
    }
    catch(PDOException $e)
    {
        echo '<p>Fehler!<p/>' . $e;
    }
}

Ja, erst einmal hole ich ja den Eintrag über $_GET oder $_POST aber leider funktioniert das beides nicht. Ich habe beide Sachen schon probiert.

Zudem kriege ich für alle Variablen keinen Wert. Es heißt denn undefined index oder variable aber die commentID ist ja seltsamerweise bekannt. Die templates Datei ist die html datei, die ich oben geschrieben habe, also das mit comment und der Form usw.

Wieso ist aber jetzt die id nicht mitgegeben worden? Bei einem serializeArray werden doch auch alle Werte in das Post array gegegeben oder nicht? Ich habe es ja aber auch noch über Get probiert aber das funktioniert nicht. Ich komme grade leider einfach nicht weiter. Es wird dann nur ein leerer Kommentar ausgegeben, weil die ID ja nicht bekannt ist.

Wieso wird also der Wert nicht mit übergeben? Die Werte sind ja alle gesetzt, also müsste das dann ja an dem ajax teil liegen oder? Ich komme grade echt seit ein paar Stunden nicht weiter. Ich habe mir ja auch alle Werte in der HTML Datei ausgeben lassen und diese sind auch alle gesetzt aber wieso wird der entryTest (die ID des zugehörigen news oder des eintrages) nicht mit übergeben?
 
Zuletzt bearbeitet:
Zurück
Oben