Daten aus Mysql Datenbank holen und bearbeiten ---Fehler

a) mysql_fetch_object gehört auch noch angepasst
b) Irgendwo scheinst du <?php vergessen zu haben
c) Bitte über SQL-Injections bzw. PreparedStatements informieren
ZU a) und wie mach ich das?
Zu b) ganz zu Anfang hatte ich nur "<? " war es das? Jetzt steht zumindest gleich bei Aufruf "Seite funktioniert nicht"
Zu c) ich erzähl dir gleich auch mal was über Zugkraft bei Schweißnähten und festen Verbindungen xd
 
soderle,
habs jetzt ein wenig geändert mysql_fetch_object angepasst und eine fehlende "}" hinzugefügt,
jetzt habe ich folgendes Problem:
PHP:
 function holeFeld($feld, $fnm, $fval)
        {
        $sql = "SELECT $feld FROM aqua WHERE $fnm='$fval'";
        $ergebnis= ($pdo->query ($sql));
                while($row = $ergebnis->fetch(PDO::FETCH_OBJ))
                {return $row->$feld;
}
}
die function scheint nicht zu funktionieren denn ich erhalte nun dieses hier :
Unbenannt.JPG
 
Schreib mal <?php print oder (äquivalent) <?= statt <? print. (Auch ganz oben in edit.php <? durch <?php ersetzen.) Vermutlich sind bei dir short open tags nicht aktiviert.

- http://php.net/manual/en/ini.core.php#ini.short-open-tag (Könntest du via <?php var_dump(ini_get('short_open_tag')); ?> auch abfragen und gegebenenfalls auch in der Konfiguration aktivieren, aber es ist allgemein sinnvoller, einfach auf <? zu verzichten und nur <?php und <?= zu nutzen.
 
hier nochmal der gesamte code incl. aller Änderungen:
PHP:
<?php
        $pdo = new PDO('mysql:host=localhost;dbname=aquarium', 'Mein_DB_Username', 'mein_DB_PW');
        function holeFeld ($feld, $fnm, $fval)
        {
        $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>
Das ergibt lediglich ein :
Unbenannt.JPG
mehr nicht ...
 
Lass dir mal bitte den generierten HTML-Quellcode dazu anzeigen und poste ihn hier. (Rechtsklick in die Seite → Quelltext anzeigen)
 
HTML:
<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="
 
Wenn ich auf der form.php über die generierten links gehe, ist jederlink gleich o_O
Liegt es daran das er die Daten nicht richtig übermittelt ?

Code:
http://meineip/db/edit.php?id=
 
Ich sehe einen Fehler, aber dennoch als Tipp:

- http://php-de.github.io/jumpto/faq/#debugging

$pdo ist in holeFeld() nicht definiert. Das ist jetzt nicht die feine Art, aber, um es überhaupt erst mal ans Laufen zu bekommen, ändere mal den Code oben in der Datei in:

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;
    }
}

(Ganz unten hast du eine Ersetzung <? zu <?php vergessen.)

Liegt es daran das er die Daten nicht richtig übermittelt ?

Ist zumindest nicht von Vorteil, wenn $id nicht definiert ist.

Ich habe dir mal form.php ein wenig überarbeitet:

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', 'db_benutzername', '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>

Ist alles nicht wirklich doll, aber vielleicht läuft es so immerhin zumindest mal.
 

Neue Beiträge

Zurück