Ankündigung

Einklappen
Keine Ankündigung bisher.

Nach Datenausgabe, einen Eintrag ändern?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Nach Datenausgabe, einen Eintrag ändern?

    Hi,

    habe Hier vor einigen Tage eine Anfrage gestellt gehabt, wie man am elegantesten einen Datensatz ausgibt.

    Das funktioniert nun auch soweit, nur dass ich jetzt noch einen oder 2 Einträge in dieser Ausgabe zusätzlich ändern können müsste.
    Ich habe mich mal an einer "dele-Funktion" orientiert, aber ich bekomme wahrscheinlich den zu übergebenden Wert nicht übergeben:
    PHP-Code:
    <?php

    // Zugang
    $host "localhost";
    $datenbank "****";
    $dbuser "****";
    $passwort "****";
    $tabelle "***";



    // Zugriffsdaten

    $link mysql_connect($host$dbuser$passwort);
    if (!
    $link) {
        die(
    'keine Verbindung möglich: ' mysql_error());
    }

    $db_selected mysql_select_db($datenbank$link);
    if (!
    $db_selected) {
        die (
    $datenbank mysql_error());
    }


    if(isset(
    $_GET['edit'])){
      
    mysql_query('UPDATE ' $tabelle ' SET secretid = secretid WHERE id IN (' implode(','$_GET['change']) . ')');
    }


    $result mysql_query('SELECT id, vzuid, farmuid, secretid, infos  FROM ' $tabelle ' WHERE id = ' $nummer '');
    if (!
    $result) {
        echo 
    'Abfrage konnte nicht ausgeführt werden: ' mysql_error();
        exit;
    }

    while (list(
    $id$vzuid$farmuid$secretid$infos) = mysql_fetch_row($result)) {
        
    $content .='
            <html>
                <head>
                     </head>
                     <body>
                    <div align="center">
                                     |&nbsp;&nbsp;DB-ID: ' 
    $id '&nbsp;&nbsp;
                        |&nbsp;&nbsp;Deine UID: ' 
    $vzuid '&nbsp;&nbsp;
                                     |&nbsp;&nbsp;Deine Farm-UID: ' 
    $farmuid '&nbsp;&nbsp;
                                     |&nbsp;&nbsp;Deine SecretID: <TEXTAREA NAME="secretid" ROWS="1" COLS="10">' 
    $secretid '</textarea>&nbsp;&nbsp;
                        |&nbsp;&nbsp;Infos: <TEXTAREA NAME="infos" ROWS="1" COLS="10">' 
    $infos '</textarea>&nbsp;&nbsp;|<input type="checkbox" name="change[]" value="' $id .'">
                                 </div>
                </body>
            </html>'
    ;
          };
    echo 
    '<form method="get">  <input type="submit" value="&auml;ndern" name="edit"/>' $content '</form>';        


    ?>
    Ist der Ansatz richtig, oder habe ich mich komplett verfranzt?

  • #2
    So funktioniert es irgendwie:

    PHP-Code:
    <?php

    // Zugang
    $host "localhost";
    $datenbank "****";
    $dbuser "**";
    $passwort "**";
    $tabelle "**";

    // Zugriffsdaten

    $link mysql_connect($host$dbuser$passwort);
    if (!
    $link) {
        die(
    'keine Verbindung möglich: ' mysql_error());
    }

    $db_selected mysql_select_db($datenbank$link);
    if (!
    $db_selected) {
        die (
    $datenbank mysql_error());
    }


    if(isset(
    $_POST['edit'])){
      
    mysql_query('UPDATE ' $tabelle ' SET secretid = ' $_POST['secretid'] . ',infos = ' $_POST['infos'] . ' WHERE id IN (' implode(','$_POST['change']) . ')');
    }




    $result mysql_query('SELECT id, vzuid, farmuid, secretid, infos  FROM ' $tabelle ' WHERE id = ' $nummer '');
    if (!
    $result) {
        echo 
    'Abfrage konnte nicht ausgeführt werden: ' mysql_error();
        exit;
    }

    while (list(
    $id$vzuid$farmuid$secretid$infos) = mysql_fetch_row($result)) {
        
    $content .='
            <html>
                <head>
                     </head>
                     <body>
                    <div align="center">
                                     |&nbsp;&nbsp;DB-ID: ' 
    $id '&nbsp;&nbsp;
                        |&nbsp;&nbsp;Deine UID:' 
    $vzuid '&nbsp;&nbsp;
                                     |&nbsp;&nbsp;Deine Farm-UID: ' 
    $farmuid '&nbsp;&nbsp;
                                     |&nbsp;&nbsp;Deine SecretID: <TEXTAREA NAME="secretid" ROWS="1" COLS="10">' 
    $secretid '</textarea>&nbsp;&nbsp;
                        |&nbsp;&nbsp;Infos: <TEXTAREA NAME="infos" ROWS="1" COLS="10">' 
    $infos '</textarea>&nbsp;&nbsp;|<input type="checkbox" name="change[]" value="' $id .'">
                                 </div>
                </body>
            </html>'
    ;
          };
    echo 
    '<form method="post">  <input type="submit" value="&auml;ndern" name="edit"/>' $content '</form>';


    ?>

    Allerdings, wenn ich das Häkchen in der Checkbox nicht setze, dann erscheint
    Warning: implode() [function.implode]: Invalid arguments passed in /is/htdocs/*****/test.php on line 31
    (in der Update-Schleife)


    Gibt es von euch noch Anmerkungen, oder Verbesserungen?

    Kommentar


    • #3
      Du kannst nichts zusammenkleben, was nicht da ist.
      [URL]http://hallophp.de[/URL]

      Kommentar


      • #4
        Ja, jede Menge. Die üblichen

        - Fehlende Datensicherheit
        - die ist eine schlechte Fehlerkontrolle
        - exit auch
        - fehlende Validierung
        [COLOR="#F5F5FF"]--[/COLOR]
        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
        [COLOR="#F5F5FF"]
        --[/COLOR]

        Kommentar


        • #5
          das heißt was?
          Wenn das Häkchen fehlt, sollte es nicht funktionieren, das ist mir klar, aber was läuft da noch falsch?

          Die Datensicherheit ist sekundär wichtig, da ich das Verzeichnis per .htaccess-Passwort geschützt habe.
          Die schlechte Fehlerkontrolle ist wie gemeint? Bei der DB etc... sind doch die Fehlermeldungen. Oder sollte in die If-schleife beim Update noch ein "Erfolgreich geändert" rein?
          Was ist mit dem Exit?

          Die Validierung und der html-Code kommen erst, wenn das ganze Skript funktioniert

          Kommentar


          • #6
            Sorry, aber das ist ein Haufen Ausreden. Darauf antworte ich nicht mehr.
            [COLOR="#F5F5FF"]--[/COLOR]
            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
            [COLOR="#F5F5FF"]
            --[/COLOR]

            Kommentar


            • #7
              Ich habe noch eine Antwort.
              Oder sollte in die If-schleife beim Update noch ein "Erfolgreich geändert" rein?
              if-schleife.de
              [URL]http://hallophp.de[/URL]

              Kommentar


              • #8
                PHP-Code:
                print_r($_POST); 
                Dann wirst du sehen warum das implode nicht funktioniert. Also zumindest wenn man sich noch anschaut, wie die Parameter, die implode erwartet aussehen [MAN]implode[/MAN]

                Kommentar


                • #9
                  @nikosch,
                  bei der Validierung, gebe ich zu, dass das eine Ausrede sein kann aber was deine anderen Punkte betrifft, so kann ich es bislang nicht besser! Meine php-Kenntnisse beschränken auf das installieren von einem CMS im öffentlichen Bereich. Dann habe ich mal in einer Datei eine DB-Abfrage erweitert. Wenn da 3 Werte abgefragt werden, ist ein vierter Wert kein Problem (Copy + Paste) das gleiche beim Anzeigen.....

                  Ich bin froh, dass überhaupt etwas angezeigt wird
                  Von daher steht die Sicherheit für mich erst einmal hinten an, da nur ich, und ggf. ein guter Kollege Zugriff bekommen werden.

                  Edit:
                  Das mit dem Exit sehe ich erst jetzt, dass das nur gefahren wird, wenn die abfrage fehlerhaft war!!




                  Die If-Schleife ist gut...
                  (Wobei ich jetzt gerade noch mal das Java-Script unsere Professors geschaut habe, und da variiert es zwischen "Schleife" und "Anweisung"....


                  Was das "implode" betrifft, so verstehe ich da absolut Bahnhof...
                  Ich habe den Print-Befehl mal ausprobiert, und erhalte zur Zeit folgende Angaben:
                  mit Häkchen
                  Array ( [edit] => ändern [secretid] => 55 [infos] => 5454 [change] => Array ( [0] => 60 ) ) Datensatz nicht geändert.
                  ohne Häkchen
                  Array ( [edit] => ändern [secretid] => 55 [infos] => 5454 ) Datensatz nicht geändert.

                  Ich habe nun versucht, meine If-Abfrage über eine weitere Bedingung zu koppeln, in der ich abfrage, ob die Checkbox gesetzt wurde:
                  PHP-Code:
                  // Aktualisierung des Datensatzes
                  if(isset($_POST['edit'])){
                     if(isset(
                  $_POST['edit']) && isset($_POST['checkbox'])){
                        
                  mysql_query('UPDATE ' $tabelle ' SET secretid = ' $_POST['secretid'] . ',infos = ' $_POST['infos'] . ' WHERE id IN (' implode(','$_POST['change']) . ')');
                        echo 
                  'Datensatz erfolgreich ge&auml;ndert.';
                     }
                     else{
                        echo 
                  'Datensatz nicht ge&auml;ndert.';
                     }
                  }
                  [......]
                  <
                  input type="checkbox" name="checkbox" value="' . $id .'"
                  Nun funktioniert eine fehlerhafte Abfrage wunderbar
                  Bloß wenn ich das Häkchen setze, dann klappt nix mehr, weil der Name der Checkbox (name="change[]") nicht mehr passt.

                  Oben kann ich in der If-Abfrage aber folgendes auch nciht umsetzen:
                  PHP-Code:
                     if(isset($_POST['edit']) && isset($_POST['change[]=' $nummer ''])){ 
                  Das einfachste wäre, wenn ich die Checkbox permanent gesetzt lasse, und ausblende. Dann kann doch ncihts schief gehen, oder?




                  Anbei nochmal der komplette Code, in dem die html-Ausgabe normalerweise von der Struktur in der richtigen Reihenfolge laufen sollte. Ich könnte nun noch den Anfang der html-Ausgabe in den Anfang der php-Datei schreiben, um somit zu gewährleisten, dass die Fehlermeldungen auch "valide" dargestellt werden, aber ich habe so schon genug Schwierigkeiten, die Überblick zu behalten.


                  PHP-Code:
                  <?php

                  // Zugang
                  $host "localhost";
                  $datenbank "***";
                  $dbuser "***";
                  $passwort "***";
                  $tabelle "***";


                  $nummer abs((int) $_GET['nummer']);


                  // Zugriffsdaten

                  // Datenbank-Verbindung
                  $link mysql_connect($host$dbuser$passwort);
                  if (!
                  $link) {
                      die(
                  'keine Verbindung möglich: ' mysql_error());
                  }
                  // Datenbank-Auswahl
                  $db_selected mysql_select_db($datenbank$link);
                  if (!
                  $db_selected) {
                      die (
                  $datenbank mysql_error());
                  }

                  print_r($_POST);
                  // Aktualisierung des Datensatzes
                  if(isset($_POST['edit'])){
                     if(isset(
                  $_POST['edit']) && isset($_POST['change[]=' $nummer ''])){
                        
                  mysql_query('UPDATE ' $tabelle ' SET secretid = ' $_POST['secretid'] . ',infos = ' $_POST['infos'] . ' WHERE id IN (' implode(','$_POST['change']) . ')');
                        echo 
                  'Datensatz erfolgreich ge&auml;ndert.';
                     }
                     else{
                        echo 
                  'Datensatz nicht ge&auml;ndert.';
                     }
                  }
                  // Datensatz-Abfrage
                  $result mysql_query('SELECT id, vzuid, farmuid, secretid, infos  FROM ' $tabelle ' WHERE id = ' $nummer '');
                  if (!
                  $result) {
                      echo 
                  'Abfrage konnte nicht ausgeführt werden: ' mysql_error();
                      exit;
                  }

                  //Darstellung der Ausgabewerte
                  while (list($id$vzuid$farmuid$secretid$infos) = mysql_fetch_row($result)) {
                      
                  $content .='
                          <html>
                              <head>
                                   </head>
                                   <body>
                                  <div align="center">
                                                           <form method="post">
                                                           <input type="submit" value="&auml;ndern" name="edit"/>
                                                   |&nbsp;&nbsp;DB-ID: ' 
                  $id '&nbsp;&nbsp;
                                                   |&nbsp;&nbsp;Deine UID: ' 
                  $vzuid '&nbsp;&nbsp;
                                                   |&nbsp;&nbsp;Deine Farm-UID: ' 
                  $farmuid '&nbsp;&nbsp;
                                                   |&nbsp;&nbsp;Deine SecretID: <TEXTAREA NAME="secretid" ROWS="1" COLS="10">' 
                  $secretid '</textarea>&nbsp;&nbsp;
                                                   |&nbsp;&nbsp;Infos: <TEXTAREA NAME="infos" ROWS="1" COLS="10">' 
                  $infos '</textarea>&nbsp;&nbsp;|<input type="checkbox" name="change[]" value="' $id .'">
                                                   </form>
                                                   </div>
                              </body>
                          </html>'
                  ;
                        };
                  //Ausgabe des Inhaltes
                  echo '' $content '';
                  exit;  

                  ?>

                  Kommentar


                  • #10
                    Also, da ich nicht weiter gekommen bin, bin ich komplett neu angefangen.

                    Als Vorlage habe ich mir folgende Datei genommen:
                    Datenverwaltung: Seite 5
                    Dabei habe ich festgestellt, dass nicht mal diese Vorlage valide ist, da die Tabelle zwischen dem </head> und dem <body> ausgeführt wird...

                    Das habe ich nun mit Zugangs-Variablen (Zeilen 30-40) bestückt, und mit der Link-Erweiterung
                    "Daten via URL" versehen (Zeile 40 und 62).

                    PHP-Code:
                    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                    "www.w3.org/TR/html4/loose.dtd">
                    <html>
                    <head>
                    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
                    <title>Mitgliedsdaten aus der Datenbank Verein</title>
                    <style type="text/css">
                    <!--
                    table {
                    width: 500px;
                    border: thin solid #000000;
                    }
                    body {
                    font-family: Arial, Helvetica, sans-serif;
                    }
                    tr {
                    background-color: #FFCC33;
                    text-align: center;
                    }
                    thead {
                    background-color: #CCCCCC;
                    font-weight: bold;
                    text-align: center;
                    }
                    -->
                    </style>
                    </head>
                    <body>
                    <?php

                    // Zugang zur Datenbank
                    $host "localhost";
                    $dbuser "root";
                    $passwort "";
                    $datenbank "test";
                    $tabelle "tabelle";

                    //Daten via URL
                                            //http://selfphp.de/praxisbuch/praxisbuch.php?group=33
                    $nummer abs((int) $_GET['nummer']);

                    // Verbindungs-Objekt samt Zugangsdaten festlegen
                    @$db = new mysqli($host$dbuser$passwort$datenbank);

                    // Verbindung überprüfen
                    if (mysqli_connect_errno()) {
                      
                    printf("Verbindung fehlgeschlagen: %s\n"mysqli_connect_error());
                      exit();
                    }

                    // Tabellenkopf
                    echo "
                    <table>
                      <thead>
                        <td>Mitglied-ID</td>
                        <td>Wert 1</td>
                        <td>Wert 2</td>
                      </thead>
                    "
                    ;

                    // Datensatz-Ausgabe festlegen
                    $sql_befehl "SELECT id, wert1, wert2 FROM " $tabelle " WHERE id =" $nummer;
                                            
                    //http://www.php.de/wiki-php/index.php/Codeoptimierung:Code-Smells#Leere_Strings
                                                                     //http://www.php.de/wiki-php/index.php/Codeoptimierung:Code-Smells#SELECT_.2A

                    if ($resultat $db->query($sql_befehl)) {
                      
                    // Durchlaufen der Datenbankabfrage
                      
                    while($datensatz $resultat->fetch_array() ){
                        
                    // Datenfelder – Inhalte extrahieren und
                        // als Variablen zur Verfügung stellen
                        
                    extract($datensatz);
                        
                    // Tabelleninhalt
                        
                    echo "
                        <tr>
                        <td>
                    $id</td>
                        <td>
                    $wert1</td>
                        <td>
                    $wert2</td>
                        </tr>
                        "
                    ;
                      }
                      
                    // Speicher freigeben
                      
                    $resultat->close();
                    } else {
                      
                    // Meldung bei Fehlschlag
                      
                    echo "Zugriff fehlgeschlagen!";
                    }

                    // Tabellenende
                    echo "\n</table>\n";

                    // Verbindung zum Datenbankserver beenden
                    $db->close();

                    ?>

                    </body>
                    </html>

                    Als nächstes war wieder das leidige Thema dran, die Daten zu ändern. Dazu habe ich mich noch einmal mit dem Up-date-Befehl auseinander gesetzt:
                    Datenverwaltung: Seite 2
                    Diesen habe ich nun zwischen Zeile 61 und 76 eingeführt. Die dazugehörige form-Methode ist in den Zeilen 94 - 99.

                    Ich habe die Checkbox weg gelassen, da ich deren Funktion immer noch nicht ganz ergründet habe. Da ich die Get-Funktion auch noch nicht richtig verstehe, pflücke ich diese beim aktualisieren der Datensätze (update) auseinander und verteile es auf Variabeln. Ist das so richtig, oder gibt es einen eleganteren Weg? (Müsste ich 30 Werte übergeben, wird die URL recht lang, und der SQL-Befehl auch)



                    Ansonsten funktioniert es in meinen Augen aktuell wunderbar
                    (Okay, die Bestätigung, ob der Datensatz geändert werden konnte, ist noch nicht valide)


                    Hier nun der komplette Code: (aufzurufen mit dateiname.php?nummer=1)
                    PHP-Code:
                    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                    "www.w3.org/TR/html4/loose.dtd">
                    <html>
                    <head>
                    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
                    <title>Mitgliedsdaten aus der Datenbank Verein</title>
                    <style type="text/css">
                    <!--
                    table {
                    width: 500px;
                    border: thin solid #000000;
                    }
                    body {
                    font-family: Arial, Helvetica, sans-serif;
                    }
                    tr {
                    background-color: #FFCC33;
                    text-align: center;
                    }
                    thead {
                    background-color: #CCCCCC;
                    font-weight: bold;
                    text-align: center;
                    }
                    -->
                    </style>
                    </head>
                    <body>
                    <?php

                    // Zugang zur Datenbank
                    $host "localhost";
                    $dbuser "root";
                    $passwort "";
                    $datenbank "test";
                    $tabelle "tabelle";

                    //Daten via URL
                                            //http://selfphp.de/praxisbuch/praxisbuch.php?group=33
                    $nummer abs((int) $_GET['nummer']);


                    // Verbindungs-Objekt samt Zugangsdaten festlegen
                    @$db = new mysqli($host$dbuser$passwort$datenbank);

                    // Verbindung überprüfen
                    if (mysqli_connect_errno()) {
                      
                    printf("Verbindung fehlgeschlagen: %s\n"mysqli_connect_error());
                      exit();
                    }

                    // Tabellenkopf
                    echo "
                    <table>
                      <thead>
                        <td>Mitglied-ID</td>
                        <td>Werte</td>
                      </thead>
                    "
                    ;

                    // Datensätze aktualisieren (bearbeiten)
                    if(isset($_GET['edit'])){
                      
                    $nummer $_GET['nummer'];
                      
                    $ersterwert $_GET['ersterwert'];
                      
                    $zweiterwert $_GET['zweiterwert'];
                      
                    // Datensätze aktualisieren (bearbeiten)
                      
                    $sql_befehl "UPDATE " $tabelle " SET wert1 = '" $ersterwert "' WHERE id = " $nummer;
                                            
                    //http://selfphp.de/praxisbuch/praxisbuchseite.php?site=273&group=48&page=2
                      
                    if ($db->query($sql_befehl)) {
                        
                    // Meldung bei Erfolg
                        
                    echo "Anzahl geänderter Datensätze: " $db->affected_rows;
                      } else {
                        
                    // Meldung bei Fehlschlag
                        
                    echo "Datensatz konnte nicht bearbeitet werden!";
                      }
                    }

                    // Datensatz-Ausgabe festlegen
                    $sql_befehl "SELECT id, wert1, wert2 FROM " $tabelle " WHERE id =" $nummer;
                                            
                    //http://www.php.de/wiki-php/index.php/Codeoptimierung:Code-Smells#Leere_Strings
                                                                     //http://www.php.de/wiki-php/index.php/Codeoptimierung:Code-Smells#SELECT_.2A

                    if ($resultat $db->query($sql_befehl)) {
                      
                    // Durchlaufen der Datenbankabfrage
                      
                    while($datensatz $resultat->fetch_array() ){
                        
                    // Datenfelder – Inhalte extrahieren und
                        // als Variablen zur Verfügung stellen
                        
                    extract($datensatz);
                        
                    // Tabelleninhalt
                        
                    echo '
                        <tr>
                          <td>' 
                    $id '</td>
                          <td>
                            <form method="get">
                              <input type="hidden" name="nummer" value="' 
                    $id '" />
                              <TEXTAREA NAME="ersterwert"  ROWS="1" COLS="10">' 
                    $wert1 '</textarea>
                              <TEXTAREA NAME="zweiterwert" ROWS="1" COLS="10">' 
                    $wert2 '</textarea>
                              <input type="submit" value="&auml;ndern" name="edit"/>
                            </form>
                          </td>
                        </tr>
                        '
                    ;
                      }
                      
                    // Speicher freigeben
                      
                    $resultat->close();
                    } else {
                      
                    // Meldung bei Fehlschlag
                      
                    echo "Zugriff fehlgeschlagen!";
                    }

                    // Tabellenende
                    echo "\n</table>\n";

                    // Verbindung zum Datenbankserver beenden
                    $db->close();

                    ?>

                    </body>
                    </html>

                    Über eine Antwort würde ich mich sehr freuen

                    Kommentar

                    Lädt...
                    X