Mysql Abfrage und Update per formular

klausi89

Erfahrenes Mitglied
Ich denke, du solltest mal den kompletten HTML- und PHP-Code posten. Mit dem was ich hier sehe, müsste PHP dir eigentlich Warnings um die Ohren hauen.
na die sieht momentan so aus ->


PHP:
<?php

error_reporting(-1);
ini_set('display_errors', true);

session_start();
if(!isset($_SESSION['userid'])) {
    die('Bitte zuerst <a href="login.php">einloggen</a>');
}

//Abfrage der Nutzer ID vom Login
$userid = $_SESSION['userid'];
if ($userid == 1) {$userid = "Tagesmutti Sandra";}

if(date("G") < 12) {$a="Guten Morgen ";}
if(date("G") <= 18 && date("G") >= 12) {$a='Guten Tag ';}
if(date("G") >= 19) {$a='Guten Abend ';}

$pdo = new PDO('mysql:host=localhost;dbname=name', 'user', 'pass');
$sql = "SELECT * FROM data";
// Ausgabe in Variable speichern
foreach ($pdo->query($sql) as $row) {

   $facebook = $row['facebook'];
   $instagram = $row['instagram'];
   $frei = $row['frei'];
}

// neue Variablen aus Formular
$frei_neu = $_POST["frei"];
$facebook_neu = $_POST["facebook"];
$instagram_neu = $_POST["instagram"];

// Update anweisung
$statement = $pdo->prepare("UPDATE data SET frei = :frei_neu WHERE facebook = :facebook_neu AND instagram = :instagram_neu");
$statement->execute(array('frei_neu' => $frei_neu, 'facebook_neu' => $facebook_neu, 'instagram_neu' => $instagram_neu));

// Ausgabe Test
echo "$frei_neu, $facebook_neu, $instagram_neu<br>";

?>

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Erlem&auml;use Admin</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>

  <link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.10.0/css/all.css" integrity="sha384-AYmEC3Yw5cVb3ZcuHtOA93w35dYTsvhLPVnYs9eStHfGJvOvKxVfELGroGkvsg+p" crossorigin="anonymous"/>

</head>

<body>

<nav class="navbar navbar-expand-sm bg-dark navbar-dark">
  <!-- Brand/logo -->
  <a class="navbar-brand" href="#"><?php echo $a, $userid ?></a>

  <div class="ml-auto text-white">

      <a href="logout.php" target="_self" class="text-white"><i class="fas fa-sign-out-alt"></i> Logout</a>

     </div>
</nav>





<div class="container-fluid">
  <div class="row content">
    <div class="col-lg-8">



 <form action="geheim.php" method="post">
  <div class="form-group">
    <label for="usr">Anzahl freie Pl&auml;tze:</label>
    <input type="text" name="frei" class="form-control" id="usr" value="<?php echo $frei; ?>">
  </div>
  <div class="form-group">
    <label for="fck">Facebook - Link:</label>
    <input type="text" name="facebook" class="form-control" id="fck" value="<?php echo $facebook; ?>">
  </div>
  <div class="form-group">
    <label for="ins">Instagram - Link:</label>
    <input type="text" name="instagram" class="form-control" id="ins" value="<?php echo $instagram; ?>">
  </div>
  <button type="submit" class="btn btn-primary">Update</button>
</form>

 </div>
 </div>
 </div>
 
 

















</body>
</html>

Ja und wie gesagt das muss nun nicht unbedingt mit PDO realisiert werden,

ich habe das einfach genommen weil ich da ein beispiel hatte und da die verbindung herstellen konnte
 
Zuletzt bearbeitet von einem Moderator:

m.scatello

Erfahrenes Mitglied
wird dann nur der wert "frei" in der datenbank gespeichert.
Dann sieh' dir das mal in Ruhe an:

PHP:
$statement = $pdo->prepare("UPDATE data SET frei = :frei_neu WHERE facebook = :facebook_neu AND instagram = :instagram_neu");

Was wird da neu gesetzt? Kann WHERE facebook = :facebook_neu AND instagram = :instagram_neu wirklich mal zutreffen, wenn die Werte geändet wurden?

Und das
PHP:
// neue Variablen aus Formular
$frei_neu = $_POST["frei"];
$facebook_neu = $_POST["facebook"];
$instagram_neu = $_POST["instagram"];
sollte beim ersten Aufruf des Scriptes Warnings raushauen, weil keine der $_POST-Variablen gesetzt sind.

Außerdem ist deine Reihenfolge falsch. Erst Updaten, falls nötig und dann auslesen.

Und das alles funktioniert nur, wenn du nur einen User in der Datenbank hast, bei zwei oder mehr werden alle Datensätze überschrieben. Und benötigst eine eindeutige Zuweisung, die in der Regel mit einer ID in der Datenbank erzeugt wird.
 

m.scatello

Erfahrenes Mitglied
Ungetestet:
PHP:
<?php
  error_reporting(-1);
  ini_set('display_errors', true);

  session_start();

  if(!isset($_SESSION['userid'])) {
    die('Bitte zuerst <a href="login.php">einloggen</a>');
  }

  //Abfrage der Nutzer ID vom Login
  $userid = $_SESSION['userid'];
 
  if ($userid == 1) {$userid = "Tagesmutti Sandra";}

  if(date("G") < 12) {$a="Guten Morgen ";}
  if(date("G") <= 18 && date("G") >= 12) {$a='Guten Tag ';}
  if(date("G") >= 19) {$a='Guten Abend ';}

  $pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');

  if (isset($_POST["frei"]))
  {
     // neue Variablen aus Formular
     $frei_neu = $_POST["frei"];
     $facebook_neu = $_POST["facebook"];
     $instagram_neu = $_POST["instagram"];
  
     // Update anweisung
     $statement = $pdo->prepare("UPDATE data SET frei = :frei_neu, facebook = :facebook_neu, instagram = :instagram_neu WHERE id = " . $_SESSION['userid']);
  
     $statement->execute(array('frei_neu' => $frei_neu, 'facebook_neu' => $facebook_neu, 'instagram_neu' => $instagram_neu));
  }

  $sql = "SELECT frei, facebook, instagram FROM data WHERE id = " . $_SESSION['userid'];
  // Ausgabe in Variable speichern
  foreach ($pdo->query($sql) as $row) {
     $facebook = $row['facebook'];
     $instagram = $row['instagram'];
     $frei = $row['frei'];
  }
?>
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Erlemäuse Admin</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
  <link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.10.0/css/all.css" integrity="sha384-AYmEC3Yw5cVb3ZcuHtOA93w35dYTsvhLPVnYs9eStHfGJvOvKxVfELGroGkvsg+p" crossorigin="anonymous"/>
</head>
<body>
<nav class="navbar navbar-expand-sm bg-dark navbar-dark">
  <!-- Brand/logo -->
  <a class="navbar-brand" href="#"><?php echo $a, $userid ?></a>
  <div class="ml-auto text-white">
      <a href="logout.php" target="_self" class="text-white"><i class="fas fa-sign-out-alt"></i> Logout</a>
  </div>
</nav>
<div class="container-fluid">
  <div class="row content">
    <div class="col-lg-8">
      <form action="" method="post">
        <div class="form-group">
          <label for="usr">Anzahl freie Plätze:</label>
          <input type="text" name="frei" class="form-control" id="usr" value="<?php echo $frei; ?>">
        </div>
        <div class="form-group">
         <label for="fck">Facebook - Link:</label>
         <input type="text" name="facebook" class="form-control" id="fck" value="<?php echo $facebook; ?>">
        </div>
        <div class="form-group">
         <label for="ins">Instagram - Link:</label>
         <input type="text" name="instagram" class="form-control" id="ins" value="<?php echo $instagram; ?>">
        </div>
        <button type="submit" class="btn btn-primary">Update</button>
      </form>
    </div>
  </div>
 </div>
</body>
</html>
 

klausi89

Erfahrenes Mitglied
hallo hab das gerade mal ausprobiert es werden aber nur fehler ausgegeben weiter nichts

Fatal error: Uncaught PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id' in 'where clause' in /home/sites/site100023911/web/erlemaeuse.de/test1/admin/geheim.php:37 Stack trace: #0 /home/sites/site100023911/web/erlemaeuse.de/test1/admin/geheim.php(37): PDO->query() #1 {main} thrown in /home/sites/site100023911/web/erlemaeuse.de/test1/admin/geheim.php on line 37

achso und es gibt nur den einen user mit der id 1 weiter keinen
 

m.scatello

Erfahrenes Mitglied
Unknown column 'id' in 'where clause'
Was verstehst du daran nicht? Deine Tabelle hat keine Spalte mit dem Namen id. Entweder heißt die Spalte bei dir anders oder die Spalte fehlt, was noch schlimmer wäre. Thema Identifizierung!
achso und es gibt nur den einen user mit der id 1 weiter keinen
Im Moment nicht, aber besser ist, wenn man gleich für den Fall mit mehreren User gewappnet ist.
 

klausi89

Erfahrenes Mitglied
Was verstehst du daran nicht? Deine Tabelle hat keine Spalte mit dem Namen id. Entweder heißt die Spalte bei dir anders oder die Spalte fehlt, was noch schlimmer wäre. Thema Identifizierung!

Im Moment nicht, aber besser ist, wenn man gleich für den Fall mit mehreren User gewappnet ist.
Geiles Ding - hab meine Datenbank nochmal gelöscht uns neu angelegt, alle einträge rein usw.

jetzt funktioniert es einwandfrei und fehlerlos

vielen lieben dank

achso gäbe es da noch die möglichkeit anzeigen zu lassen update erfolgreich oder ähnliches
 

m.scatello

Erfahrenes Mitglied
Ändere
PHP:
$statement->execute(array('frei_neu' => $frei_neu, 'facebook_neu' => $facebook_neu, 'instagram_neu' => $instagram_neu));
in
PHP:
 if ($statement->execute(array('frei_neu' => $frei_neu, 'facebook_neu' => $facebook_neu, 'instagram_neu' => $instagram_neu)))
    $message = "Update erfolgreich ausgeführt";
 else
    $message = "Update nicht erfolgreich ausgeführt";
und
HTML:
<form action="" method="post">
in
PHP:
<?php if (isset ($message)) echo $message; ?>
<form action="" method="post">