[MYsql] Database in de war *

Pagina: 1
Acties:

  • IJnte
  • Registratie: Juni 2003
  • Laatst online: 19-05 12:01
Ik heb voor ons project dat wij op school doen een online urenlijst gemaakt met php em mysql. Ik zat net even te kijken in de tabel, en ik zag dat er vanalles door de war was geraakt. Ik zal eerst even de structuur van de tabel laten zien:

code:
1
"ID"  "Naam"  "Datum"  "Begin_tijd"  "Eind_tijd"  "Totaal_uur"  "Taak"  "Opmerking"


ID is mijn primairy key en is auto_increment, wat dus zou moeten inhouden dat hij bij elke invoer 1 omhoog gaat.

Wat ik nu heb gezien is het volgende:

Afbeeldingslocatie: http://home.wanadoo.nl/mhijong19/pictures/mysqlprob.jpg

Hij gooit de ID's door elkaar. Ik heb ook al gezien dat hij ID's gaat overschrijven, met dus een compleet andere tekst.
Hieronder staat nogmaals een x de indeling:

Afbeeldingslocatie: http://home.wanadoo.nl/mhijong19/pictures/mysqlprob1.jpg

Ik voer de data als volgt in:

code:
1
2
3
4
5
6
// Zet de waardes van het formulier in de Mysql database.
$sql = "INSERT INTO urenlijst (naam, datum, begin_tijd, eind_tijd, totaal_uur, taak, opmerking) 
         VALUES ('$naam', '$datum', '$totaalbegin','$totaaleinddb', '$verschiltijd', '$Taaktotaal', '$opmerking')"; 
       
// Verwerkt de data in de database.
mysql_query($sql) or die("Er is een fout opgetreden");


Weet iemand wat er fout gaat?

offtopic:
Sorry voor de layout f*ck-up. Ik krijg hem even niet beter..

Exploring the world by bicycle! cyclingsilk.wordpress.com


Verwijderd

Kijk eens naar je datumsortering: zo te zien bestonden de records met ID 1 en 2 al eerder dan die met 19 en 20.

Dat hoeft verder dus geen probleem te vormen, of heb je er echt hard bewijs voor dat er ID's overschreven worden, want dat moet niet kunnen.

(trek je overigens niets aan van de volgorde van de ID's, het unieke karakter is belangrijk, niet de volgorde :) )

[ Voor 58% gewijzigd door Verwijderd op 28-08-2004 00:05 ]


  • IJnte
  • Registratie: Juni 2003
  • Laatst online: 19-05 12:01
Bedankt voor je reactie. Ik heb die laatste 2 records even toegevoegd omdat deze overschreven waren :( . ID 1 en 2 zijn dus net ingevoegd, alleen heb ik de ID en de datum moeten aanpassen omdat in 1x ID 31 en 32 deze 2 hebben overschreven.

Het leek er gewoon op alsof er ergens een soort counter vol zat, en dacht: Kom laten we weer bovenaan de tabel de data erin zetten.

Kan ik trouwens nog die ID's goed sorteren?

Ik heb dus echt last van die ID volgens mij? heb ik misschien hem niet goed gedeclareerd?

Exploring the world by bicycle! cyclingsilk.wordpress.com


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23:06

Creepy

Tactical Espionage Splatterer

Last van het ID? Het ding is een Primary Key en auto_increment. Ik zie niet in hoe je hier last van kan hebben. Ook is de volgorde van de key's niet belangrijk, zolang ze maar uniek zijn. En het lijkt me heel erg sterk dat je met een INSERT query data hebt overschreven.

Als je specifiek de records in een bepaalde vorgorde wilt hebben dan gebruik je een ORDER BY.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • InZane
  • Registratie: Oktober 2000
  • Laatst online: 00:26
Auto Increment en Primary Key.
Knap als je dat is gelukt met die query. Kan simpelweg niet.

spuitelf :(

[ Voor 13% gewijzigd door InZane op 28-08-2004 00:27 ]


Verwijderd

Zijn er geen andere query's (update) diue wellicht roet in het eten gooien? Of een volledig corrupte db, maar dat lijkt me sterk.

  • IJnte
  • Registratie: Juni 2003
  • Laatst online: 19-05 12:01
Ik gebruik alleen bij de invoer Insert en Select. Meer niet. Bij het verwijderen gebruik ik wel Delete.

Waaraan ik zit te denken is dat het fout gaat bij het verwijderen van een ID. Als een persoon een fout gemaakt heeft, kan deze de betreffende ID wissen. Dit gebeurt door een simpel form waarin je het ID kan intypen wat verwijdert moet worden, en deze wordt dan uit de tabel gehaald.

Als ik vervolgens een nieuwe record toevoeg, gaat het volgens mij fout. Ik denk dat Mysql een gat ziet in de ID's en deze probeert op te vullen?? Kan dit?

Ik heb het nog niet zo weten te maken dat als iemand een ID verwijdert, de ID kolom automatisch gedropt wordt, en vervolgens weer aangemaakt wordt. Dit zou handig kunnen zijn om de ID's op een goede volgorde te zetten.

Iemand nog ideeen hoe het fout heeft kunnen gaan en hoe ik het kan voorkomen?

Edit:

Ik heb even kort het probleem gemaakt. Het ziet er zo uit:
Afbeeldingslocatie: http://home.wanadoo.nl/mhijong19/pictures/mysqlprob2.JPG

Wat heb ik gedaan:
Eerst een entry ingevult, die ID 1 kreeg. Daarna een entry met ID 2 eraan toegevoegd. Vervolgens 1 verwijdert, en daarna weer een 3e entry toegevoegd(kreeg automatisch ID 3). Daarna een 4e, en 5e entry toegevoegd. Het resultaat staat hierboven. De hele kolom is in de war???? 8)7

[ Voor 27% gewijzigd door IJnte op 28-08-2004 01:02 . Reden: probleemomschrijven aangepast ]

Exploring the world by bicycle! cyclingsilk.wordpress.com


  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
IJnte schreef op 28 augustus 2004 @ 00:39:
Als ik vervolgens een nieuwe record toevoeg, gaat het volgens mij fout. Ik denk dat Mysql een gat ziet in de ID's en deze probeert op te vullen?? Kan dit?
Ja, in theorie.
Volgens mij heb jij een verkeerd idee van auto increment en primary key.
Ga er niet vanuit dat de keys netjes opeenvolgend zijn, dat is niet de bedoeling van een (primary) key.
En ga er ook niet vanuit dat een select je records in een bepaalde volgorde ophaald, tenzij je expliciet order by gebruikt.

[ Voor 13% gewijzigd door Olaf van der Spek op 28-08-2004 13:48 ]


  • chem
  • Registratie: Oktober 2000
  • Laatst online: 21-05 08:48

chem

Reist de wereld rond

Waarom heb je in vredesnaam een int(255) :?

Een int(10) unsigned zal ook voldoen.

Verder geldt wat Olaf zegt: een database garandeert nooit de volgorde van de output, tenzij je dat expliciet opgeeft.

MySQL vult geen oude gaten op.

Klaar voor een nieuwe uitdaging.


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
chem schreef op 28 augustus 2004 @ 14:03:
Waarom heb je in vredesnaam een int(255) :?

Een int(10) unsigned zal ook voldoen.

...
MySQL vult geen oude gaten op.
Doet hij dit ook niet als de integers op zijn???
* Gomez12 dacht altijd dat als hij geen integers meer had ( dus bv bij int(2) ) dat hij dan na 99 weer bij 0 zou beginnen. )Wat gebeurt er anders als de getallen op zijn???

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01-2025
Gomez12 schreef op 28 augustus 2004 @ 14:29:
[...]


Doet hij dit ook niet als de integers op zijn???
* Gomez12 dacht altijd dat als hij geen integers meer had ( dus bv bij int(2) ) dat hij dan na 99 weer bij 0 zou beginnen. )Wat gebeurt er anders als de getallen op zijn???
Je geeft een maximum aantal op, zoals Chem aangeeft kan dit bijv. INT(10) zijn, dat is in de meeste gevallen genoeg. Want dit betekent dat er dus 9.999.999.999 records in de tabel kunnen zitten met allemaal een uniek ID (= INT(10)).

[ Voor 3% gewijzigd door MarkvE op 28-08-2004 14:42 ]

Vormkracht10


  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Is die (10) niet alleen de standaard field width?
Volgens mij heeft dat bij int geen invloed op de waarden die je erin kunt stoppen.

  • IJnte
  • Registratie: Juni 2003
  • Laatst online: 19-05 12:01
Ik heb die ID INT(255) er zelf van gemaakt. Ik zat eerst de denken dan 10 de maximale waarde was |:( :X . Dit is gewoon weer verandert naar de standaard waarde. Het probleem blijft zich nog steeds af en toe voordoen.

Is er geen andere slimme methode om te controleren of het volledige form is ingevult zodat er gewoon geen waardes fout in kunnen staan? Dan kan ik namelijk gewoon dat hele verwijderen eruit halen, en er een soort van aanpassen script inmaken.

Exploring the world by bicycle! cyclingsilk.wordpress.com


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Als je wilt kijken of je formulier is ingevuld kun je dat met javascript of php doen. Dat lijkt me niet echt een probleem? Er is genoeg te vinden over form validation op het i-net.
Hoe ziet je delete query eruit?
Pagina: 1