Datensatz aktiv/inaktiv setzen

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

  • Datensatz aktiv/inaktiv setzen

    Guten Abend und eine erfolgreiche neue Woche!

    Ich habe Adressen mit Schaltflächen für update, klonen und löschen.
    Jetzt möchte ich eine weitere Schaltfläche für aktiv/inaktiv setzen.

    Wenn ich mit der Maus über die Schaltfläche fahre, wird mir wie auch bei den andern Schaltflächen unten links angezeigt, was ausgeführt wird (zum Beispiel: localhost/adr/inactive.php?id=505)

    Dazu habe ich folgenden Code, aber leider werden sämtliche Datensätze geändert und nicht nur einer - was muss ich ändern?

    PHP-Code:
    <?php

    include_once '../main.php';


    if (isset(
    $_SESSION['id'])) {

        
    $stmt $pdo->prepare('SELECT aktiv FROM accounts WHERE id = ?');
        
    $stmt->execute([ $_SESSION['id'] ]);
        
    $account $stmt->fetch(PDO::FETCH_ASSOC); 
        
    $aktiv $account['aktiv'];

        if (
    $aktiv == 'ja') {
            
    $aktiv 'nein'
            
    $stmt $pdo->prepare('UPDATE accounts SET aktiv = ?');    
            
    $stmt->execute([$aktiv]); 
        }

        if (
    $aktiv == 'nein') {
            
    $aktiv 'ja'
            
    $stmt $pdo->prepare('UPDATE accounts SET aktiv = ?');    
            
    $stmt->execute([$aktiv]); 
        }
    }
    Zuletzt geändert von Kusi_Schweiz; 21.02.2022, 17:07.

  • #2
    Ein UPDATE ohne WHERE wird nun mal auf alle Datensätze angewendet.

    Kommentar


    • #3
      Ich habe den Code wie folgt angepasst:
      PHP-Code:
      if (isset($_GET['id'])) {

          
      $stmt $pdo->prepare('SELECT aktiv FROM accounts WHERE id = ?');
          
      $stmt->execute([ $_GET['id'] ]);
          
      $account $stmt->fetch(PDO::FETCH_ASSOC); 
          
      $aktiv $account['aktiv'];

          if (
      $aktiv == 'ja') {
              
      $aktiv 'nein'
              
      $stmt $pdo->prepare('UPDATE accounts SET aktiv = ? WHERE id = ?');    
              
      $stmt->execute([$aktiv$id]); 
          }

          if (
      $aktiv == 'nein') {
              
      $aktiv 'ja'
              
      $stmt $pdo->prepare('UPDATE accounts SET aktiv = ? WHERE id = ?');    
              
      $stmt->execute([$aktiv$id]); 
          }


      Ich erhalte die Fehlermeldung dass $id nicht definiert sei und frage mich, wie muss ich konkret den Code ändern, damit nur die gewählte id-Nummer aktualisiert wird.

      Das Problem scheint SELECT zu sein, denn wenn ich direkt update (ohne SELECT-Abfrage) funktioniert es. Aber ich möchte, dass mein Code sowohl fürs inaktiv setzen wie auch fürs wieder aktiv setzen funktioniert.

      Kommentar


      • #4
        Du erstellst nirgendwo in dem Code eine Variable $id.

        Schreiboperationen sollten übrigens nicht mit GET durchgeführt werden. GET ist nur zum Abfragen und nicht zum Manipulieren von Daten gedacht. Wird es falsch verwendet, kann es unschöne Nebeneffekte haben. Es gibt zum Beispiel Virenscanner oder Browser, die von sich aus ohne Zutun des Users GET-Requests machen und somit unerwünschte Schreiboperationen auslösen würden.

        Deswegen sollte dafür POST und nicht GET verwendet werden.

        Kommentar


        • #5
          Zitat von h3ll Beitrag anzeigen
          Du erstellst nirgendwo in dem Code eine Variable $id.
          Das ist so, ich möchte wie im Eingangstext erwähnt: "Wenn ich mit der Maus über die Schaltfläche fahre, wird mir wie auch bei den andern Schaltflächen unten links angezeigt, was ausgeführt wird (zum Beispiel: localhost/adr/inactive.php?id=505)"

          Heisst ich möchte diese id=505 "mitnehmen", so wie es bei einem reinen Update funktioniert.

          Schreiboperationen sollten übrigens nicht mit GET durchgeführt werden. GET ist nur zum Abfragen und nicht zum Manipulieren von Daten gedacht. Wird es falsch verwendet, kann es unschöne Nebeneffekte haben. Es gibt zum Beispiel Virenscanner oder Browser, die von sich aus ohne Zutun des Users GET-Requests machen und somit unerwünschte Schreiboperationen auslösen würden.

          Deswegen sollte dafür POST und nicht GET verwendet werden.
          Danke für den Tipp.

          Kommentar


          • #6
            Ich habe die Lösung, das Update funktioniert aber nur mit $_GET['id'], nicht mit $_POST['id']
            PHP-Code:
            <?php

            include_once '../main.php';

            if (!isset(
            $_GET['id'])) {
                exit (
            'Kein Datensatz unter dieser ID');
            }

            $stmt $pdo->prepare('SELECT aktiv FROM accounts WHERE id = ?'); 
            $stmt->execute([$_GET['id']]);
            $account $stmt->fetch(PDO::FETCH_ASSOC);
            $aktiv $account['aktiv'];

            if (
            $aktiv == 'ja') {
                
            // Datensatz auf inaktiv setzen
                
            $_POST['aktiv'] = 'nein';
                 
            $stmt $pdo->prepare('UPDATE accounts SET aktiv = ? WHERE id = ?');        
                 
            $stmt->execute([$_POST['aktiv'], $_GET['id']]);         
                 
            header ('Location: saved_adr_inactive.php');
                 exit;       
            }    
             
            if (
            $aktiv == 'nein') {
                
            // Datensatz auf aktiv setzen
                
            $_POST['aktiv'] = 'ja';
                 
            $stmt $pdo->prepare('UPDATE accounts SET aktiv = ? WHERE id = ?');        
                 
            $stmt->execute([$_POST['aktiv'], $_GET['id']]);         
                 
            header ('Location: saved_adr_active.php');
                 exit;       
            }               
                 
            ?>
            Zuletzt geändert von Kusi_Schweiz; 22.02.2022, 10:08.

            Kommentar

            Lädt...
            X