Avatar billede bremer Nybegynder
03. september 2009 - 20:59 Der er 13 kommentarer og
1 løsning

Meget simpel insert into - virker ikke, hvorfor ik'?

Hej Venner,

Håber i kan hjælpe mig hertil; Hvorfor virker min kode ikke?

<?php

$result = mysql_query("INSERT INTO pjs_projekter (projektnavn) VALUES('$_POST[projektnavn]", $connection);
if (!$result) {
    die("database wuery failed; " . mysql_error());
}

echo "1 record added";

?>

Hvad mangler?
Avatar billede arne_v Ekspert
03. september 2009 - 21:13 #1
Der mangler vist en single quote og parentes.

$result = mysql_query("INSERT INTO pjs_projekter(projektnavn) VALUES('" . $_POST['projektnavn'] . "')", $connection);
Avatar billede arne_v Ekspert
03. september 2009 - 21:14 #2
Og saa skal du nok kigge paa prepared statement og andre maader at beskytte sig mod SQL injection.
Avatar billede psychopixi Nybegynder
04. september 2009 - 22:06 #3
#2 Prepared statements burde ikke være nødvendigt i nyere versioner af PHP...
Avatar billede arne_v Ekspert
04. september 2009 - 22:12 #4
Omvendt prepared statement er kun muligt i nyere versioner af PHP.
Avatar billede psychopixi Nybegynder
04. september 2009 - 22:20 #5
Min pointe er at _GET og _POST variables allerede er beskyttet mod SQL injections i nyere versioner af PHP, så det ikke burde være nødvendigt at køre mysql_real_escape_string eller lign. på din string inden du benytter string'en i SQL.
Avatar billede arne_v Ekspert
05. september 2009 - 03:37 #6
Ah hva ??

GPC er en oldgammel feature. Den er deprecated i PHP 5.3 og vil blive fjernet i PHP 6.0.

Den efterlader hul så store som ladeporte i applikationen fordi:
- escaping er database specfikt (og sågar encoding specifikt)
- data kan komme andre steder fra end GET og POST

Den kan på det bestemtste frarådes at basere sig på den.

Prepared statement er vejen fremad.
Avatar billede bremer Nybegynder
09. september 2009 - 17:14 #7
Super! men hvis jeg ønsker flere "værdier" end bare "projektnavn"

Kan man så gøre lala sådan her!?


$result = mysql_query("INSERT INTO pjs_projekter (
projektnavn;
kontaktnavn;
firmanavn;
kontoradresse)&&_

VALUES('
" . $_POST['projektnavn' &] . "
" . $_POST['kontaktnavn' &] . "
" . $_POST['firmanavn' &] . "
" . $_POST['kontoradresse' &] . "

')", $connection);
Avatar billede arne_v Ekspert
09. september 2009 - 17:55 #8
Jeg har ikke lige checket for quotes og kommaer, men ideen er rigtig.
Avatar billede bremer Nybegynder
09. september 2009 - 18:31 #9
okay tak ;)


Hvis jeg vil tjekke om den samme "værdien/navn" findes i DB'en - hvad skal jeg tilføje til min SQL (vis herunder)??

$result = mysql_query("INSERT INTO pjs_projekter(navn) VALUES('" . $_POST['navn'] . "')", $connection);
Avatar billede arne_v Ekspert
09. september 2009 - 18:36 #10
Du kan hente med en SELECT.

Men hvis du vil forhindre duplikater er det bedre at saette et unikt index paa feltet.
Avatar billede bremer Nybegynder
09. september 2009 - 19:04 #11
Okay, Kan du evt. give et eksempel på dette? - Så forstår jeg måske lidt bedre?
Avatar billede arne_v Ekspert
12. september 2009 - 01:47 #12
Du sætter et unikt index på i PHPMyAdmin eller hvad du nu bruger til at administrere database med.
Avatar billede arne_v Ekspert
14. oktober 2009 - 02:44 #13
all set ?
Avatar billede bremer Nybegynder
17. december 2009 - 19:47 #14
Bare skriv et "svar" - de få point... -
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