Avatar billede escorpion Nybegynder
12. oktober 2006 - 13:08 Der er 13 kommentarer og
1 løsning

Sql tjek

Hej experter!

JEg har brug for at vide om en angivet value eksisterer i min database FØR det evt. insættes som ny.

Jeg kan ikke selv helt gennemsku hvordqan den skal kringles.

muligvis noget med:

Mysql_query(SELECT fornavn FROM base WHERE fornavn != $_POST[fornavn]);

hvis ikke spørgsmålet er forståeligt, må i lige spørge..

Mvh
Richard Borring
Avatar billede escorpion Nybegynder
12. oktober 2006 - 13:10 #1
Hov

Det skal selvfølgelig være en INSERT INTO sætning...
Avatar billede jensgram Nybegynder
12. oktober 2006 - 13:13 #2
Et bud:

IF EXISTS SELECT * FROM base WHERE fornavn != $_POST[fornavn]) THEN INSERT INTO ...
Avatar billede escorpion Nybegynder
12. oktober 2006 - 13:18 #3
Hey jens!

jeg tænkte bare på om det ikke ville være nemmere at først tjekke for eksisterende og så inde i en if kommando insert hvis ikke eksistere
Avatar billede jaw Nybegynder
12. oktober 2006 - 13:21 #4
Måske du kunne lave feltet unikt, så vil der aldrig blive indsat dupletter...
Avatar billede coderdk Praktikant
12. oktober 2006 - 13:27 #5
Du kan også alve en unique constraint på feltet og lave en INSERT IGNORE INTO og checke på affected rows, om der kom noget ind ;)
Avatar billede escorpion Nybegynder
12. oktober 2006 - 13:27 #6
jaw:

Det er selvfølgelig en mulighed, men her vil du ikke have mulighed for så at komme med en egen fejlmeddelelse..
Avatar billede jaw Nybegynder
12. oktober 2006 - 13:34 #7
Tjoh, mysql_affected_rows() vil vel fortælle, om der blev indsat eller ej? Altså om værdien er 0 eller 1, og deraf lave en fejlmeddelelse...
Avatar billede jaw Nybegynder
12. oktober 2006 - 13:35 #8
Hvilket vel egentlig også var hvad coderdk skrev, det så jeg ikke lige :)
Avatar billede escorpion Nybegynder
12. oktober 2006 - 13:39 #9
Jeg skal lige nævne at jeg ikke er en haj til det her
jeg ville skrive noget li det her(hvis det virkede:P)

$sql_tjek="SELECT fornavn FROM base WHERE fornavn != 'fornavn'";
if (!=mysql_query($sql_tjek))
    {
        echo="navnet eksisterer i forvejen. Prøv igen"
    }
else
{
    $sql_insert="INSERT INTO base (fornavn, efternavn, alder, mobil, email, skole) VALUES ('$_POST[fornavn]','$_POST[efternavn]','$_POST[alder]', '$_POST[mobil]',                 '$_POST[email]', '$_POST[skole]')";
}

if (!mysql_query($sql_insert))
    {
        die('Error: ' . mysql_error());
    }
else
    {
       
        include ('Tilmeldt.html');
    }
Avatar billede coderdk Praktikant
12. oktober 2006 - 13:48 #10
$sql = "SELECT 1 FROM base WHERE fornavn = '" . mysql_escape_string( $_POST['fornavn'] ) . "'";
$qh = mysql_query( $sql ) or die( mysql_error() );
if ( mysql_num_rows( $qh ) > 0 )
{
  echo "Navnet eksisterer i forvejen. Prøv igen!";
}
else
{
  $sql = sprintf( "INSERT INTO base (fornavn,efternavn,alder,mobil,email,skole) VALUES ('%s','%s','%s','%s','%s','%s')", mysql_escape_string( $_POST['fornavn'] ), mysql_escape_string( $_POST['efternavn'] ), mysql_escape_string( $_POST['alder'] ), mysql_escape_string( $_POST['mobil'] ), mysql_escape_string( $_POST['email'] ), mysql_escape_string( $_POST['skole'] ) );
  mysql_query( $sql ) or die( mysql_error() );
  include('Tilmeldt.html');
}
Avatar billede escorpion Nybegynder
12. oktober 2006 - 13:55 #11
coderdk:

selvom jeg ikke ved noget om "mysql_escape_string" delen, så virkede det sku....
er der noget info nogen steder omkring denne del, eller hvad du gjorde?

smider du lige et svar også
Avatar billede escorpion Nybegynder
12. oktober 2006 - 13:56 #12
og det her:
('%s','%s','%s','%s','%s','%s')
Avatar billede coderdk Praktikant
12. oktober 2006 - 14:08 #13
http://dk.php.net/sprintf
http://dk.php.net/mysql_escape_string

sprintf er bare til at formattere en streng, mysql_escape_string forhindrer at nogen kan lave SQL-injection (f.eks. slette hele din database eller lignende)
Avatar billede jensgram Nybegynder
12. oktober 2006 - 15:51 #14
Hov - der var jeg sgu ikke lige online :P
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
Computerworld tilbyder specialiserede kurser i database-management

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