Avatar billede brianmilan Juniormester
10. december 2009 - 09:17 Der er 6 kommentarer og
1 løsning

Tjekke om databasefelt er "NULL" ellers indsæt "NULL".

Hej,

Jeg har et lille spørgsmål :-) Når jeg opretter  en dvd film i min database, så har jeg et felt hvor jeg kan skrive hvem jeg evt. har lånt en film ud til, men i det øjeblik jeg opretter filmen udfylder jeg ikke feltet "Lånt ud til" men når jeg så kikker i database (MySQL) så har den slettet NULL værdien og bare lavet et tomt felt..

Nu kommer mit spørgsmål :-) Hvordan kan jeg evt. lave det så den tjekker om der er skrevet noget i feltet og hvis der ikke er skal den sætte feltet til NULL

Jeg har selv prøvet at lave noget kode, meeen det gik ikke lige helt som forventet..
<?php
    include "../ConnectDB.php";
    connectmydb();
   
$dvd_film_ID      =$_POST["dvd_film_ID"];
$Original_Titel  =$_POST["Original_Titel"];
$Dansk_Titel      =$_POST["Dansk_Titel"];
$Laant_Ud        =$_POST["Laant_Ud"];
$Instruktoerer    =$_POST["Instruktoerer"];

if (!is_null($Laant_Ud))
{                      }  //Her skulle den tjekke om jeg har indtastet noget i feltet Laant_Ud
else
{ INSERT INTO alle_dvd_film SET Laant_ud=NULL WHERE Laant_ud LIKE ''     
} //Her skal den sætte variable NULL i databasen

if (!mysql_query("INSERT INTO alle_dvd_film
      (dvd_film_ID, Original_Titel, Dansk_Titel, Laant_Ud, Instruktoerer)
                            VALUES ('$dvd_film_ID', '$Original_Titel', '$Dansk_Titel', '$Laant_Ud' '$Instruktoerer'"))
        {
          echo mysql_error();
         
          exit();
        }
?>

Kan I evt. hjælpe mig?

Venlig hilsen

Brian
Avatar billede repox Seniormester
10. december 2009 - 09:28 #1
Du skal sørge for at dit felt i databasen må have værdien NULL.
Udover det, ser det det ikke ud som om du er helt skarp i det med INSERT statements? Og du beskytter ikke dig selv mod SQL injections?
Avatar billede brianmilan Juniormester
10. december 2009 - 10:10 #2
Hej Repox,

Nej det driller med lidt. Jeg har "givet lov" til at databasen godt må have værdien NULL.
Hvad er det at SQL Injections gør?
Avatar billede michael_stim Ekspert
10. december 2009 - 10:26 #3
Du kan ikke lave en INSERT med en WHERE. Du skal bruge UPDATE.
Avatar billede repox Seniormester
10. december 2009 - 10:27 #4
Nå, jamen, du har da nogle grundlæggende fejl i kode. Meget af det kan henvises til logikken.

if (!is_null($Laant_Ud))


$Laant_Ud kan kun være null hvis $_POST["Laant_Ud"] ikke eksisterer. Det vil kun forekomme hvis HTML input elementet er en checkbox. Men nu angiver du selv at den skal kontrollere om der er noget i feltet, så jeg antager at det er et tekstfelt. Så uanset om du skriver noget i feltet eller ej vil (!is_null($Laant_Ud)) altid returnere false.

SQL INSERT forespørgsler kan ikke indeholde WHERE clauses.
Når du vil sætte noget til at være null i en SQL forespørgsel vil det korrekte være at skrive noget ala:

INSERT INTO table (field1, field2) VALUES (NULL, 'Indhold');

eller

UPDATE table SET field1 = NULL WHERE field2 = 'Indhold'


Når jeg snakker om sql injections, så mener jeg at du skal sikre dig at 'ulovlige' tegn ikke sendes ind i databasen.
Se mere om hvordan du kan beskytte dig mod det på php.net:
http://php.net/mysql_real_escape_string
Avatar billede brianmilan Juniormester
23. februar 2011 - 22:36 #5
Hej Repox og Michael kunne jeg få jer til at lægge et svar, så skal jeg straks få givet jer point.
Avatar billede michael_stim Ekspert
24. februar 2011 - 10:59 #6
Ellers tak, samler ikke.
Avatar billede repox Seniormester
24. februar 2011 - 11:09 #7
Svar fra mig...
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester