MySQL UPDATE
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
befehl
code
date
datenbank
datensatz
eintrag
eintragen
email
ergebnis
fehler
feld
http
kommentar
not
null
ordern
set
tabelle
update
-
Abend,
Ich habe folgendes Script geschrieben, um um mit Hilfe eines Formulars meine Gästebucheinträge zu bearbeiten.
<?php $abfrage = "SELECT name, homepage, mail, kommentar, date FROM gaestebuch ORDER BY date DESC"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { $mail = $row->mail; $name = $row->name; $date = $row->date; $kommentar = $row->kommentar; $homepage = $row->homepage; $email = "$mailus"; echo "<form name=\"gbedit\" method=\"post\" action=\"" . $_SERVER["REQUEST_URI"] . "\">"; echo "<input type='text' name='name' value='$name'>"; echo "<input type='text' name='mail' value='$mail'>"; echo "<input type='text' name='homepage' value='$homepage'>"; echo "<input type='text' name='kommentar' value='$kommentar'>"; echo "<input type='hidden' name='date' value='$date'>"; echo "<input type='submit' name='submit' value='Ändern'>"; echo "</form>"; } if ($_POST) { $name = $_POST["name"]; $homepage = $_POST["homepage"]; $kommentar = $_POST["kommentar"]; $mail = $_POST["mail"]; $date = $_POST["date"]; $eintrag = "UPDATE gaestebuch SET name = '$name', mail = '$mail', homepage = '$homepage', kommentar = '$kommentar' WHERE date = '$date'"; $eintragen = mysql_query($eintrag); } ?>
Dieses Script Updated zwar den gewählten Eintrag, dubliziert ihn allerdings auch. Was hab ich hier denn falsch gemacht?
Grüßle Fabi -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich sehe im Moment keinen Fehler, aber kann dir einen Tipp geben, der dein Problem eventuell löst: Orientiere dich bei Datenbank-Geschichten mit Wiedererkennung nicht an Datum und Uhrzeit, sondern an einer eindeutigen ID. Mit dieser kannst du dann Where-Bedingungen stellen, da sie eindeutig ist. Es ist möglich, dass es 10 Datensätze gibt, die das selbe Datum haben, aber es wird garantiert keine 2 Datensätze mit der selben ID geben.
-
Hmmm... Die besagten Fehler wären nun alle verbessert. Jeder Eintrag hat nun eine 16-stellige ID und "Name" ist jetzt "Username".
Es tut trotzdem nicht . -
Die ID ist ein Wert (Feld) in der Datenbank, der bei normalerweise 1 beginnt und soweit hochgezählt wird, wie notwendig, so dass kein Wert doppelt vorkommt unter ID. Deshalb verstehe ich die 16-stellige ID jetzt nicht bei dir. Aber egal, hauptsache du hast das Feld im phpmyadmin auf "auto_increment" gesetzt.
Nachdem du ja nun einiges ausgebessert hast, kannst du mal den aktuellen Code mit Verbesserungen posten? -
Hm... Was bitte ist "auto_increment"? Sry hab wenig Ahnung von Datenbanken. Ich habs einfach so gemacht, dass
ist.$id = rand(100000,10000000000000000);
-
Da könnte ja theoretisch dennoch die gleiche ID herauskommen, so wie du das machst.
Du musst ein Feld in der Tabelle der Datenbank anlegen. Dieses nennst du meinetwegen "id".
Datentyp sollte dann "integer" sein und dort gibt es dann eine Funktionalität welche sich autoincrement nennt.
Diese macht eigentlich folgendes:
Die id beginnt bei Datensatz 1 mit 1 und wird mit jedem Datensatz um eins erhöht.
Datensatz 2 bekommt also ID 2 und so weiter und so fort.
Damit vermeidet man zweideutige Datensätze.
Zu sehen auf diesem Screenshot beim anlegen einer Tabelle (grün unterlegt)
http://karpfen.lima-city.de/autoincrement.JPG
Beitrag zuletzt geändert: 19.12.2009 21:04:58 von karpfen -
Hmm....
SQL-Befehl:
MySQL meldet:
#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
MySQL mag nicht -
Dieses Feld sollte dann schon der Primary Key sein :)
Kannst du denn mal die Struktur deiner Tabelle hier posten? -
`username` varchar(100) NOT NULL, `homepage` varchar(100) NOT NULL, `mail` varchar(100) NOT NULL, `kommentar` text NOT NULL, `date` timestamp NOT NULL default CURRENT_TIMESTAMP, `id` varchar(100) NOT NULL
So siehts bis jetzt aus... -
Ich hab da mal ne Idee zum Thema doppelter Eintrag:
Du prüfst beim ändern des Eintrages ob es ein $_POST gibt.
Wenn ja, dann wird geändert.
Kann es sein, dass du irgendwo in dem Script auch prüfst, ob es ein $_POST gibt und dann einen Eintrag hinzufügst?
Kann das sein? -
fabian-riedel schrieb:
`username` varchar(100) NOT NULL, `homepage` varchar(100) NOT NULL, `mail` varchar(100) NOT NULL, `kommentar` text NOT NULL, `date` timestamp NOT NULL default CURRENT_TIMESTAMP, `id` varchar(100) NOT NULL
So siehts bis jetzt aus...
Mach aus dem Feld 'id' einen Primary Key und setze es auf auto_increment. Dann sehen wir weiter! -
Das Feld 'ID' ist nun ein Primary Key allerdings meldet MySQL:
Fehler SQL-Befehl: ALTER TABLE `gaestebuch` CHANGE `id` `id` VARCHAR( 100 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL AUTO_INCREMENT MySQL meldet: #1063 - Incorrect column specifier for column 'id'
Was bedeutet das jetzt?
Grüßle Fabi -
Du darfst dieses Feld nicht als varchar machen, sondern bei Datentyp integer nehmen.
-
Oh... Sorry, hab bin wie gesagt Anfänger in PHP und MySQL... Allerdings kommt nun die Nachricht:
Fehler SQL-Befehl: ALTER TABLE `gaestebuch` CHANGE `id` `id` INT( 100 ) NOT NULL AUTO_INCREMENT MySQL meldet: #1062 - Duplicate entry '2147483647' for key 1
-
Das ist, weil nun ein Wert 2147483647 doppelt in deinem Feld "id" vorkommt. Versuch mal alle Datensätze im Feld "id" von 1 bis x hochzunummerieren. Ich hoffe du hast noch nicht so viele Datensätze drin
-
Sieht nun so aus:
<h2>Gästebuch</h2> Ich würde mich sehr über einen Eintrag in mein Gästebuch freuen - auch Lob und Kritik.<br><br> <form name="gaestebuch" method="post" action="http://fabian-riedel.lima-city.de/index.php?url=gaestebuch" onsubmit="return chkFormular()"> <table style="text-align: left;"> <tbody> <tr> <td style="width: 40%; text-align: right;">Name</td> <td style="width: 20%;"></td> <td style="width: 40%;"> <input value="Name" name="username" type="text"></td> </tr> <tr> <td style="text-align: right;">Homepage</td> <td></td> <td> <input value="http://" name="homepage" type="text"> </td> </tr> <tr> <td style="text-align: right;">Email</td> <td></td> <td> <input value="Email" name="mail" type="text"></td> </tr> <tr> <td style="text-align: right;">Kommentar</td> <td></td> <td> <input value="Kommentar" name="kommentar" type="text"> </td> </tr> <tr> <td style="text-align: right;"><input class="button" style="border: none; background-color: #fff; color: #000; padding-right: 0px;" type="reset"> </td> <td style="text-align: center;"> </td> <td> <input value="Eintragen" class="button" type="submit"></td> </tr> </tbody> </table> </form> <br><br> <?php if ($_POST) { $username = $_POST["username"]; $homepage = $_POST["homepage"]; $kommentar = $_POST["kommentar"]; $mail = $_POST["mail"]; $eintrag = "INSERT INTO gaestebuch (username, homepage, mail, kommentar) VALUES ('$username', '$homepage', '$mail', '$kommentar')"; $eintragen = mysql_query($eintrag); } ?> <?php $abfrage = "SELECT username, homepage, mail, kommentar, date FROM gaestebuch ORDER BY date DESC"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { $mailus = $row->mail; $namus = $row->username; $datus = $row->date; $kommentarus = $row->kommentar; $homepagus = $row->homepage; $email = "$mailus"; $default = "http://www.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s=40"; $size = 40; $grav_url = "http://www.gravatar.com/avatar.php?gravatar_id=".md5( strtolower($email) )."&default=".urlencode($default)."&size=".$size; $eintrag = "<div class=\"gb_eintrag\"><div class=\"gbpic\"><img src=\"$grav_url\"></div><div class=\"eintrag\" style=\"background-color: #fff;\"><span class=\"autor\"><a href=\"$homepagus\" title=\"$mailus\" target=\"_blank\">$namus</a> schrieb am $datus:</span><br><div style=\"padding-top: 5px;\">$kommentarus</div></div></div><br>"; echo $eintrag; } ?> <br><br> Ab hier wird nun editiert... <?php $abfrage = "SELECT username, homepage, mail, kommentar, id FROM gaestebuch ORDER BY date DESC"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { $mail = $row->mail; $username = $row->username; $id = $row->id; $kommentar = $row->kommentar; $homepage = $row->homepage; $email = "$mailus"; echo "<form name=\"gbedit\" method=\"post\" action=\"" . $_SERVER["REQUEST_URI"] . "\">"; echo "<input type='text' name='username' value='$username'>"; echo "<input type='text' name='mail' value='$mail'>"; echo "<input type='text' name='homepage' value='$homepage'>"; echo "<input type='text' name='kommentar' value='$kommentar'>"; echo "<input type='hidden' name='id' value='$id'>"; echo "<input type='submit' name='submit' value='Ändern'>"; echo "</form>"; } if ($_POST) { $username = $_POST["username"]; $homepage = $_POST["homepage"]; $kommentar = $_POST["kommentar"]; $mail = $_POST["mail"]; $id = $_POST["id"]; $eintrag = "UPDATE gaestebuch SET username = '$username', mail = '$mail', homepage = '$homepage', kommentar = '$kommentar' WHERE id = '$id'"; $eintragen = mysql_query($eintrag); } ?>
Beitrag zuletzt geändert: 20.12.2009 13:51:36 von fabian-riedel -
Versuchs mal so:
<h2>Gästebuch</h2> Ich würde mich sehr über einen Eintrag in mein Gästebuch freuen - auch Lob und Kritik.<br><br> <form name="gaestebuch" method="post" action="http://fabian-riedel.lima-city.de/index.php?url=gaestebuch" onsubmit="return chkFormular()"> <table style="text-align: left;"> <tbody> <tr> <td style="width: 40%; text-align: right;">Name</td> <td style="width: 20%;"></td> <td style="width: 40%;"> <input value="Name" name="username" type="text"></td> </tr> <tr> <td style="text-align: right;">Homepage</td> <td></td> <td> <input value="http://" name="homepage" type="text"> </td> </tr> <tr> <td style="text-align: right;">Email</td> <td></td> <td> <input value="Email" name="mail" type="text"></td> </tr> <tr> <td style="text-align: right;">Kommentar</td> <td></td> <td> <input value="Kommentar" name="kommentar" type="text"> </td> </tr> <tr> <td style="text-align: right;"><input class="button" style="border: none; background-color: #fff; color: #000; padding-right: 0px;" type="reset"> </td> <td style="text-align: center;"> </td> <td> <input value="Eintragen" class="button" name="eintrag" type="submit"></td> </tr> </tbody> </table> </form> <br><br> <?php if (isset($_POST['eintrag')) { $username = $_POST["username"]; $homepage = $_POST["homepage"]; $kommentar = $_POST["kommentar"]; $mail = $_POST["mail"]; $eintrag = "INSERT INTO gaestebuch (username, homepage, mail, kommentar) VALUES ('$username', '$homepage', '$mail', '$kommentar')"; $eintragen = mysql_query($eintrag); } ?> <?php $abfrage = "SELECT username, homepage, mail, kommentar, date FROM gaestebuch ORDER BY date DESC"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { $mailus = $row->mail; $namus = $row->username; $datus = $row->date; $kommentarus = $row->kommentar; $homepagus = $row->homepage; $email = "$mailus"; $default = "http://www.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s=40"; $size = 40; $grav_url = "http://www.gravatar.com/avatar.php?gravatar_id=".md5( strtolower($email) )."&default=".urlencode($default)."&size=".$size; $eintrag = "<div class=\"gb_eintrag\"><div class=\"gbpic\"><img src=\"$grav_url\"></div><div class=\"eintrag\" style=\"background-color: #fff;\"><span class=\"autor\"><a href=\"$homepagus\" title=\"$mailus\" target=\"_blank\">$namus</a> schrieb am $datus:</span><br><div style=\"padding-top: 5px;\">$kommentarus</div></div></div><br>"; echo $eintrag; } ?> <br><br> Ab hier wird nun editiert... <?php $abfrage = "SELECT username, homepage, mail, kommentar, id FROM gaestebuch ORDER BY date DESC"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { $mail = $row->mail; $username = $row->username; $id = $row->id; $kommentar = $row->kommentar; $homepage = $row->homepage; $email = "$mailus"; echo "<form name=\"gbedit\" method=\"post\" action=\"" . $_SERVER["REQUEST_URI"] . "\">"; echo "<input type='text' name='username' value='$username'>"; echo "<input type='text' name='mail' value='$mail'>"; echo "<input type='text' name='homepage' value='$homepage'>"; echo "<input type='text' name='kommentar' value='$kommentar'>"; echo "<input type='hidden' name='id' value='$id'>"; echo "<input type='submit' name='aendern' value='Ändern'>"; echo "</form>"; } if (isset($_POST['aendern'])) { $username = $_POST["username"]; $homepage = $_POST["homepage"]; $kommentar = $_POST["kommentar"]; $mail = $_POST["mail"]; $id = $_POST["id"]; $eintrag = "UPDATE gaestebuch SET username = '$username', mail = '$mail', homepage = '$homepage', kommentar = '$kommentar' WHERE id = '$id'"; $eintragen = mysql_query($eintrag); } ?>
Problem behoben, deshalb closed!
Beitrag zuletzt geändert: 20.12.2009 14:10:10 von karpfen -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage