PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Doppelt wert speichern



ramon
27-09-2005, 19:27
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">&nbsp;</TD>
<td width="140">&nbsp;</td>
<td width="140">&nbsp;</td>
<td width="140">&nbsp;</td>
<td width="140">&nbsp;</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="&gt;&gt;">

ramon
28-09-2005, 18:56
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 ?

ramon
01-10-2005, 17:30
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?

ramon
02-10-2005, 18:58
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.

ramon
03-10-2005, 11:01
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);

ramon
03-10-2005, 11:53
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

ramon
04-10-2005, 18:25
Hallo,

nett gemeinter Rat.
Ich habe eine neue Datenbank angelegt, mit einer neuen Tabelle.
Der Effekt ist aber der gleiche !

?????? was nun ??????

ClausVB
05-10-2005, 15:28
?????? 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

ramon
05-10-2005, 19:11
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...