29. juli 2007 - 01:39Der er
18 kommentarer og 1 løsning
Kontrol af SQL insert
Hej eksperter
Når jeg opretter noget i MySQL fra en php fil og trykker opdatér vil det samme data blive oprettet i databasen igen eller hvis jeg arbejder videre med noget andet, trykker tilbage og trykker forsøg igen når jeg kommer til oprettelsessiden vil det igen blive oprettet..
Hvordan afhjælper jeg dette problem?
Håber i forstår hvad jeg mener.. Er lidt træt PT.. :P
Grunden til jeg gør på den måde er at jeg bruger samme formular til at udfylde flere ting..
Dvs. når en formular er udfyldt og man trykker submit udføres SQL INSERT for det udfyldte og samtidig vises der en ny formular, som er næste step osv. indtil der ikke er flere steps, antallet af steps er alt afhængig af hvor mange elementer brugeren har valgt at ville oprette.
Ellers kan du jo tjekke om indholdet allerede eksisterer, eller du kan smide en unixtime med og se, hvornår brugeren sidst tilføjede noget. På den måde undgår du også at brugerne fylder din database op med junk/spam. :)
kunne jeg godt.. Men så får jeg bare en masse SQL-værk til at ligge øverst i min index2.php, som jo også bruges til at vise alle de andre sider, som ikke har noget med den formular at gøre..
Men hvis det er den eneste løsning, må det jo blive sådan..
Hvis du indsætter ob_start(); i starten af din fil, så bliver der ikke sendt noget data, før hele siden er blevet gennemført. Så vil du ikke få headerproblem.
Output-buffering (ob_start og ob_flush) er en panikløsning, der ofte bruges til at redde dårlig kodestil - hvilket helt klart ville være tilfældet her. Det sløver serverens performance dramatisk (æder serverens hukommelse) og bør derfor undgåes, når det overhovedet kan lade sig gøre.
Derimod har windscape helt ret i sin kommentar. Dén er udtryk for god og sund kodestil ;o)
Jeg synes bare aldrig jeg kan få det til at hænge sammen når det skal stå i toppen.. Så forsvinder ligesom idéen ved at bruge include i sine filer.. Og at samle det hele i én fil bliver også noget elendigt rod. :S
Min måde at programmere på er som oftest at dele en del ting op i mapper.
Fx har jeg et bibliotek til functions, hvor jeg gemmer alle functions i hver sin fil med funktionens navn. Jeg har også en mappe til forms, hvor jeg ligger alle mine formularer ind.
Øverst i min kode har jeg altid et tjek på om en bruger er logget ind, hvis ikke, så er der exit og header location;
Længere nede på samme side fremkommer opbygningen af mit site i divs og i den div hvor indholdet skal være tjekker jeg på om den side den forsøger at åbne er en ren tekst fil den kan hente direkte fra databasen eller om det er en .php fil den skal finde et andet sted.
Hvis det er en fil bliver den includet og på den måde får jeg sat alle sitets funktioner ind på siden alt efter hvad man nu har trykket sig frem til i menuen.
Mange af de funktioner har MySQL oprettelser, og lign.. Derfor bliver selve oprettelserne også includet midt på den side der vises.
Efter kommentarerne på denne har jeg pillet mit MySQL insert kald ud i en fil for sig selv, som herefter sender brugeren videre til en anden side med header location. Og denne fil indeholder ren php, kode og derved ingen udskrifter.. MEN opstår der fejl i databasen vil den jo meget gerne have lov at udskrive en fejlmeddelse på den side den opstår på, og når den gør det bryder den min header og sitet sendes ikke videre, hvordan jeg undgår dette og får givet brugeren en pæn fejlmeddelse på den næstkommende side har jeg ingen idé om..
Men kom endelig med kommentarer til min måde at kode på, udfra det jeg har skrevet om det, det er jo den eneste måde man lærer af sine fejl :)
Spørg endelig hvis i vil vide mere om min kodestil.
--> Olebole smid svar for points, det er din metode jeg har brugt til at løse mit problem, som dette spørgsmål gik ud på :)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.