tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
21
ZUGRIFFE
8363
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von forsterm
    forsterm forsterm ist offline Mitglied Rubin
    Registriert seit
    Nov 2004
    Ort
    Bayern
    Beiträge
    1.328
    Hallo,
    mit php generiere ich eine Tabelle mit Daten aus einer Datenbank. Nun möchte ich,
    dass wenn auf einen Link (rechts neben der Tabellenzeile) geklickt wird die Tabllenzeile
    durch Inputfelder ersetzt wird, wo dann die Daten aus der Datenbank drin stehen.
    Hab dazu auch schon das hier gefunden und hab versucht es so umzusetzten:
    Code :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    
    <?php
        require('connect.php');
        
        if (isset($_GET['link'])){
            if ($_GET['link'] == 'edit'){
                $sql = 'SELECT * FROM tabelle WHERE id = '.intval($_GET['id']);
                $query = mysql_query($sql) or die(mysql_error());
                $ds = mysql_fetch_object($query);
                
                echo '
                <div id="'.$ds->id.'">
                    <td>
                        <form method="POST" name="edit" action="test.php">
                            <input type="text" name="feld1" value="'.$ds->feld1.'" size="20">
                            <input type="text" name="feld2" value="'.$ds->feld2.'" size="20">
                            <input type="text" name="feld3" value="'.$ds->feld3.'" size="20">
                            <input type="text" name="feld4" value="'.$ds->feld4.'" size="20">
                            <input type="hidden" name="id" value="'.$ds->id.'">
                        </form>
                    </td>
                </div>
                ';
                exit;
            }
        }
        
    ?>
    <html>
        <head>
            <script type="text/Javascript">
            <!--
            
                function AjaxManager() {
                 var self = this;
                 self.RequestComplete = null;
                 this.RequestComplete = self.RequestComplete;
                 self.RequestFailed = null;
                 this.RequestFailed = self.RequestFailed;
                
                
                 // Wird aufgerufen von post und erzeugt ein RequestObjekt je nach Browser
                
                 this.XmlHttpRequest = function() {
                  var Request = null;
                  try {Request = new ActiveXObject("Msxml2.XMLHTTP");} catch(e) {
                   try {Request = new ActiveXObject("Microsoft.XMLHTTP");} catch(oc) {
                   Request = null;}
                  }
                  if (!Request && typeof(XMLHttpRequest) != "undefined") Request = new XMLHttpRequest();
                  return Request;
                 };
                
                 // Wird vom Requestobjekt aufgerufen wenn sich dessen ReadyState ändert (also eine Rückmeldung vom Server kommt)
                 this.ResponseHandler = function(Request){
                 
                  var ResHandler = function() {
                   if (Request.readyState == 4) {
                    if (Request.status == 200) {self.RequestComplete(Request);}
                    else
                    {self.RequestFailed(Request);}
                    }
                   }
                 
                  ResHandler.Request = Request;
                  ResHandler.RequestComplete = self.RequestComplete;
                  ResHandler.RequestFailed = self.RequestFailed;
                  return ResHandler;
                 }
                };
                 
                 // Postet Daten (parameters) an die URL
                 this.PostData = function(url,Parameters){
                 var Request = this.XmlHttpRequest();
                 if (Request != null) {
                  try {
                   Request.onreadystatechange = this.ResponseHandler(Request);
                   Request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                   Request.setRequestHeader("Content-length", parameters.length);
                   Request.setRequestHeader("Connection", "close");
                   Request.open("GET", DataSource, true);
                   Request.send(Parameters);
                  } catch(oc) {alert(oc);}
                 }
                 };
                
                }; // Ende Ajax Klasse
            
            
                // Dies sollte via <a href aufgerufen werden. Es sendet einen Request zum Server
                // der als Ergebniss das Ändern Formular für den passenden Datensatz mit der "id" zurückliefern sollte
                function editdata(id){
                 var url = "test.php?link=edit&id=" id;  // Dieser Aufruf sollte nur das Edit Fomurlar erzeugen welches
                                 // den Teil der Webseite ersetzt welches den Anzeigepart enthält
                 var myAjax = new AjaxManager();
                 myAjax.RequestComplete=fillForm(id);
                 myAjax.RequestFailed=window.alert("Remote Request Error");
                 myAjax.PostData(url,null);
                }
                
                // füllt beim Erhalt des Formulars das passende DIV aus
                function fillForm(Request,id){
                 obj=document.getElementById(id);
                 if ((obj) && (Request)){
                  obj.innerHTML = Request.responseText;
                 }
                }
            </script> 
        </head>
        <body>
    <?php    
        $sql = 'SELECT * FROM tabelle';
        $query = mysql_query($sql) or die(mysql_error());
        
        echo '<table border="1" bordercolor="#000000" width="100%" style="border-collapse: collapse">';
        while ($ds = mysql_fetch_object($query)){
            echo '<tr>
                        <div id="'.$ds->id.'">
                            <td>'.$ds->feld1.'</td>
                            <td>'.$ds->feld2.'</td>
                            <td>'.$ds->feld3.'</td>
                            <td>'.$ds->feld4.'</td>
                            <td><a href="#" onclick="editdata('.$ds->id.')">edit</a></td>
                        </div>
                    </tr>';
        }
        echo '</table>';
    ?>
        </body>
    </html>
    Nur leider funktioniert das anscheinend so nicht. Denn es passiert rein gar nichts.
    Weiß von euch eventuell jemand, was ich falsch mache?

    mfg
    forsterm
     
    Wie man Fragen richtig stellt

    Wichtig:
    Bitte markiert eure beantworteten Fragen als "erledigt" (links unten auf "Erledigt" klicken).
    __________________
    .:Mitglied #26 des 1. offiziellen Sven Uwe Fan-Clubs:.

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Könntest du bitte mal die HTML-Ausgabe der Sache Posten?
     

  3. #3
    Avatar von forsterm
    forsterm forsterm ist offline Mitglied Rubin
    Registriert seit
    Nov 2004
    Ort
    Bayern
    Beiträge
    1.328
    Zitat Zitat von Sven Mintel
    Könntest du bitte mal die HTML-Ausgabe der Sache Posten?
    HTML-Code:
    <table border="1" bordercolor="#000000" width="100%" style="border-collapse: collapse">
        <tr>
            <div id="1">
                <td>Zeile1 - Feld1</td>
                <td>Zeile1 - Feld2</td>
                <td>Zeile1 - Feld3</td>
                <td>Zeile1 - Feld4</td>
                <td><a href="#" onclick="editdata(1)">edit</a></td>
            </div>
        </tr>
        <tr>
            <div id="2">
                <td>Zeile2 - Feld1</td>
                <td>Zeile2 - Feld2</td>
                <td>Zeile2 - Feld3</td>
                <td>Zeile2 - Feld4</td>
                <td><a href="#" onclick="editdata(2)">edit</a></td>
            </div>
        </tr>
        <tr>
            <div id="3">
                <td>Zeile3 - Feld1</td>
                <td>Zeile3 - Feld2</td>
                <td>Zeile3 - Feld3</td>
                <td>Zeile3 - Feld4</td>
                <td><a href="#" onclick="editdata(3)">edit</a></td>
            </div>
        </tr>
        <tr>
            <div id="4">
                <td>Zeile4 - Feld1</td>
                <td>Zeile4 - Feld2</td>
                <td>Zeile4 - Feld3</td>
                <td>Zeile4 - Feld4</td>
                <td><a href="#" onclick="editdata(4)">edit</a></td>
            </div>
        </tr>
    </table>
     
    Wie man Fragen richtig stellt

    Wichtig:
    Bitte markiert eure beantworteten Fragen als "erledigt" (links unten auf "Erledigt" klicken).
    __________________
    .:Mitglied #26 des 1. offiziellen Sven Uwe Fan-Clubs:.

  4. #4
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Falls du Firefox benutzt, könntest mithilfe der JavaScript-Konsole die Fehlerquelle analysieren oder zusätzlich noch FireBug installieren.
     
    Markus Wulftange

  5. #5
    Avatar von forsterm
    forsterm forsterm ist offline Mitglied Rubin
    Registriert seit
    Nov 2004
    Ort
    Bayern
    Beiträge
    1.328
    Hallo,
    ok also ich hab das Script nun so über arbeitet:
    Code javascript:
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    
    function AjaxManager()
    {
        var self = this;
        self.RequestComplete = null;
        this.RequestComplete = self.RequestComplete;
        self.RequestFailed = null;
        this.RequestFailed = self.RequestFailed;
     
        // Wird aufgerufen von post und erzeugt ein RequestObjekt je nach Browser
        this.XmlHttpRequest = function()
        {
            var Request = null;
            try {
                Request = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch(e) {
                try {
                    Request = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch(oc) {
                    Request = null;
                }
            }
            if (!Request && typeof(XMLHttpRequest) != "undefined") Request = new XMLHttpRequest();
            return Request;
        };
     
        // Wird vom Requestobjekt aufgerufen wenn sich dessen ReadyState ändert (also eine Rückmeldung vom Server kommt)
        this.ResponseHandler = function(Request)
        {
            var ResHandler = function() {
                if (Request.readyState == 4) {
                    if (Request.status == 200) {
                        self.RequestComplete(Request);
                    } else {
                        self.RequestFailed(Request);
                    }
                }
            }
            ResHandler.Request = Request;
            ResHandler.RequestComplete = self.RequestComplete;
            ResHandler.RequestFailed = self.RequestFailed;
            return ResHandler;
        }
    };
     
    // Postet Daten (parameters) an die URL
    this.PostData = function(url,Parameters)
    {
        var Request = this.XmlHttpRequest();
        if (Request != null) {
            try {
                Request.onreadystatechange = this.ResponseHandler(Request);
                Request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                Request.setRequestHeader("Content-length", parameters.length);
                Request.setRequestHeader("Connection", "close");
                Request.open("GET", DataSource, true);
                Request.send(Parameters);
            }
            catch(oc) {
                alert(oc);
            }
        }
    }; // Ende Ajax Klasse
     
    // Dies sollte via <a href aufgerufen werden. Es sendet einen Request zum Server
    // der als Ergebniss das Ändern Formular für den passenden Datensatz mit der "id" zurückliefern sollte
    function editdata(id)
    {
        var url = "test.php?link=edit&id=" + id;  // Dieser Aufruf sollte nur das Edit Fomurlar erzeugen welches
        // den Teil der Webseite ersetzt welches den Anzeigepart enthält
        var myAjax = new AjaxManager();
        myAjax.RequestComplete=fillForm(id);
        myAjax.RequestFailed=window.alert("Remote Request Error");
        myAjax.PostData(url,null);
    }
    // füllt beim Erhalt des Formulars das passende DIV aus
    function fillForm(Request,id)
    {
        var obj = document.getElementById(id);
        if ((obj) && (Request)){
            obj.innerHTML = Request.responseText;
        }
    }

    FireBug gibt jetzt nur noch einen Fehler aus der wie folgend lautet:
    myAjax.PostData is not a function
    Ich habe schon Folgendes getestet:
    Code javascript:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    // Postet Daten (parameters) an die URL
    this.PostData = function PostData(url,Parameters)
    {
        var Request = this.XmlHttpRequest();
        if (Request != null) {
            try {
                Request.onreadystatechange = this.ResponseHandler(Request);
                Request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                Request.setRequestHeader("Content-length", parameters.length);
                Request.setRequestHeader("Connection", "close");
                Request.open("GET", DataSource, true);
                Request.send(Parameters);
            }
            catch(oc) {
                alert(oc);
            }
        }
    };
    und
    Code javascript:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    // Postet Daten (parameters) an die URL
    function PostData(url,Parameters)
    {
        var Request = this.XmlHttpRequest();
        if (Request != null) {
            try {
                Request.onreadystatechange = this.ResponseHandler(Request);
                Request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                Request.setRequestHeader("Content-length", parameters.length);
                Request.setRequestHeader("Connection", "close");
                Request.open("GET", DataSource, true);
                Request.send(Parameters);
            }
            catch(oc) {
                alert(oc);
            }
        }
    };

    beide Varianten haben jedoch nichts gebracht.
    Kann mir bei diesem Problem denn wirklich niemand weiterhelfen?

    mfg
    forsterm
    Geändert von forsterm (25.06.06 um 18:35 Uhr)
     
    Wie man Fragen richtig stellt

    Wichtig:
    Bitte markiert eure beantworteten Fragen als "erledigt" (links unten auf "Erledigt" klicken).
    __________________
    .:Mitglied #26 des 1. offiziellen Sven Uwe Fan-Clubs:.

  6. #6
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Da sind noch weitere Fehler drinnen

    PostData() hast du bspw. ausserhalb des Objektes notiert(falls ich mich nicht irre), das kann daher nicht per this.PostData() aufegrufen werden.

    Desweiteren unbekannte Variablen(DataSource) , Schreibfehler(parameters.length)
    ...und warum machst du eine GET-Anfrage, und versuchst dann POST-Daten zu senden.
     

  7. #7
    Avatar von forsterm
    forsterm forsterm ist offline Mitglied Rubin
    Registriert seit
    Nov 2004
    Ort
    Bayern
    Beiträge
    1.328
    Zitat Zitat von Sven Mintel
    Da sind noch weitere Fehler drinnen

    PostData() hast du bspw. ausserhalb des Objektes notiert(falls ich mich nicht irre), das kann daher nicht per this.PostData() aufegrufen werden.

    Desweiteren unbekannte Variablen(DataSource) , Schreibfehler(parameters.length)
    ...und warum machst du eine GET-Anfrage, und versuchst dann POST-Daten zu senden.
    Hallo,
    das Script ist nicht von mir (siehe Eingangspost). Hab nur versucht es anzupassen.
    Kannst du oder jemand anders mir da eventuell weiterhelfen oder eine Quelle nennen,
    wo das leicht verständlich erklärt wird bzw. ein Tutorial zu finden ist?

    mfg
    forsterm
     
    Wie man Fragen richtig stellt

    Wichtig:
    Bitte markiert eure beantworteten Fragen als "erledigt" (links unten auf "Erledigt" klicken).
    __________________
    .:Mitglied #26 des 1. offiziellen Sven Uwe Fan-Clubs:.

  8. #8
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Hier findest du einen recht simplen Code, der für deine Zwecke aber bereits als Basis ausreichen sollte, dort wird auch nur 1 ID übergeben.
    http://www.tutorials.de/forum/javasc...-aufrufen.html

    Nen Tutorial dazu wollte ich schon 50x machen, habs schon 100x versprochen...deswegen sag ich jetzt mal lieber nichts
     

  9. #9
    Avatar von forsterm
    forsterm forsterm ist offline Mitglied Rubin
    Registriert seit
    Nov 2004
    Ort
    Bayern
    Beiträge
    1.328
    Hallo,
    ok also hab jetzt folgenden Code:
    Code :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    
    <?php
        require('connect.php');
        
        if (isset($_GET['link'])){
            if ($_GET['link'] == 'edit'){
                $sql = 'SELECT * FROM tabelle WHERE id = '.intval($_GET['id']);
                $query = mysql_query($sql) or die(mysql_error());
                $ds = mysql_fetch_object($query);
                
                die('
                <div id="'.$ds->id.'">
                    <td>
                        <form method="POST" name="edit" action="test.php">
                            <input type="text" name="feld1" value="'.$ds->feld1.'" size="20">
                            <input type="text" name="feld2" value="'.$ds->feld2.'" size="20">
                            <input type="text" name="feld3" value="'.$ds->feld3.'" size="20">
                            <input type="text" name="feld4" value="'.$ds->feld4.'" size="20">
                            <input type="hidden" name="id" value="'.$ds->id.'">
                        </form>
                    </td>
                </div>
                ');
                exit;
            }
        }
        
    ?>
    <html>
        <head>
            <script type="text/javascript">
            <!--
             lock = false;
             req  = false;
                
             if(window.XMLHttpRequest) 
              {
               try 
                {
                 req = new XMLHttpRequest();
                } 
               catch(e) 
                {
                 req = false;
                }
               } 
              else if(window.ActiveXObject) 
               {
                try 
                 {
                  req = new ActiveXObject("Msxml2.XMLHTTP");
                 } 
                catch(e) 
                 {
                  try 
                   {
                    req = new ActiveXObject("Microsoft.XMLHTTP");
                   } 
                  catch(e) 
                   {
                    req = false;
                   }
                 }
               }
                    
                    
            function edit(id) 
            {
             if(!req)
              {
               alert('Dein Browser kann das nicht! :o(');
               return;
              }
                    
             if(lock)
              {
               alert('Warte bitte, bis die letzte Anfrage verarbeitet wurde');
               return;
              }
                    
               //Die Anfrage senden
               lock = id;
               req.onreadystatechange = new Function('f','get_http_response(' + id + ')');
               req.open("GET", '<?php echo $_SERVER['PHP_SELF']; ?>?link=edit&id='+ id + '&amp;' + new Date().getTime(), true);
               req.send(true);
            }
            
            //Antwort verarbeiten
            function get_http_response(id)
            {
             //Wenn Anfrage fertig
             if(req.readyState == 4)
              {   
               //Wenn Status OK
               if(req.status == 200)
                {
                 //Antwort ausgeben
                 //alert(req.responseText);
                 
                 obj=document.getElementById(id);
                 if ((obj)){
                  obj.innerHTML = req.responseText;
                 }
                }
               //Ansonsten
               else
                {
                 //Statuscode ausgeben
                 alert(req.statusText);
                }
               //Request beenden
               if(document.all && !window.opera)
                {
                 req.abort();
                }
               lock = false;
              }
            }
            //-->
            </script>
        </head>
        <body>
    <?php    
        $sql = 'SELECT * FROM tabelle';
        $query = mysql_query($sql) or die(mysql_error());
        
        echo '<table border="1" bordercolor="#000000" width="100%" style="border-collapse: collapse">';
        while ($ds = mysql_fetch_object($query)){
            echo '<tr>
                        <div id="'.$ds->id.'">
                            <td>'.$ds->feld1.'</td>
                            <td>'.$ds->feld2.'</td>
                            <td>'.$ds->feld3.'</td>
                            <td>'.$ds->feld4.'</td>
                            <td><a href="#" onclick="edit('.$ds->id.')">edit</a></td>
                        </div>
                    </tr>';
        }
        echo '</table>';
    ?>
        </body>
    </html>
    Nun habe ich noch 3 (kleinere Probleme ):
    1. Die Inputfelder werden nicht innerhalb der Tabelle sondern darüber angezeigt.
    2. Wenn ich einen Datensatz zum Bearbeiten ausgewählt habe und dann auf einen anderen edit - Link klicke,
    bleibt der alte Datensatz bestehen anstatt dass der neue ausgewählt wird.
    3. Wie kann ich einen "Abbrechen" Button realisieren, sodass die Inputfelder beim Klick darauf wierder verschwinden?

    mfg
    forsterm
    Geändert von forsterm (25.06.06 um 20:14 Uhr)
     
    Wie man Fragen richtig stellt

    Wichtig:
    Bitte markiert eure beantworteten Fragen als "erledigt" (links unten auf "Erledigt" klicken).
    __________________
    .:Mitglied #26 des 1. offiziellen Sven Uwe Fan-Clubs:.

  10. #10
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    1. Anstatt das kopmplette Formular in die Seite hineinzutun, musst du in jeder einzelnen Zelle den bisherigen Inhalt löschen, und dafür die einzelnen Inputs einfügen. Alles andere dürfte Fehler produzieren, aus welchen 2+3 resultieren.
     

  11. #11
    Avatar von forsterm
    forsterm forsterm ist offline Mitglied Rubin
    Registriert seit
    Nov 2004
    Ort
    Bayern
    Beiträge
    1.328
    Hallo,
    ok benutze nun folgenden Code:
    Code :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    
    <?php
        require('connect.php');
        
        if (isset($_GET['link'])){
            if ($_GET['link'] == 'edit'){
                $sql = 'SELECT * FROM tabelle WHERE id = '.intval($_GET['id']);
                $query = mysql_query($sql) or die(mysql_error());
                $ds = mysql_fetch_object($query);
                
                die('
     
                            <td><input type="text" name="feld1" value="'.$ds->feld1.'" size="20"></td>
                            <td><input type="text" name="feld2" value="'.$ds->feld2.'" size="20"></td>
                            <td><input type="text" name="feld3" value="'.$ds->feld3.'" size="20"></td>
                            <td><input type="text" name="feld4" value="'.$ds->feld4.'" size="20"></td>
                            <td><input type="submit" value="Speichern" name="Speichern"><br><input type="submit" value="Abbrechen" name="Abbrechen"></td>
                            <input type="hidden" name="id" value="'.$ds->id.'">
                        
                ');
                exit;
            }
        }
        
    ?>
    <html>
        <head>
            <script type="text/javascript">
            <!--
             lock = false;
             req  = false;
                
             if(window.XMLHttpRequest) 
              {
               try 
                {
                 req = new XMLHttpRequest();
                } 
               catch(e) 
                {
                 req = false;
                }
               } 
              else if(window.ActiveXObject) 
               {
                try 
                 {
                  req = new ActiveXObject("Msxml2.XMLHTTP");
                 } 
                catch(e) 
                 {
                  try 
                   {
                    req = new ActiveXObject("Microsoft.XMLHTTP");
                   } 
                  catch(e) 
                   {
                    req = false;
                   }
                 }
               }
                    
                    
            function edit(id) 
            {
             if(!req)
              {
               alert('Dein Browser kann das nicht! :o(');
               return;
              }
                    
             if(lock)
              {
               alert('Warte bitte, bis die letzte Anfrage verarbeitet wurde');
               return;
              }
                    
               //Die Anfrage senden
               lock = id;
               req.onreadystatechange = new Function('f','get_http_response(' + id + ')');
               req.open("GET", '<?php echo $_SERVER['PHP_SELF']; ?>?link=edit&id='+ id + '&amp;' + new Date().getTime(), true);
               req.send(true);
            }
            
            //Antwort verarbeiten
            function get_http_response(id)
            {
             //Wenn Anfrage fertig
             if(req.readyState == 4)
              {   
               //Wenn Status OK
               if(req.status == 200)
                {
                 //Antwort ausgeben
                 //alert(req.responseText);
                 
                 document.getElementById(id).innerHTML = req.responseText;
                }
               //Ansonsten
               else
                {
                 //Statuscode ausgeben
                 alert(req.statusText);
                }
               //Request beenden
               if(document.all && !window.opera)
                {
                 req.abort();
                }
               lock = false;
              }
            }
            //-->
            </script>
        </head>
        <body>
    <?php    
        $sql = 'SELECT * FROM tabelle';
        $query = mysql_query($sql) or die(mysql_error());
        
        echo '<table border="1" bordercolor="#000000" width="100%" style="border-collapse: collapse">';
        while ($ds = mysql_fetch_object($query)){
            echo '<tr id="'.$ds->id.'">
                        
                            <td>'.$ds->feld1.'</td>
                            <td>'.$ds->feld2.'</td>
                            <td>'.$ds->feld3.'</td>
                            <td>'.$ds->feld4.'</td>
                            <td><a href="#" onclick="edit('.$ds->id.')">edit</a></td>
                        
                    </tr>';
        }
        echo '</table>';
    ?>
        </body>
    </html>
    So sieht das ganze nun aus. Nun zu den Problemen. Wie kann ich verhindern, dass
    man zwei Datensätze gleichzeitig bearbeiten kann? Sprich so etwas sollte nicht möglich sein.
    Wenn man nun auf "Abbrechen" klick dann sollen die Formularfelder wieder verschwinden wie kann man das realisieren?
    Und zu guter letzt wie kann ich die Daten wieder speichern, da ich ja kein html Formular mehr habe?

    Danke schon mal für deine bisherige Hilfe.

    mfg
    forsterm
     
    Wie man Fragen richtig stellt

    Wichtig:
    Bitte markiert eure beantworteten Fragen als "erledigt" (links unten auf "Erledigt" klicken).
    __________________
    .:Mitglied #26 des 1. offiziellen Sven Uwe Fan-Clubs:.

  12. #12
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Erstmal: so einfach wirds leider nicht
    Falls die Sache auch im IE funktionieren soll, kann man leider den Inhalt der <tr> nicht per innerHTML ändern.

    Zu dem Vermeiden der doppelten Ausführung: speichere den Originalzustand der zu bearbeitenden Sachen in einer Variable, dann kannst du ihn bei Bedarf wiederherstellen....zum Beispiel, wenn eine andere Reihe bearbeitet werden soll, aber auch, wenn mit dem Request etwas schiefgeht....oder auch beim "Abbrechen"

    Zum Speichern: du musst die Inhalte der vorhandenen an die URL ranhängen, an die du den XMLHttpRequest sendest, dann kann das PHP-Skript sie dort verarbeiten.
     

  13. #13
    Avatar von forsterm
    forsterm forsterm ist offline Mitglied Rubin
    Registriert seit
    Nov 2004
    Ort
    Bayern
    Beiträge
    1.328
    Zitat Zitat von Sven Mintel
    Zu dem Vermeiden der doppelten Ausführung: speichere den Originalzustand der zu bearbeitenden Sachen in einer Variable, dann kannst du ihn bei Bedarf wiederherstellen....zum Beispiel, wenn eine andere Reihe bearbeitet werden soll, aber auch, wenn mit dem Request etwas schiefgeht....oder auch beim "Abbrechen"
    Hallo,
    ok diesen Teil hab ich glaube ich nicht ganz verstande, wo muss ich denn da die Variable speichern?
    Hab es mal so versucht, das funktioniert auch soweit, nur wenn ich dem a - Tag das href - Attribut einfüge, dann bekomme ich das Problem mit den Anführungszeichen.
    Desswegen muss ich doch wohl deine Variante verwenden, nur wie?
    Zitat Zitat von Sven Mintel
    Falls die Sache auch im IE funktionieren soll, kann man leider den Inhalt der <tr> nicht per innerHTML ändern.
    Das ist mir noch gar nicht aufgefallen, dass das im IE nicht funktioniert. Ist eigentlich sehr viel Aufwand, es so umzuschreiben, dass - am besten - in allen vorwiegen aber nur im IE und FF funktionert?

    mfg
    forsterm
     
    Wie man Fragen richtig stellt

    Wichtig:
    Bitte markiert eure beantworteten Fragen als "erledigt" (links unten auf "Erledigt" klicken).
    __________________
    .:Mitglied #26 des 1. offiziellen Sven Uwe Fan-Clubs:.

  14. #14
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Naja...Variablen kannst du ja erstellen, wo und wie du willst, angenommen, du willst etwas ändern:
    Code :
    1
    
    puffer=document.getElementById('irgendwas').innerHTML;
    ...wenn du jetzt abbrichst und das Original wiederherstellen wills, dann dreh die Sache einfach um:
    Code :
    1
    
    document.getElementById('irgendwas').innerHTML=puffer;
    ..und alles ist wieder beim alten.

    Zum IE... mehr Aufwand ist es schon, aber noch erträglich, würd ich mal sagen.
    Am einfachsten würde es sich machen, wenn man nicht immer komplette Reihen, sondern nur Zellen ändert....da würde deine Variante wieder klappen, weil man im IE zwar nicht die Tabellenstruktur ansich(tr, td, etc.) per innerHTML ändern kann...den Inhalt von Tabellenzellen aber sehr wohl.

    Als Mod hat man hier im Forum bspw. diverse Möglichkeiten, etwas durch Doppelklick auf einen Text zu ändern....
    • man klickt doppelt rauf, der Text erscheint in einem Input
    • man ändert den Text und dann [ENTER]...der Text steht in der DB und aus dem Input wird wieder Text
    • man verlässt das Input ohne [ENTER]...aus dem Input wird wieder Text, ohne etwas in die DB zu schreiben

    Das liesse sich weitaus einfacher umsetzen als die Variante mit den Links, und für meinen Geschmack ist es auch bedienfreundlicher
     

  15. #15
    Avatar von forsterm
    forsterm forsterm ist offline Mitglied Rubin
    Registriert seit
    Nov 2004
    Ort
    Bayern
    Beiträge
    1.328
    Zitat Zitat von Sven Mintel
    Als Mod hat man hier im Forum bspw. diverse Möglichkeiten, etwas durch Doppelklick auf einen Text zu ändern.... [list][*]man klickt doppelt rauf, der Text erscheint in einem Input[*]man ändert den Text und dann [ENTER]...der Text steht in der DB und aus dem Input wird wieder Text[*]man verlässt das Input ohne [ENTER]...aus dem Input wird wieder Text, ohne etwas in die DB zu schreiben
    [/code]

    Das liesse sich weitaus einfacher umsetzen als die Variante mit den Links, und für meinen Geschmack ist es auch bedienfreundlicher
    Hallo,
    das hört sich sehr gut an, daran hatte ich aus schon gedacht, nur wie kann ich das umsetzen?
    Kannst du mir da ein paar Tipps oder vielleicht ein kleines Beispiel geben?

    mfg
    forsterm
     
    Wie man Fragen richtig stellt

    Wichtig:
    Bitte markiert eure beantworteten Fragen als "erledigt" (links unten auf "Erledigt" klicken).
    __________________
    .:Mitglied #26 des 1. offiziellen Sven Uwe Fan-Clubs:.

Ähnliche Themen

  1. AJAX: Variable aus Datei abrufen
    Von ber im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 02.10.10, 16:09
  2. Daten von MySql Datenbank in PostgreSql Datenbank
    Von Johannes7146 im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 06.11.09, 12:18
  3. Antworten: 4
    Letzter Beitrag: 12.11.07, 22:46
  4. Vom Heimatrechner aus einer Internet-SQL-Datenbank Daten abrufen
    Von Katjusha im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 31.01.05, 21:49
  5. Antworten: 3
    Letzter Beitrag: 28.04.04, 15:01