Hi,
ich versuche auf einer PHP-Seite die Möglichkeit zu implementieren, Datenbankeinträge zu ändern.
Ich habe die beiden MySQL-Tabellen:
Dabei ist jedem Autor genau ein Bild zugeordnet.
Nun will es ermöglich, den Namen eines Autoren und zusätzlich sein Bild zu ändern.
Das entsprechende Formular:
Nun soll man getrennt den Namen und das Bild eingeben können. Das heißt, wenn ich nur den Namen eintrage, wird auch nur der Name eingetragen und wenn ich nur eine Bilddatei auswähle, soll auch nur das Bild geändert werden. Das mit dem Namen klappt auch wunderbar. Jedoch habe ich Schwierigkeiten beim Bild.
Hier mein Code der aendern_autor.php:
Dabei wird erst ein neuer Datenbanksatz eingefügt und anschließend geprüft welcher Eintrag der letzte ist (mit MAX(id)). Diese Abfrage scheint irgendwie nicht ganz hinzuhauen. Die letzte ID wird dann in der Variablen $last_id gespeichert.
Anschließend wird erst die "zu ändernde" Zeile gelöscht und die letzte kriegt die ID der "zu ändernden" Zeile.
Ist ein bißchen kompliziert, sollte aber hinhauen von der Logik. Jedoch hapert es daran, dass ich die $last_id nicht richtig ausgelesen kriege.
Wer kennt die richtige Methode???
Gruss
ich versuche auf einer PHP-Seite die Möglichkeit zu implementieren, Datenbankeinträge zu ändern.
Ich habe die beiden MySQL-Tabellen:
Code:
CREATE TABLE autor (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
fk_bild INTEGER REFERENCES images(id)
);
CREATE TABLE IF NOT EXISTS images(
id INTEGER PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
type VARCHAR(100) NOT NULL,
image LONGBLOB NOT NULL
);
Dabei ist jedem Autor genau ein Bild zugeordnet.
Nun will es ermöglich, den Namen eines Autoren und zusätzlich sein Bild zu ändern.
Das entsprechende Formular:
PHP:
<form action="aendern_autor.php?autor_id=<? echo "$autor_id";?>" method="post" enctype="multipart/form-data" name="upload">
<input type="hidden" name="MAX_FILE_SIZE" value="50000">
Name:</br>
<input type="text" name="name" value="">
</br></br>
Bild: </br>
<input type="file" size="30" name="datei" >
</br></br>
<input type="submit" name="submit" value="hinzu">
</form>
Nun soll man getrennt den Namen und das Bild eingeben können. Das heißt, wenn ich nur den Namen eintrage, wird auch nur der Name eingetragen und wenn ich nur eine Bilddatei auswähle, soll auch nur das Bild geändert werden. Das mit dem Namen klappt auch wunderbar. Jedoch habe ich Schwierigkeiten beim Bild.
Hier mein Code der aendern_autor.php:
PHP:
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8">
<link type="text/css" rel="stylesheet" href="style.css" />
<title>Autor eintragen</title>
</head>
<body>
<div id= "header">
<h2>WebForum</h2>
</div>
<div id="standard">
<br>
<? include 'db_anmelde.php';
$autor_id = $_REQUEST['autor_id'];
$name = $_FILES['datei']['name'];
$size = $_FILES['datei']['size'];
$mime = $_FILES['datei']['type'];
$file_name = $_FILES['datei']['tmp_name'];
if ($name !=''){
$sql = "INSERT INTO images (name, type, image ) VALUES(?,?,?);";
$file = fopen($_FILES['datei']['tmp_name'], "rb" );
$q = $dbh->prepare($sql);
if( $q ) {
$q->bindParam(1, $name);
$q->bindParam(2, $mime);
$q->bindParam(3, $file, PDO::PARAM_LOB);
$q->execute();
}
}
if ( $_POST[name] != ''){
$sql= "UPDATE autor SET name = '$_POST[name]' WHERE id = '$autor_id';";
$autor_neu = $dbh->exec($sql);
}
if(is_uploaded_file($_FILES['datei']['tmp_name'])){
$stmt = $dbh->query('SELECT MAX(id) FROM images;');
if($stmt) {
while( $row = $stmt->fetch(PDO::FETCH_OBJ)) {
$last_id = $row->MAX(id);
echo $last_id;
}
}
$stmt = $dbh->query("DELETE FROM images WHERE id = '$autor_id';");
$stmt = $dbh->query("UPDATE images SET id = '$autor_id' WHERE id = '$last_id';");
}
?>
<br><br><br>
<a href="index.php">Startseite</a><br>
</div>
</body>
</html>
Dabei wird erst ein neuer Datenbanksatz eingefügt und anschließend geprüft welcher Eintrag der letzte ist (mit MAX(id)). Diese Abfrage scheint irgendwie nicht ganz hinzuhauen. Die letzte ID wird dann in der Variablen $last_id gespeichert.
Anschließend wird erst die "zu ändernde" Zeile gelöscht und die letzte kriegt die ID der "zu ändernden" Zeile.
Ist ein bißchen kompliziert, sollte aber hinhauen von der Logik. Jedoch hapert es daran, dass ich die $last_id nicht richtig ausgelesen kriege.
Wer kennt die richtige Methode???
Gruss