ilch Forum » Ilch Clan 1.1 » Allgemein » in DB schreiben ohne reload

Geschlossen
  1. #1
    User Pic
    MDS Mitglied
    Registriert seit
    08.07.2011
    Beiträge
    42
    Beitragswertungen
    0 Beitragspunkte
    Ist es möglich Daten in eine DB zu schreiben ohne die Seite neu zu laden?

    Also ich gebe jetzt immoment die ID per POST an eine php aber dafür muss ich immer die Seite neu laden bzw er öffnet die php Datei und leitet mich dann wieder zurück. Nun hätte ich gerne das er die php im Hintergrund lädt?

    Ist sowas möglich ?


    verwendete ilchClan Version: 1.1 P
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    she Mitglied
    Registriert seit
    13.11.2010
    Beiträge
    1.115
    Beitragswertungen
    82 Beitragspunkte
    api.jquery.com/jQuery.ajax/
    $('#sobaldichdruecke').ajax({
      url: "test.html",
      context: 'meineID'
    }).done(function() {
      $(this).addClass("done");
    });
    Google+ shelfinger.eu
    Das Wissen verfolgt mich - doch ich bin schneller!
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    MDS Mitglied
    Registriert seit
    08.07.2011
    Beiträge
    42
    Beitragswertungen
    0 Beitragspunkte
    Glaube ich habe das vollkommen falsch eingebaut^^

    <script type="text/javascript">   
    function test(){
    $('go').ajax({
      url: "/include/contents/add.php",
      context: '{id}'
    }).done(function() {
      $(this).addClass("done");
    });   
      } 
    </script>
     
     
            <form name="form2" method="post" onclick="test()";>
            <input name="id" type="hidden" id="id" value="{id}">
            <input type="submit" name="go" id="go" value="add"  style="width: 40px; height: 40px">
            </form>
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    she Mitglied
    Registriert seit
    13.11.2010
    Beiträge
    1.115
    Beitragswertungen
    82 Beitragspunkte
    <script type="text/javascript">   
    function test(){
    $('#go').ajax({
      url: "/include/contents/add.php",
      context: '{id}'
    }).done(function() {
      $(this).addClass("done");
    });   
      } 
    </script>
      
      
            <form name="form2" method="post" onclick="test()";>
            <input name="id" type="hidden" id="id" value="{id}">
            <input type="submit" name="go" id="go" value="add"  style="width: 40px; height: 40px">
            </form>
    Google+ shelfinger.eu
    Das Wissen verfolgt mich - doch ich bin schneller!
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Naja das Codebeispiel passt auch sicher nicht auf deinen Anwendungsfall.
    Du solltest vielleicht auch nochmal genauer schreiben, was genau passieren soll. Also du hast bisher einen POST über ein Formular abgesetzt. Das ist auch über ajax möglich, so wie she das angedeutet hat. Allerdings muss der Code für die Auswertung dafür angepasst werden, da für die Auswertung nicht Seite komplett geladen werden muss.

    Die aufgerufene Adresse sollte auch über index.php?xxx angesprochen werden, nicht direkt.

    Am besten du gibst mal deinen bisherigen Code preis, also der den POST auswertet und wie die Seite ausschaut, von der das Formular abgeschickt wird, und wie diese nach dem Abschicken verändert werden soll.

    Edit: Um mal auf das Codebeispiel zurückzukommen, das ist irgendwie nicht ganz richtig ajax ist eine statische Funktion des jQuery Objektes und muss eigentlich über $.ajax aufgerufen werden.


    Zuletzt modifiziert von Mairu am 09.05.2013 - 17:51:47
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    MDS Mitglied
    Registriert seit
    08.07.2011
    Beiträge
    42
    Beitragswertungen
    0 Beitragspunkte
    Die aufgerufene Adresse sollte auch über index.php?xxx
    Wäre gut wenn das geht.




    Die Html

    <html>
    <table border="0" cellpadding="0" cellspacing="1" style="width: 700px;">
    	<tbody>
    		<tr>
    			<td><strong>
    				Name</strong></td>
    			<td><strong><p style="text-align: center;">
    				Points</p></strong></td>
    			<td><strong><p style="text-align: center;">
    				Menge</p></strong></td>
    			<td><strong>
    				Kaufort</strong></td>
                    <td>&nbsp;
    				</td>
                    <td>&nbsp;
    				</td>
    		</tr>
            <tr>
    			<td>&nbsp;
    				</td>
    			<td>&nbsp;
    				</td>
    			<td>&nbsp;
    				</td>
    			<td>&nbsp;
    				</td>
                <td>&nbsp;
    				</td>
                <td>&nbsp;
    				</td>
    		</tr>
    {EXPLODE}
    		<tr >
    			<td >
    				{Name}</td>
    			<td {sport1}>
    				<p style="text-align: center;">
    	{Punkte}</p></td>
    			<td><p style="text-align: center;">
    				{Menge}</p></td>
    			<td>
    				{Kaufort}</td>
    		
            <td>
            <form name="form" method="post" action="index.php?EditorNewItems-edit">
            <input name="id" type="hidden" id="id" value="{id}">
            <br />
            <input type="submit" name="Submit" value="edit">
            </form>
            <form name="form1" method="post" action="index.php?del">
            <input name="id2" type="hidden" id="id2" value="{id}">
            <input type="submit" name="Submit" value="del ">
            </form>
            </td>
            <td>
            &nbsp;<br />
            <form name="form2" method="post" action="index.php?add">
            <input name="id" type="hidden" id="id" value="{id}">
            <input type="submit" name="Submit" value="add"  style="width: 40px; height: 40px">
            </form>
           	</td>
               </tr>
    {EXPLODE}
    	</tbody>
    </table>
    
    
    </html>


    Die angesprochene Php

    defined ('main') or die ( 'no direct access' );
    $tabelle = "ic_Produkte";
    $tabelle2 = "ic_Tagesliste";
    $title = $allgAr['title'].' ::Produkte Übersicht';
    $hmenu = 'Produkte Übersicht';
    $design = new design ( $title , $hmenu );
    $design->header();
    $res = db_query("SELECT * FROM $tabelle Where id='".$_POST['id']."'");
    while($row = db_fetch_assoc($res)){
    db_query("INSERT INTO "."$tabelle2"." (Name,Punkte,Menge,Kaufort,datum,userid) VALUES (  
                    '". $row['Name']		."',
    				'".  $row['Punkte']		."',
    				'". $row['Menge']	    ."',
    				'". $row['Kaufort']	    ."',
                    '".  date("j.n.Y")      ."',
                    '".  $_SESSION['authid']      ."'
                    ) ");
    wd('index.php?AllItems',$row['Name'].' wurde hinzugefügt, warte Bitte 0sec! ', 0);
    }
    $design->footer();



    Zuletzt modifiziert von MDS am 09.05.2013 - 18:03:45
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Mhh ok, du musst dir auch überlegen, dass wenn du eine ajax Request, die Seite ja nicht neu geladen wird, wenn du also eine Sachen einfügst oder löschst, dies dann ggf. auch über Javascript in der Seite dargestellt werden muss.

    Also in deinem Beispiel du hast eine Tabelle, und fügst dann etwas hinzu, kommt dann eine neue Tabellenzeile hinzu, was ändert sich durch die Aktion.
    Man kann natürlich auch die komplette Tabelle neu erstellen und zurücksenden und durch jQuery die alte ersetzen lassen.

    An deinem Code sehe ich auch index.php?add und index.php?del, das ist keine gute Sache, da man nicht sieht, was gelöscht wird und du somit nur ein Modul schreiben könntest, wo etwas hinzugefügt oder gelöscht wird, also solltest du wenigstens xxxadd und xxxdel verwenden, besser noch xxx-add und xxx-del, wobei du wie bei forum oder user ja trotzdem mehrere Dateien verwenden kannst.

    Da mit den Informationen, die ich hab kein komplettes Beispiel möglich ist, will ich dir trotzdem mal ein "kurzen" Beispiel geben.

    Du brauchst dann auf jeden Fall keine Formulare innerhalb der Tabellenzeilen.

    Statt
            <form name="form1" method="post" action="index.php?del">
            <input name="id2" type="hidden" id="id2" value="{id}">
            <input type="submit" name="Submit" value="del ">
            </form>


    Würde man nur einen Button oder Link, je nachdem, wie du es möchtest.
    Ich nehme mal ein Link, dem gibt man eine Klasse, damit die ganzen Links dann gefunden zusammen "angesprochen" werden können, die für das gleiche zustandig sind, in dem Fall das Löschen.

    <a href="index.php?del" data-id="{id}" class="deleteItem">Löschen</a>


    Damit haben wir die Informationen, welche Seite soll aufgerufen werden und den Parameter, in dem Fall die Id haben wir als HTML5 data Attribut an den Link gepackt, damit wir ohne großen Aufwand darauf zurückgreifen können.

    Nun muss man mit jQuery den Link eine Funktion zuweisen, die dann den AJAX Aufruf macht.

    Dazu unter Tabelle im Hauptdokument folgenden Code einfügen.

    //Container um Namensraum sauber zu halten
    (function($){
    	//Document Ready ( wird ausgeführt wenn Dokument vollständig im Browser verfügbar)
    	$(function() {
    		//Führe die Funktion bei einem Klick auf einen Link mit der Klasse aus
    		$('a.deleteItem').on('click', function() {
    			var self = $(this); //Referenz auf den Link
    			//Ajax Anfrage starten
    			$.ajax({
    				url: self.attr('href'), //Ziel vom Link auslesen
    				data: {'id': self.data('id')}, //Id aus dem data Attribut senden
    				type: 'POST', //POST Request
    				success: function(data) { //Funktion, die ausgeführt wird, wenn Anfrage erfolgreich ist
    					//In data ist die komplette Antwort der Angefragten Seite
    					if (data == 'success') {
    						//Tabellenzeile in der sich der Link befindet löschen
    						self.parents('tr').remove();
    					} else {
    						alert('Fehler aufgetreten');
    					}
    				}
    			});
    		});
    		
    	});
    })(jQuery);


    In der aufgerufenen PHP Datei muss dann keine weitere Ausgabe erfolgen als für das Beispiel success, wenn es funktioniert hat. Also kein Design oder ähnliches.

    defined ('main') or die ( 'no direct access' );
    
    $id = escape($_POST['id'], 'integer');
    if ($id > 0) {
        // Alles machen, was nötig ist um zu löschen, wenn es erfolgreich war echo und exit; aufrufen
        db_query('DELETE FROM ... ' . $id);
        echo 'success';
        exit;
    }
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    MDS Mitglied
    Registriert seit
    08.07.2011
    Beiträge
    42
    Beitragswertungen
    0 Beitragspunkte
    Super danke Mairu und she kann geschlossen werden
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    holz Hall Of Fame
    Registriert seit
    17.11.2005
    Beiträge
    4.606
    Beitragswertungen
    117 Beitragspunkte
    Thema erledigt, wird auf Wunsch des Thread-Erstellers geschlossen
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu Allgemein

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten