![]() |
Hejsan.
Jag har byggt en lätt bildupladdningsmotor. När bilderna listas finns det en raderingsfunktion ; Kod:
form action="'.$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'" method="POST"> Den raderar allt, inklusive ID nummret. Om jag raderar ALLA rader ur databasen, 1 - 24, så kommer nästa rad jag skapar få ett ID av 25. Hur minskar jag samtilga ID då jag raderar en rad Tack! |
Det vill du inte. Poängen med att ha auto_increment på en id-kolumn är att du ska få ett unikt ID för varje rad som läggs till i tabellen, och det blir ju inte unikt om du återanvänder gamla id:n.
Det låter som att den här frågan uppkom för att du försöker lösa ett annat problem/använda din id-kolumn på ett sätt som kanske inte är optimalt. Förklara gärna varför du vill att dina id:n ska minskas när du raderar en rad. |
Exakt, varför måste du ha vissa siffror på ID-kolumnen? Är det för att du har problem med exempelvis slumpning av bilder annars så går det att lösa på annat mer lämpligt sätt.
|
hjälp, varför skriver du SQL i en input???
du vet väl att man kan radera hela din databas pga detta, va?! ge mig länk skall jag visa. |
Lägg inte heller $_SERVER['QUERY_STRING'] utan någon validering direkt i form action.. ;)
Citat:
|
Citat:
|
Ooooh vilken farlig kod. Hoppas den inte används av nån annan än dig själv : )
|
Har du någon URL så skall jag hjälpa dig att få IDna i ordning när du raderar en rad.
|
Citat:
Är du rädd om din databas så lämnar du inte ut någon URL innan du täppt till säkerhetshålen vilka som påpekats är enorma i nuläget. |
Citat:
Jag skulle bara leka lite :( Förresten, man kan inte klassa ovanstående kod som sårbar för SQL-Injections. Eftersom man behöver ju göra någon "injection" här ju... Vad skall man klassa det som? |
Citat:
Tack till alla som varnar för elaka Jonas med flera, men systemet är byggt för att användas lokalt. Jag kan tillräckligt mycket om MYSQL för att veta att jag inte kan något om säkerhet. Man kan förmodligen sönderexploatera den, men tills ni hittar till min http://localhost så bryr jag mig inte spec. mkt :P Min fråga blev en ickefråga efter Citat:
Det spelar alltså ingen roll att tal " försvinner" vid radering? |
Jonas är inte elak =) Åtminstone tror jag inte det.
Såvida du av någon för mig okänd anledning inte behöver just dessa tal till något så spelar det ingen roll, nej. Det är helt normalt att det blir på det viset med auto increment-kolumner. Anledningen till att man använder en sådan kolumn är för att man ska kunna identifiera varje enskild rad på något vis. |
Citat:
Okej, det låter ju rimligt. Problemen uppstår ju när systemet använts i ett par månader. ID kommer då att börja vid runt 10 000. Föreställer mig att det kommer bli onödigt stora tal... |
Mm, hela fem bytes stora! =)... Det är inga större problem.
|
Citat:
Kändes dock snyggare att dra 3siffriga tal ur databasen en ett ID på en miljon, vilket det lär bli efter en del användande. Tack för allas hjälp :) Om jag nån gång skulle vilja lägga mitt bildsystem på en server som kan det kan www:as till, hur skickar man då best queries till <form> ? Jag förstår att sättet jag implementerat det på är så äckligt osäkert att det inte är sant :) |
Du skickar inga queries via klienten, allt sköts server-side.
|
1. Undvik att använda något annat än en explicit url i action-attributet.
2. Skicka bara med id-numret. Nu har du en sql-sats där som vem som helst kan manipulera på klientsidan för att på så vis radera hela databasen eller vissa id:n om man tycker det är roligare. |
Istället för auto_increment kan du använda MAX(id)+1 vid INSERT. Det blir dock fortfarande luckor i nummerserien om du tar bort rader mitt i, men du slipper att det orsakas luckor pga rader som är borttagna i slutet.
Jag skulle nog tycka att det skulle kännas lite läskigt att skicka data direkt från ett formulär till databasen även om man bara kör det lokalt. |
Du kan ju förvisso köra följande också ifall du vill omsortera dina id:n men jag vidhåller vad andra sagt, strunt i att använda id:t till något annat, vill du ha ett id som löper snyggt framåt på utsidan, mata ut det hjälp av php istället i din loop där utmatningen sker.
Kod:
ALTER TABLE table DROP id, ADD id INT UNSIGNED AUTO_INCREMENT NOT NULL, AUTO_INCREMENT = 1; |
Citat:
1. Tanken från min sida var att se hur godtrogen du var. Allt för många ger ut uppgifter utan att veta exakt vem dom har att göra med. Det hela har ett begrepp "Social Engineering" 2. Jag skulle inte ens gått in på länken om du gett mig den, utan snarare postat här i tråden om att jag fick den av dig. Eftersom så som du har gjort det är livsfarligt. |
Citat:
Är bekant med Social Engineering, och du verkar vara en alldeles för respekterad medlem här för att trixa med min databas :) Citat:
|
gör om värdet som läggs in i hidden så du endast lägger Idt.
På sidan som du postar till skapar du en variabel vid namn $sql1 (eller likn) och i slutet av variabeln lägg till värdet från postade hiddenfältet som du gör en escape på för att ta bort "förbjudna" tecken. |
Citat:
|
ja, precis, Tack!
|
Citat:
Säg inte det ;) Citat:
Kod:
<?php Använder man inte MySQLi/PDO mm med Prepared statements så bör man använda sprintf för att göra queryn. |
Citat:
|
Citat:
|
Alla tider är GMT +2. Klockan är nu 20:57. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson