Archiv verlassen und diese Seite im Standarddesign anzeigen : Doppelt wert speichern
Hallo,
ich habe einen kleinen script im php geschrieben, bei dem ein Ausdruck in eine Datenbank geschrieben wird.
Wenn ich den "Submit"-Knopf drücke, bekomme ich immer den Ausdruck 2x ( zwei mal) in dei Datenbank gechrieben.
Kann jemand helfen ?
[PHP]<?php
// Datenbank Identifikation
$mysqlhost = "router";
$mysqluser = "ich";
$mysqlpasswd ="dochich";
$mysqldb = "testfotos";
$link = @mysql_connect($mysqlhost, $mysqluser, $mysqlpasswd);
if ($link == FALSE) {
echo "<p><b> Kack </b></p>\n";
exit();
}
mysql_select_db($mysqldb);
?>
<body background="_pics/marble4.gif">
<table align="left" border="2">
<tbody>
<tr>
<TD width="140"> </TD>
<td width="140"> </td>
<td width="140"> </td>
<td width="140"> </td>
<td width="140"> </td>
</tr>
<form action="index.php" method="GET"><tr>"
<tr>";
<TD colspan="5" align="center" valign="top"><input type="Submit" name="OK" value=">>"></td>
</tr>
// </form>
<?php
// Datenbank mit Verzeichnisnamen füllen
if (isset($_GET['OK'])) {
mysql_query("INSERT INTO verzeichnis (name_verz) VALUES ('dummer August')");}
?>
<tr>
</tr>
</tbody>
</table>
</body>
BLUESCREEN3D
27-09-2005, 22:13
ich habe einen kleinen script im php geschrieben, bei dem ein Ausdruck in eine Datenbank geschrieben wird.
Wenn ich den "Submit"-Knopf drücke, bekomme ich immer den Ausdruck 2x ( zwei mal) in dei Datenbank gechrieben.
Wenn ich mir das Script so angucke dürfte das nicht passieren.
<input type="Submit" name="OK" value=">>">
Das solltest du erstmal ändern in
<input type="Submit" name="OK" value=">>">
Hallo,
an der Stelle hängt es nicht.
<input type="Submit" name="OK" value=">>">
habe ich schon mit :
<input type="Submit" name="OK" value="JA">
probiert, aber ohne Erfolg.
Ich hätte eher vermutet, daß im Teil
mysql_query("INSERT INTO verzeichnis (name_verz) VALUES ('dummer August')");}
etwas schief geht.
In der Tabelle gibt es 3 Spalten :
ID =smallint(6)-Autoincrement,
name_verz = varchar(255) und
link_verz=varchar(255).
Ich erzeuge nun neue Zeilen, in denen der Autowert automatisch gesetzt wird, und der link_verz als "NULL" eingetragen wird.
kann der doppelte Eintrag daher kommen ?
Hallo,
es liegt tatsächlich entweder an der Datenbank, oder den Einstellungen bei Mysql, ich habe einen neuen script gebastelt, der nur noch enthält :
$mysqlhost = "router";
$mysqldb = "testfotos";
$mysqluser = "ich";
$mysqlpasswd ="jaich";
$link = @mysql_connect($mysqlhost, $mysqluser, $mysqlpasswd);
mysql_select_db($mysqldb);
mysql_query("INSERT INTO verzeichnis (ID_verz, name_verz, link_verz) VALUES ('', 'dummer August', 'http://')");
un schon hier wird der "dumme August" zweimal eingetragen.
die Mysql-version ist 4.0.24
weiß noch jemand rat ?
BLUESCREEN3D
01-10-2005, 23:31
an der Stelle hängt es nicht.
Du solltest es trotzdem ändern, weil das sonst AFAIK kein gültiges HTML ist.
Ich erzeuge nun neue Zeilen, in denen der Autowert automatisch gesetzt wird, und der link_verz als "NULL" eingetragen wird.
kann der doppelte Eintrag daher kommen ?
Nein.
es liegt tatsächlich entweder an der Datenbank, oder den Einstellungen bei Mysql, ich habe einen neuen script gebastelt, der nur noch enthält: (...)
un schon hier wird der "dumme August" zweimal eingetragen.
Das ist wirklich komisch. Damit es ganz eindeutig ist könntest du folgendes probieren:
1. Vor dem INSERT noch ein "TRUNCATE TABLE `verzeichnis`" (also den Tabelleninhalt vom Script löschen lassen)
2. Nach dem INSERT direkt die Anzahl der Zeilen mit "SELECT COUNT(*) FROM `verzeichnis`" auslesen und anzeigen - das Ergebnis dann hier posten.
Was mir als letzte Möglichkeit noch einfiele: Sind vllt. irgendwelche Trigger definiert, die das doppelte Schreiben übernehmen?
Hallo,
habe ich gemacht.
der Script sieht jetzt so aus :
$mysqlhost = "router";
$mysqldb = "testfotos";
$mysqluser = "ich";
$mysqlpasswd ="jaich";
$link = @mysql_connect($mysqlhost, $mysqluser, $mysqlpasswd);
mysql_select_db($mysqldb);
mysql_query("TRUNCATE TABLE `verzeichnis`");
mysql_query("INSERT INTO verzeichnis (ID_verz, name_verz, link_verz) VALUES ('', 'dummer August', 'http://')");
$result = mysql_query("SELECT * FROM `verzeichnis`");
echo "done";
echo "Anzahl = ".mysql_num_rows($result);
Und das Ergebnis ist genau wie erwartet. Nämlich Anzahl = 1 !
Das ist schön.
Wenn ich das "TRUNCATE TABLE " auskommentiere und den Script aufrufe, ist
"Anzahl = 3".
Ich kann ja jetzt nicht immer die komplette Tabelle löschen !?
BLUESCREEN3D
02-10-2005, 21:57
Wenn ich das "TRUNCATE TABLE " auskommentiere und den Script aufrufe, ist
"Anzahl = 3".
Ich kann ja jetzt nicht immer die komplette Tabelle löschen !?
Ne, wenn du das auskommentierst, dann müsste sich die Anzahl mit jedem Seitenaufruf um eins erhöhen - überprüf das mal, indem du die Seite mehrmals aufrufst.
Hallo,
schon gemacht.
Die Reihe ist :
1,2,4,6,8,...
das bedeutet, nach dem Löschen fügt er einen Datensatz in die Tabelle, wenn etwas in der Tabelle drin ist, dann fügt er zwei identische Datensätze mit unterschiedlichen IDs (autoincrement) ein.
Ich bin noch einen Schritt weiter gegangen und füge im Script in einem Aufruf 3 unterschiedliche Datensätze ein.
die Reihe ist dann 3,6,12,18,...
interessanter Weise stehen nicht die gleichen Datensätze untereinander, sondern immer 1,2,3 - 1,2,3 - 1,2,3 - 1,2,3 nicht
der Script dazu :
$link = @mysql_connect($mysqlhost, $mysqluser, $mysqlpasswd);
mysql_select_db($mysqldb);
//mysql_query("TRUNCATE TABLE `verzeichnis`");
mysql_query("INSERT INTO verzeichnis (ID_verz, name_verz, link_verz) VALUES ('', 'dummer August', 'http://')");
mysql_query("INSERT INTO verzeichnis (ID_verz, name_verz, link_verz) VALUES ('', 'schwarzer Peter', 'http://')");
mysql_query("INSERT INTO verzeichnis (ID_verz, name_verz, link_verz) VALUES ('', 'gestiefelter Kater', 'http://')");
$result = mysql_query("SELECT * FROM `verzeichnis`");
echo "done";
echo "Anzahl = ".mysql_num_rows($result);
Hallo,
langsam wird mir das ganze ziehmlich komisch.
Ich habe jetzt mal nach jedem Auftruf der Seite die Daten in phpmyadmin nachgeschaut.
dort sieht es ganz anders aus.
Er schreibt beim Löschen und Einfügen genau einen Datensatz in die Datenbank.
Das ist in phpmyadmin und auf der Webseite (php) gleich.
Beim zweiten mal Einfügen zeigt er in phpmyadmin 3 Datensätze (1,2 u.3) , auf der Webseite (php) aber nur 2 (1 u. 2).
Beim 3. mal Einfügen zeigt er in phpmyadmin 5 Datensätze (1,2,3,4 u.5), auf der Webseite nur 4 (1,2,3 u, 4).
Wenn ich den auf der Webseite nicht angezeigten Datensatz (5) lösche und die Webseite wieder aufrufe, dann zeigt er auf der Wenseite 5 Datensätze (1,2,3,4 u. 6)
in phpmyadmin 7 Datensätze (1,2,3,4,6 u. 7).
In Klammern stehen die autoincrement IDs, die ich mit den Werten auslese.
Das habe ich mit dem Zusatz :
while(list($id,$name,$link) = mysql_fetch_row($result)){
echo "ID = ".$id." - Text = ".$name." - Link = ".$link."<br>\n";}
gemacht.
Weißt Du noch Rat ?
BLUESCREEN3D
04-10-2005, 04:44
Existiert das Problem eigentlich auch bei anderen Tabellen in der Datenbank?
Weißt Du noch Rat ?
Ne, da ist es langsam an der Zeit, diese komische Tabelle einfach mal zu löschen und neu zu erstellen :D
Hallo,
nett gemeinter Rat.
Ich habe eine neue Datenbank angelegt, mit einer neuen Tabelle.
Der Effekt ist aber der gleiche !
?????? was nun ??????
?????? was nun ??????
Hast Du die Möglichkeit das Skript an mehreren PC's zu testen? Ein Kunde von mir hatte den Effekt bei einer meiner Applikationen. Er konnte ihn aber nur an 2 von 10 PCs reproduzieren (ich überhaupt nicht).
Wir haben nach langem Hin und Her festgestellt, dass seine Maus
- entweder über den "Eingabehilfen-Assistent"
- oder über die Doppel-Klick Geschwindigkeit
so eingestellt war, dass ein Einfach-Klick in einen Doppelklick umgewandelt wurde.
Was passiert, wenn Du ganz schnell hintereinander 5x mal auf den Mausknopf drückst? Wird der DB-Eintrag, dann 3, 4 oder 5 Mal eingetragen?
Gruß
Claus
Hallo,
Du bist super gut drauf !
Das Problem scheint wirklich bei den Mauseinstellungen zu liegen.
Ich danke euch beiden für die Unterstützung !
michael.sprick
05-10-2005, 19:25
Evtl. kannst Du das Problem mit ein klein wenig Javascript umgehen...
<input type="submit" value="Daten senden" onclick="this.value='Daten werden gesendet'; this.disabled='true';">
Ich hab das allerdings nur im Mozilla getestet... keine Ahnung, ob der IE dann evtl. die Daten nicht mehr sendet...
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.