PDO "Update" läuft ohne Fehler aber es wird nichts geändert

smokey-joe

Mitglied
Siehe Titel :

Hier der Code der duchläuft aber nichts in der Datenbank ändert.
PHP:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=aquarium', 'mein_db_username', 'mein_db_PW');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$id = (int) $_GET['id'];
if($_GET[name]=="" || $_GET[gattung]=="" || $_GET[geschlecht]=="" )
{
        echo "Name, Gattung und Geschlecht muss ausgefüllt werden";
}
else
{
         $ergebnis = "UPDATE aqua SET name = :$name, gattung = :$gattung, geschlecht = :$geschlecht, WHERE id = :$id";
if($ergebnis)
        {
                echo "Fisch wurde bearbeitet!";
        }
}
?><style type="text/css"> <!-- body {
        background-color: #02679D;
}
a:link {
        color: #FFFFFF;
        text-decoration: none;
}
a:visited {
        text-decoration: none;
        color: #CCCCCC;
}
a:hover {
        text-decoration: underline;
}
a:active {
        text-decoration: none;
        color: #CCCCCC;
}
body,td,th {
        font-size: 14px;
        color: #FFFFFF;
}
--> </style>
<div align="center"><a href="form.php"><strong>Zur&uuml;ck</strong></a></div>

hoffnungsvoll
smokey-joe
 
Hi

PDO wird bei dir nur in den ersten zwei Zeilen verwendet (Verbindungsaufbau und Fehlermodus)

Die SQL-Anweisung hast du zwar als String in PHP, sendest sie aber nie zur DB.
 
achso die Daten kommen von :
edit.php:
PHP:
<?php
        $pdo = new PDO('mysql:host=localhost;dbname=aquarium', 'mein_db_username', 'mein_db_PW');
        $id = (int) $_GET['id'];

function holeFeld($feld, $fnm, $fval)
{
    $pdo      = $GLOBALS['pdo'];
    $sql      = "SELECT $feld FROM aqua WHERE $fnm = '$fval'";
    $ergebnis = $pdo->query($sql);
      while ($row = $ergebnis->fetch(PDO::FETCH_OBJ)) {
        return $row->$feld;
    }
}
?>
<html>
<head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<!-- TemplateBeginEditable name="doctitle" -->
<title>Unbenanntes Dokument</title>
<!--TemplateEndEditable -->
<!-- TemplateBeginEditable name="head" -->
<!-- TemplateEndEditable -->
<style type="text/css">
<!-- body,td,th {
        color: #FFFFFF;
}
body {
        background-color: #02679D;
}
a:link {
        color: #FFFFFF;
        text-decoration: none;
}
a:visited {
        text-decoration: none;
        color: #CCCCCC;
}
a:hover {
        text-decoration: underline;
}
a:active {
        text-decoration: none;
        color: #CCCCCC;
}
--> </style></head>
<body> <form name="form1" method="GET" action="update.php">
  <label>
  Name:
<input name="name" type="text" id="name" value="<?php print holeFeld("name","id",$id); ?>">
  </label>
  <br>
  <label>Gattung:
  <input name="gattung" type="text" id="gattung" value="<?php print holeFeld("gattung","id",$id); ?>">
  </label>
  <br>
  Geschlecht:
  <label>
  <input name="geschlecht" type="text" id="geschlecht" value="<?php print holeFeld("geschlecht","id",$id); ?>">
  </label>
  <br>
  <p>
    <label>
    <input type="submit" name="Submit" value="&auml;ndern">
    </label>
  </p>
  <p>
    <input name="id" type="hidden" id="id" value="<? print $id; ?>">
  </p> </form> <p>&nbsp;</p> </body>
</html>

welches wiederum die Daten von :
form.php erhält:
PHP:
<?php

// "e" wie "escape". Kontextwechsel nach HTML
$e = function ($s) {
    return htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
};
$pdo = new PDO('mysql:host=localhost;dbname=aquarium', 'mein_db_username', 'mein_db_PW');
$sortFields = array('name', 'geschlecht', 'gattung', 'id');
$order = (isset($_GET['order']) && is_string($_GET['order'])) ? $_GET['order'] : '';
if (!in_array($order, $sortFields, true)) {
    $order = 'name';
}
$sql = "
   SELECT   id, name, gattung, geschlecht
   FROM     aqua
   ORDER BY " . $order . " ASC
";
?><!DOCTYPE html>
<htm lang="de">
<head>
  <title>Test</title>
  <meta charset="utf-8">
</head>
<body>
  <p>Bitte tragen sie die erforderlichen Daten ein</p>
  <form action="eingabe.php" method="post">
    <p><input name="name"> Name</p>
    <p><input name="geschlecht"> Geschlecht</p>
    <p><input name="gattung"> Gattung</p>
    <p>
      <input type="submit">
      <input type="reset">
    </p>
  </form>
  <table width="500" border="1" bordercolor="#000000" cellpadding="2" cellspacing="0" class="rahmen" bgcolor="#e1e1e1">
    <tbody>
      <tr>
        <th><a href="form.php?order=id">ID</a></th>
        <th><a href="form.php?order=name">Name</a></th>
        <th><a href="form.php?order=gattung">Gattung</a></th>
        <th><a href="form.php?order=geschlecht">Geschlecht</a></th>
        <th>&nbsp;</th>
        <th>&nbsp;</th>
      </tr>
      <?php foreach ($pdo->query($sql) as $row) : ?>
      <tr>
        <td><?=$e($row['id'])?></td>    
   <td><?=$e($row['name'])?></td>
        <td><?=$e($row['gattung'])?></td>
        <td><?=$e($row['geschlecht'])?></td>
        <td><a href="edit.php?id=<?=$e($row['id'])?>">bearbeiten</a></td>
        <td><a href="delete.php?id=<?=$e($row['id'])?>">löschen</a></td>
      </tr>
      <?php endforeach; ?>
    </tbody>
  </table>
</body>
</html>

Hi

PDO wird bei dir nur in den ersten zwei Zeilen verwendet (Verbindungsaufbau und Fehlermodus)

Die SQL-Anweisung hast du zwar als String in PHP, sendest sie aber nie zur DB.
und wie muss ich das umbauen damit das funktioniert ? Bedenke .... nicht der hellste xd...
 
So funktioniert das aber ebenfalls nicht ...:
PHP:
<?php
//Update.php
$pdo = new PDO('mysql:host=localhost;dbname=aquarium', 'mein_db_username', 'mein_db_PW');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$id = (int) $_GET['id'];
if($_GET[name]=="" || $_GET[gattung]=="" || $_GET[geschlecht]=="" )
{
        echo "Name, Gattung und Geschlecht muss ausgefüllt werden";
}
else
{
$sql = "UPDATE aqua SET name = :name, gattung = :gattung, geschlecht = :geschlecht WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':name', $_POST['$name'], PDO::PARAM_STR);
$stmt->bindParam(':gattung', $_POST['$gattung'], PDO::PARAM_STR);
$stmt->bindParam(':geschlecht', $_POST['$geschlecht'], PDO::PARAM_STR);
// use PARAM_STR although a number
$stmt->bindParam(':id', $_POST['$id'], PDO::PARAM_INT);
$stmt->execute();
if($sql)
        {
                echo "Fisch wurde bearbeitet!";
        }
}
?>

Ich raffs nicht
 
Aktueller code funktioniert ebenfalls nicht :
PHP:
<?php
//Update.php
$pdo = new PDO('mysql:host=localhost;dbname=aquarium', 'mein_db_username', 'mein_db_pw');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$id = (int) $_GET['id'];
if($_GET[name]=="" || $_GET[gattung]=="" || $_GET[geschlecht]=="" )
{
        echo "Name, Gattung und Geschlecht muss ausgefüllt werden";
}
else
{
$sql = "UPDATE aqua SET name = :name, gattung = :gattung, geschlecht = :geschlecht WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':name', $_POST['name'], PDO::PARAM_STR);
$stmt->bindParam(':gattung', $_POST['gattung'], PDO::PARAM_STR);
$stmt->bindParam(':geschlecht', $_POST['geschlecht'], PDO::PARAM_STR);
// use PARAM_STR although a number
$stmt->bindParam(':id', $_POST['id'], PDO::PARAM_INT);
$stmt->execute();
$newId = $pdo->lastInsertId();

if($sql)
        {
                echo "Fisch wurde bearbeitet!";
        }
}
?>
 
Die Erfolgsmeldung "Fisch wurde bearbeitet" hat ein falsches if, sie wird immer ausgegeben.
Wirklich prüfen solltest du nicht den String $sql, sondern was execute() zurückgibt.
Und newId auch.
 

Neue Beiträge

Zurück