ID mit auto_increment verändern

Alles, was MariaDB und MySQL betrifft, kann hier besprochen werden.

ID mit auto_increment verändern

Postby Sarah19 » 21. March 2005 22:48

Hallo,
Habe eine DB mit ein paar Artikeln drin. Wenn ich jetzt einen Artikel falsch einstelle, dann muss ich ihn löschen und neu einstelln.
Habe mir daher folgendes script geschrieben:
Code: Select all
<?php
include("config.php");
extract($_POST);
echo $pid;         echo "<br>";
echo $versandkosten;       echo "<br>";
echo $artikel;      echo "<br>";
echo $unterschied;   echo " mm <br>";
echo $motorrad;      echo "<br>";
echo $typ;         echo "<br>";
echo $preis;         echo "<br>";
echo $name;         echo "<br>";
echo $text;         echo "<br>";




mysql_query("INSERT INTO produkt
                 (pid,versand,artikel,unterschied,motorrad,typ,preis,bild,text)
             VALUES
               ('$pid','$versandkosten','$artikel','$unterschied','$motorrad','$typ','$preis','$name','$text')");
               

   ?>


Aber es klappt nicht.
Ich glaube es hat etwas damit zu tun, dass pid ein auto_increment ist.

Was muss ich an dem Script ändern?
Es werden alle sachen, wenn ich sie per echo ausgebe korrekt angezeigt. Also muss es irgendwo an dem Insert liegen.

Bin für jede Hilfe dankbar,
Sarah
User avatar
Sarah19
 
Posts: 58
Joined: 23. August 2004 17:09

Postby Hanspeter Thöni » 22. March 2005 06:16

Was sagt denn ein
echo mysql_error();

nach dem Insert?

Ich kann nur vermutungen anstellen.
Die ID (pid) ist schon vergeben? Da dieses Feld vermutlich der Primary key ist, kann der Satz nicht eingefügt werden, da er schon existiert.

Sollte dies das Problem sein gibt es zwei möglichkeiten
- Satz löschen
- Satz einfügen

oder
Statt eines Insert ein Update druchführen, also den bestehenden Satz ändern.
Gruss Hanspeter
User avatar
Hanspeter Thöni
 
Posts: 233
Joined: 17. August 2004 10:29
Location: Schweiz

Postby H0MER » 22. March 2005 10:03

hi .. .wenn dein feld pid auto_increment ist, heisst das ja, dass der index automatisch hochgezählt wird.

lass doch einfach die $pid in deinem insert statement weg und versuche es so einmal.
Code: Select all
mysql_query("INSERT INTO produkt
                 (versand,artikel,unterschied,motorrad,typ,preis,bild,text)
             VALUES
               ('$versandkosten','$artikel','$unterschied','$motorrad','$typ','$preis','$name','$text')");


deine db sollte dann automatische eine $pid für den datensatz den du einfügen willst generieren.

mfg
H0MER
H0MER
 
Posts: 53
Joined: 11. June 2003 17:30

Postby Hanspeter Thöni » 22. March 2005 10:13

H0MER wrote:lass doch einfach die $pid in deinem insert statement weg und versuche es so einmal.


Richtig, aber da die Urspüngliche Anfrage auf Löschen und neu einstellen lautetet, hast du mit dieser Methode aber den alten Datensatz auch noch auf der Datenbank, da er nicht gelöscht wird.
Gruss Hanspeter
User avatar
Hanspeter Thöni
 
Posts: 233
Joined: 17. August 2004 10:29
Location: Schweiz

Postby H0MER » 22. March 2005 13:28

ach so .. .dann habe ich zu schnell gelesen ... ;)
dann nimm nicht insert sondern update

Code: Select all
update produkt
   set versand ='$versandkosten', artikel='$artikel', unterschied='$unterschied', motorrad='$motorrad', typ='$typ', preis='$preis', bild='$name', text='$text',
        WHERE pid='$pid'


wichtig ist nur das der ausdruck vorher auf nicht wichtige daten angewendet wird, da wenn mit der where bedingung was schief geht alle datensätze mit den neuen werten überschrieben werden!

mfg
H0MER
H0MER
 
Posts: 53
Joined: 11. June 2003 17:30

Postby Sarah19 » 22. March 2005 13:52

Ihr habt richtig getippt, sorry dass ich es nicht richtig gesagt habe: pid ist die auto_increment.
Und es wird einmal neu eingefügt, mit einem anderen Script. Jetzt will ich aber, dass man es verändern kann, mit der gleichen pid. Das mit update sieht gut aus. weiss aber nicht, wie der Befehl auzusehen hat.
Was muss vor dem
Code: Select all
update produkt
   set versand ='$versandkosten', artikel='$artikel', unterschied='$unterschied', motorrad='$motorrad', typ='$typ', preis='$preis', bild='$name', text='$text',
        WHERE pid='$pid'

stehen?

Ich will da nicht unbedingt etwas falsch machen.
Werde es zuerst auf meinem PC testen bevor ich es in die eigentlich Seite einbinden werde.
User avatar
Sarah19
 
Posts: 58
Joined: 23. August 2004 17:09

Postby Hanspeter Thöni » 22. March 2005 14:07

Sarah19 wrote:Was muss vor dem Code stehen?



Na was wohl.... 8)

Code: Select all
mysql_query("update produkt
   set versand ='$versandkosten', artikel='$artikel', unterschied='$unterschied', motorrad='$motorrad', typ='$typ', preis='$preis', bild='$name', text='$text',
        WHERE pid='$pid' ");
 

Gruss Hanspeter
User avatar
Hanspeter Thöni
 
Posts: 233
Joined: 17. August 2004 10:29
Location: Schweiz

Postby Sarah19 » 22. March 2005 15:15

Cool, das ist ja einfach :shock:

Ich kann es doch aber auch so machen oder:
Code: Select all
mysql_query("UPDATE produkt
                 (versand,artikel,unterschied,motorrad,typ,preis,bild,text)
             VALUES
               ('$versandkosten','$artikel','$unterschied','$motorrad','$typ','$preis','$name','$text')");
User avatar
Sarah19
 
Posts: 58
Joined: 23. August 2004 17:09

Postby Stefan » 22. March 2005 15:28

Servus Leute,

als nützlich hat sich in so einem Fall auch "REPLACE" bewährt, da für Erstbesatz und Korrektur nur ein Statement notwendig ist.

http://dev.mysql.com/doc/mysql/de/replace.html

ciao, Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby Sarah19 » 22. March 2005 16:15

Code: Select all
<?php
error_reporting(E_ALL);
include("config.php");
extract($_POST);
echo $pid;         echo "<br>";
echo $versandkosten;       echo "<br>";
echo $artikel;      echo "<br>";
echo $unterschied;   echo " mm <br>";
echo $motorrad;      echo "<br>";
echo $typ;         echo "<br>";
echo $preis;         echo "<br>";
echo $name;         echo "<br>";
echo $text;         echo "<br>";




mysql_query("UPDATE produkt
                 (pid,versand,artikel,unterschied,motorrad,typ,preis,bild,text)
             VALUES
               ('$pid','$versandkosten','$artikel','$unterschied','$motorrad','$typ','$preis','$name','$text')");
               

   ?>
   
<html>
<head>
</head>
<body>
<form><input type="button" value="Artikel Angucken" onClick="window.location.href='tabellenbearbeitung.php'"></form>
<form><input type="button" value="Neuen Artikel Einf&uuml;gen" onClick="window.location.href='eintragen.htm'"></form>
</body>
</html>

Ich habe das Script jetzt so geaendert. Es wird keine Fehlermeldung mehr ausgegeben, alle Felder werden korrekt ausgegeben und das neue angezeigt, aber nicht in der Tabelle geändert. Was ist denn Falsch daran?
User avatar
Sarah19
 
Posts: 58
Joined: 23. August 2004 17:09

Es klappt

Postby Sarah19 » 22. March 2005 17:36

mit REPLACE haut es hin.
Danke.
Hier nochmal zum nachlesen, damit andere auch was lernen können:
Code: Select all
<?php
error_reporting(E_ALL);
include("config.php");
extract($_POST);
echo $pid;         echo "<br>";
echo $versandkosten;       echo "<br>";
echo $artikel;      echo "<br>";
echo $unterschied;   echo " mm <br>";
echo $motorrad;      echo "<br>";
echo $typ;         echo "<br>";
echo $preis;         echo "<br>";
echo $name;         echo "<br>";
echo $text;         echo "<br>";




mysql_query("REPLACE produkt
                 (pid,versand,artikel,unterschied,motorrad,typ,preis,bild,text)
             VALUES
               ('$pid','$versandkosten','$artikel','$unterschied','$motorrad','$typ','$preis','$name','$text')");
               

   ?>
   
<html>
<head>
</head>
<body>
<form><input type="button" value="Artikel Angucken" onClick="window.location.href='tabellenbearbeitung.php'"></form>
<form><input type="button" value="Neuen Artikel Einf&uuml;gen" onClick="window.location.href='eintragen.htm'"></form>
</body>
</html>
User avatar
Sarah19
 
Posts: 58
Joined: 23. August 2004 17:09

Allgemein zum Verständnis...

Postby guybrush82 » 03. March 2006 08:48

Frage:

Ist es erlaubt, werte in ein auto_increment feld selbst einzutragen, also die id selbst festzulegen?

Ich kenne es vom MSSQL server, daß autowert felder nicht bearbeitet werden dürfen, da der server alleine sich um diese aufgabe zu kümmern hat.

In MySQL ist das aber nicht der fall, da kann ich die Bsp. ID von "2" auf "6" und so weiter ändern, wie ich will !!!

Gibt es ne möglichkeit, Mysql beizubringen, daß es sich selbst vor veränderung der auto_increment spalte schützt?
Wie nennt man nen Programmierer auf dem Nordpol? -> ASCIIMO !!!
User avatar
guybrush82
 
Posts: 28
Joined: 02. December 2003 13:46
Location: Erfurt


Return to MariaDB - MySQL

Who is online

Users browsing this forum: No registered users and 41 guests