Terander Skrevet 27. august 2007 Del Skrevet 27. august 2007 (endret) Har holdt på med php/mysql i en helg nå, så kunnskapene er ikke de beste. Har en tabell som har følgende verdier: PersonID int not null auto_increment primary key Fornavn varchar not nul Etternavn varchar not null Gateadresse varchar not null Adresse2 varchar null standard=null Postnummer varchar not null Poststed varchar not null Denne tabellen fylles ut ved hjelp av et html/css skjema og en php fil. Men skjemaet lagrer også tomme poster i DB, selv om jeg har valgt "not null". Det er ikke ønskelig med tomme poster i DB og jeg trodde ikke disse kunne lagres når verdien not null var brukt. Har jeg gjort noe galt i DB tabellen eller må jeg legge til et phpscript som sier du ikke får registrere dersom et felt i skjemaet er tomt? Hvordan ser evt en slik php kode ut? Endret 6. september 2007 av Terander Lenke til kommentar
BlueEAGLE Skrevet 27. august 2007 Del Skrevet 27. august 2007 Det er forskjell på NULL og "" i mysql. Med andre ord så må du sjekke dataene før du putter dem inn i databasen. Når det er sagt så er det ALLTID "en god ide" å validere data før du putter det inn i databasen. For eksempel så er det flere som har brent seg på å ukritisk kjøre kode som kommer fra et skjema. Nå skal det være sagt at SQL-injection ikke er like utbredt nå som det var før i og med at mysql_query() nå kun utfører spørringer frem til førte ";". Koden som validerer kan foreksempel se slik ut: if(empty($navn = mysql_real_escape_string($_POST['fornavn'])) return('Fornavn kan ikke være tomt'); if(empty($etternavn = mysql_real_escape_string($_POST['etternavn'])); return('Etternavn kan ikke være tomt'); [...] På denne måten slår du to fluer i en smekk. Du sjekker at feltet er fylt ut og "uskadeliggjør" spesielle tegn som en moroklump har puttet inn der. Hvis du kun vil tillate store/små bokstaver så kan du bruke et regulært uttrykk istedenfor mysql_real_escape_string. Lenke til kommentar
Terander Skrevet 27. august 2007 Forfatter Del Skrevet 27. august 2007 (endret) Takker for en god og informativ tilbakemelding. Har sittet hele helgen og knotet med den ene utfordringen etter den andre, men denne kom jeg ikke forbi før nå. (har dog ikke fått prøvd den enda) Har utallige utfordringer igjen før jeg nærmer meg målet, men det er jo halve morroa Et lite sp til i samme slengen... Ser det er mange som legger php koden i en egen fil som kalles feks. process.php. Er dette den anbefalte løsningen eller bør den ligge i filen der skjemaet er? (har prøvd å ha den sammen med skjemaet, men da lagret den en ny post hver gang skjemaet ble åpnet). Endret 27. august 2007 av Terander Lenke til kommentar
Terander Skrevet 27. august 2007 Forfatter Del Skrevet 27. august 2007 if(empty($Land = mysql_real_escape_string($_POST['Land'])) return('Feltet Land kan ikke være tomt'); if(empty($Epost = mysql_real_escape_string($_POST['Epost'])) return('Feltet Epost kan ikke være tomt'); else{ //Lagrer koden i DB } Har prøvd litt på denne men ikke fått den til å fungere enda. Når jeg derimot benyttet følgende tekst fungerte det. if(!$_POST['Land']){ $feil[5] ="Du har ikke fyllt ut Land"; } if(!$_POST['Epost']){ $feil[6] ="Du har ikke fyllt ut Epost"; } else{ //Lagrer koden i DB } Antar den første versonen skal kontrollere mer enn den siste. Klarer ikke helt å se hva jeg har gjort feil i den første... Lenke til kommentar
BlueEAGLE Skrevet 28. august 2007 Del Skrevet 28. august 2007 Det jeg pleier å gjøre er å sende skjema til en egen fil for så å omdirigere til neste side avhengig av resultatet. Ved feil så blir brukeren sendt tilbake og ved rett informasjon blir brukeren sendt et fornuftig sted. Forsiden veldig ofte. Dette forhindrer dobbelposting hvis brukeren trykker "Oppdater". Antar den første versonen skal kontrollere mer enn den siste.Klarer ikke helt å se hva jeg har gjort feil i den første... Nå har ikke jeg feilsjekket koden jeg skrev. Men teorien er at etter $if(!empty($Land = mysql_real_escape_string($_POST['Land']))); så vil $Land inneholde en streng hvor spesielle tegn er behandlet slik at det er trygt å sette det inn i en database. Den vil også feile hvis $_POST['Land'] kun inneholder tegn som ikke tillates i databasen. Når det gjelder spesielt Land så bør du sjekke mot en liste med gyldige land også slik at ingen skriver inn smurfedalen og liknende. Lenke til kommentar
roac Skrevet 29. august 2007 Del Skrevet 29. august 2007 Det er forskjell på NULL og "" i mysql. Med andre ord så må du sjekke dataene før du putter dem inn i databasen. 9368041[/snapback] En liten presisering bare: Slik er det i alle databaser som førlger ANSI standarden. NULL betyr "ingen verdi" og kan brukes i forbindelse med alle mulige datatyper, mens "" er en tom tekststreng, 0 er verdien null og så videre. Det er like godt å lære seg dette med en gang, og ikke minst bruke NULL for å representere fravær av verdi. Lenke til kommentar
Terander Skrevet 29. august 2007 Forfatter Del Skrevet 29. august 2007 Når det gjelder spesielt Land så bør du sjekke mot en liste med gyldige land også slik at ingen skriver inn smurfedalen og liknende. 9374938[/snapback] Har planer om mange forandringer på dette skjemaet. Problemet er at jeg ikke har kunnskapene til dette enda, så derfor må jeg lage et stort skjema og bryte det opp i de forskjellige delene jeg vil ha, etterhvert som jeg får bit for bit til å fungere. Ønsker bl.a. å ha en tabell med verdensdeler og land i de forskjellige regionene, en tabell med fylker og kommuner i landet, en tabell hvor jeg kan registrere kort fakta-informasjon om forskjellige steder, en tabell med person opplysninger og en tabell med fotoutstyr. Og bygge dette sammen til en blogg som inkluderer foto-hobbyen min med reising til mange steder (for bl.a å fotografere). Få satt sammen et fotogalleri i bloggen, hvor mest mulig info om fotografiet hentes fra forskjellige tabeller, inkludere en adressebok for meg og registrerte venner, med mer. (Har dog ikke peiling på hvordan jeg skal bruke forskjellige tabeller samtidig enda) Adresseboken så ut til å være et godt utgangspunkt, så det er der jeg har startet nå. Epost og telefon er eksempler på ting jeg tror bør være egne tabeller. Dette er ikke ment som et nettsted der folk kan registrere seg men som en privat blogg/hjemmeside som bare jeg, og de jeg gir tilgang, kan endre enkelte data. Land skal, som du allerede her nevt, bare kunne velges fra en liste. Hadde også lyst til å få poststed automatisk opp ved å skrive inn postnr, men tror dette vil bli for omfattende med tanke på at postnummer kommer fra flere forskjellige land.(har hele tabellen over norske postnr, og bare den er krympet ned til 5008 nummer) MEN en ting av gangen, så dette vil ta laang tid og forhåpentlig vis vil jeg lære mye om mysql og php i prosessen Takker igjen for gode tips! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå