Avatar billede brison Nybegynder
24. september 2009 - 00:12 Der er 18 kommentarer

Probs med at indsætte ting i MySQL DB via formular

Her er lige et udsnit af koden.
Får en fejl i linie 16 og 17, Undefined index.

<body>

<form name="fnen" method="post" action="opret.php">
<p>Fornavn: <input name="fn" size="20"></p>
<p>Efternavn: <input name="en" size="20"></p>
<input type="submit" name="send" value="Tilføj">
</form>

<?php
$fn = $_REQUEST["fn"]; <----- linie 16
$fn = $_REQUEST["en"]; <----- linie 17

mysql_connect("localhost","xxxx", "xxxx") or die(mysql_error());
mysql_select_db("test_db") or die(mysql_error());

mysql_query("INSERT INTO navne(fornavn, efternavn) values(0, '$fn', '$en')");
?>

</body>
Avatar billede zips Juniormester
24. september 2009 - 00:32 #1
Jeg har ikke forstand på dette, men er det ikke fordi du har 2 $fn hvor den ene skal være $en ved din request
Avatar billede brison Nybegynder
24. september 2009 - 00:36 #2
Jo, men det har jeg rettet nu, men får stadig samme fejl.
Avatar billede zips Juniormester
24. september 2009 - 00:52 #3
Prøv med dette.

$fn = isSet($_REQUEST['fn']) ? $_REQUEST['fn'] : '';
$en = isSet($_REQUEST['en']) ? $_REQUEST['en'] : '';
Avatar billede j4k0b Nybegynder
24. september 2009 - 07:23 #4
Prøv at brug $_POST i stedet for $_REQUEST

Desuden indsætter du 3 værdier i din SQL, hvor du kun bør indsætte 2 (fornavn og efternavn). Hvor kommer 0'et fra?


Desuden er dit program meget sårbart overfor SQL injections. Ved at indtaste følgende i Fornavn-feltet kan jeg slette hele din tabel 'navne':

jakob';drop table navne;

SQL kommer til at se sådan ud:

INSERT INTO navne(fornavn, efternavn) values(0, 'jakob'; drop table users;', '$en')


Prøv med det her i stedet:


<?php
$fn = addslashes($_POST["fn"]);
$fn = addslashes($_POST["en"]);

mysql_connect("localhost","xxxx", "xxxx") or die(mysql_error());
mysql_select_db("test_db") or die(mysql_error());

mysql_query("INSERT INTO navne(fornavn, efternavn) values('$fn', '$en')") or die(mysql_error());
?>


med "or die(mysql_error())" efter din mysql_query får du også fejlbeskeder fra MySQL vedr. indsætning af data, ligesom du gør ved mysql_connect og mysql_select_db
Avatar billede brison Nybegynder
24. september 2009 - 07:39 #5
Får stadig fejlen undefined index! ??
Avatar billede j4k0b Nybegynder
24. september 2009 - 07:47 #6
Kan du lige prøve at copy/paste hele fejlbeskeden
Avatar billede Slater Ekspert
24. september 2009 - 07:53 #7
Hvis html-form'en og PHP'en er på samme side, er det at forvente at indekset ikke findes første gang man går ind på siden, da formen ikke er blevet sendt endnu. Er det det?

Normalt ville man have en klausul før man hentede GPC-værdierne, f.eks.:

if (isset($_REQUEST["fn"])) {
  $fn = $_REQUEST["fn"];
  $en = $_REQUEST["en"];
  ...
}
Avatar billede showsource Seniormester
24. september 2009 - 08:05 #8
zips løsning skal nok være:

$fn = (isset($_REQUEST['fn']) ? $_REQUEST['fn'] : '');
$en = (isset($_REQUEST['en']) ? $_REQUEST['en'] : '');
Avatar billede showsource Seniormester
24. september 2009 - 08:07 #9
j4k0b har også fat i noget med antal i query, samt sikkerhed.
Avatar billede Slater Ekspert
24. september 2009 - 08:07 #10
Men zips løsning gør ikke andet end at udskyde problemet, da variablerne så ikke eksisterer når de bliver sat ind i databasen.

Der skal en if om det hele, hvis dét er problemet.
Avatar billede Slater Ekspert
24. september 2009 - 08:08 #11
- Eller rettere, variablerne eksisterer, men er tomme, og vil så give en helvedes masse tomme rækker.
Avatar billede olebole Juniormester
24. september 2009 - 10:24 #12
<ole>


<?php
if (isset($_POST['contxt']) && $_POST['contxt']=="insert") {
    // Indsæt i databasen med mysqli
}
?>

<form name="fnen" method="post" action="opret.php">
<input type="hidden" name="contxt" value="insert">
<p>Fornavn: <input name="fn" size="20"></p>
<p>Efternavn: <input name="en" size="20"></p>
<input type="submit" name="send" value="Tilføj">
</form>



Tjek mysqli:
    http://dk2.php.net/manual/en/book.mysqli.php

- og prepared statements:
    http://dk2.php.net/manual/en/mysqli-stmt.prepare.php

Så slipper du for SQL-injections

/mvh
</bole>
Avatar billede j4k0b Nybegynder
24. september 2009 - 10:49 #13
olebole:

Kunne også gøres ved at tjekke på REQUEST_METHOD:

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
    // Indsæt i databasen med mysqli
}
?>
Avatar billede olebole Juniormester
24. september 2009 - 11:12 #14
Eeeehhhh ... ja, men det giver bare absolut ingen mening  =)
Avatar billede brison Nybegynder
26. september 2009 - 11:33 #15
Jeg forstår det ikke, for kan slet ikke få det til at virke, selvom jeg har prøvet at følge diverse vejledninger mm.
Er 90% newb til php og mysql.

Jeg har 3 php sider
1: Viser navn, efternavn og fødselsdato (dd-mm-åååå) på den/de personer der har fødselsdag dags dato.

2: Her kan man via en formular tilføje de 3 data til databasen.

3: viser alle de personer der er tilføjet databasen, og maks 10 pr. side.

Hvordan laver jeg det?

Kan sagten få hævet dataene ud af tabellen (side 3), men hvordan laver man det med maks 10 pr. side?

På side 2 kan jeg sagtens lave formularen, men får som sagt en fejl på siden.

Side 1, har jeg kigget lidt på, og den fungere vel i princippet som side 3 bortset fra at der kun skal vises de personer der har fødselsdag dags dato.

Hjælp ønskes ;o)
Avatar billede olebole Juniormester
26. september 2009 - 13:53 #16
Du har meget tydeligt fået forklaret, hvorfor fejlen på side 2 opstår.

Max 10 får du ved at tilføje LIMIT 10 til din select query. Noget i stil med:
$sql = "SELECT `felt` FROM `tabel` LIMIT 10";

Personer med fødselsdag idag henter du ved at bruge en WHERE klausul i din select query. Noget i stil med:
$sql = "SELECT `felt` FROM `tabel` WHERE `birthday`='".$today.";'

Jeg har dog kraftigt på fornemmelsen, at du er lidt mere end 90% newb, så jeg vil foreslå, du køber nogle gode bøger om PHP og MySQL og lære sprogene ordentligt. 'Ells du bar lærer tale åg skriv majet dorlig'  ;o)
Avatar billede brison Nybegynder
26. september 2009 - 17:41 #17
Når jeg så har tilføjet noget hvordan sletter jeg det så igen?

Ville gerne have en knap eller et link ud for hver linie på side 3 hvor den så sletter den pågældende linie i databasen når man kilkker.

På forhånd tak.

Og smid lige et svar så jeg kan give point.
Avatar billede olebole Juniormester
26. september 2009 - 21:59 #18
Hvordan du sletter, kommer an på din database struktur
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