Avatar billede Christian_Bundgaard Nybegynder
11. august 2010 - 20:18 Der er 18 kommentarer og
2 løsninger

Indsættelse i databasen - der opstår fejl

Endnu en gang må jeg søge hjælp - men I har vel ikke så meget i mod det, da der er lidt point i vente.

Jeg har været ved at lave et nyheds-script, hvor jeg kan skrive noget i "admin area" og derefter bliver det vist. Problemet er, at når jeg trykker submit ved indsættelsen, returnerer den fejl-meddelelsen, hvilket må betyde, at der er noget galt. Jeg har tjekket, og synes det ser rigtigt ud, men i stedet for at bruge endnu længere tid på at finde fejlen, håber jeg at nogle af jer eksperter kan se den.

Her er koden for indsættelsen-filen:

---------------------------------------------------------------

<?
session_start();

if($_SESSION["logged_in"] == 1)
{

//
// Starts
//

$overskrift = $_POST["overskrift"]; // Overskrift
$desc = $_POST["desc"]; // Appetikvækker
$byline = $_POST["byline"]; // Byline
$filnavn = $_POST["filnavn"]; // Filnavn
$tekst = $_POST["tekst"]; // Hele teksten

mysql_connect("*****", "*****", "*****");
mysql_select_db("*****");

$insert = mysql_query("INSERT INTO nyheder (overskrift, desc, byline, filnavn, tekst) VALUES ('$overskrift', '$desc', '$byline', '$filnavn', '$tekst')");

if(!$insert)
{
echo "Der skete en fejl; <a href=\"java script:history.back(-1)\">gå tilbage?</a>";
}
else
{
echo "Nyheden er nu tilføjet; <a href=\"java script:history.back(-1)\">gå tilbage?</a>";
}

//
// Ends
//

}
else
{
echo "Du skal være logget ind for at se denne side.";
}
?>

---------------------------------------------------------------

Forhåbentlig er der nogle, der sidder med løsningen - jeg er nybegynder, så hvis der er andet galt, må I jo sige til. Og forresten, det er bevidst, der ikke tjekkes om alt er udfyldt, da det kun er mig, der kan bruge det.

Mvh.
Christian
Avatar billede majbom Novice
11. august 2010 - 20:30 #1
desc er et reserveret ord, du skal enten bruge et andet ord, eller sætte ´ rundt om...

en anden god ting er at udskrive fejlmeddelelsen fra sql-queryen...
Avatar billede repox Seniormester
11. august 2010 - 20:32 #2
Vi kan jo ikke gætte hvilken fejl den returnerer?
Avatar billede Christian_Bundgaard Nybegynder
11. august 2010 - 21:21 #3
Splazz, hvis det virker får du pointene... Mange tak ;)

@repox; det er jo ikke en PHP fejlmeddelelse, det er jo min fejlmeddelelse. Altså den her:

echo "Der skete en fejl; <a href=\"java script:history.back(-1)\">gå tilbage?</a>";
Avatar billede danco Nybegynder
11. august 2010 - 21:37 #4
Off topic
Det kan være en god idé hvis du laver et php dokument der sørger for tilslutning til databasen. På den måde kan du nøjes med at include på dine sider. Og så sikre du kun skal ændre ét sted hvis du skifter database login eller noget andet.
Avatar billede Christian_Bundgaard Nybegynder
11. august 2010 - 22:05 #5
Jeg har fået problemet løst nu. Samtidig opdagede jeg, at man kun skulle bruge brugernavnet for at logge ind, men det er fixet nu.

@danco; har sådan set tænkt over det, men har det aldrig fået gjort.

Jeg fordeler pointene nu, men når I alligevel skal lave svar, er der så en, der kan fortælle, hvordan man kryptere passwordet (ex. MD5), og derefter bruger det til at logge ind med?

Jeg vil fordele pointene således:

Splazz: 22 point
Danco: 8 point

Mange tak til jer alle - godt I vil hjælpe en noob ;)
Avatar billede majbom Novice
12. august 2010 - 00:18 #6
www.php.net/md5

men sha1 er mere sikker: http://dk2.php.net/sha1
Avatar billede danco Nybegynder
12. august 2010 - 11:14 #7
$kode = $_POST['kode'];
$ent_kode = sha1($kode); //Returnere en streng på 42 tegn

Naturligvis kræver det at kodeordet er krypteret med sha1 i databasen, ellers er der ingen forskel end ellers.

Svar
Avatar billede Christian_Bundgaard Nybegynder
12. august 2010 - 13:20 #8
Problemet er, at jeg tilføjer via. insert i phpmyadmin. der kan jeg kun vælge MD5 (eller hedder sha1 noget andet)? Så når jeg trækker det ud af databasen, hvordan sammenlignes det så, med det kodeord, jeg indtaster?
Avatar billede repox Seniormester
12. august 2010 - 13:46 #9
Jeg vil godt pointere at det kun er bitmæssigt mere 'sikkert' at anvende sha1 mod md5.
Grunden til md5 anses for at være usikker er de omfattende rainbow tables, men det kan man imødekomme ved at salte sine kodeord.

For at kontrollere op mod databasen for om kodeordet passer, kan du med fordel anvende enten php eller mysql (jeg foretrækker selv at anvende mysql til det):

<?php

  $username = mysql_real_escape_string($_POST["username"]);
  $password = mysql_real_escape_string$_POST["password"]);

  $sql = "SELECT userId FROM users WHERE username='".$username."' AND password = MD5('".$password."') LIMIT 1";
  $result = mysql_query($sql);
  if(mysql_num_rows($result) > 0)
  {
    $userId = mysql_result($result, 0, "userId");
    $_SESSION["userId"] = $userId;
    header("Location: brugerside.php");
  }
  else
    header("Location: forkert_login.php");

?>
Avatar billede majbom Novice
12. august 2010 - 14:45 #10
tak for point :)

-> repox - der mangler lige en startparantes:

$password = mysql_real_escape_string($_POST["password"]);


:)
Avatar billede repox Seniormester
12. august 2010 - 15:23 #11
#10
For pokker da... det er hvad man får ud af at skrive det ind i et textarea hvor syntax highlighting stadig ikke er en standard ;)
Avatar billede Christian_Bundgaard Nybegynder
12. august 2010 - 15:25 #12
Skal man sætte det det "mysql_real_escape_string" på, og så når man henter passwordet, bare bruge MD5 foran? Så tror jeg det er derfor :) Hvis jeg tager fejl, må I live rette mig. Det afprøves ;)

PS: Skal man oprette en tråd for hvert spørgsmål man har - fordi jeg har et mere, stadig ang. MySql - eller må man godt køre en tråd videre ud?
Avatar billede repox Seniormester
12. august 2010 - 15:32 #13
Når spørgsmålet oprindeligt er afsluttet skal du oprette et nyt spørgsmål.

mysql_real_escape_string() er generelt bare for at beskytte dig bedst muligt mod SQL injection, hvilket du lige så godt kan lære først som sidst at gøre HVER gang - og du skal ikke sætte det i forbindelse med MD5, for det har ikke noget med hinanden at gøre.
Avatar billede Christian_Bundgaard Nybegynder
12. august 2010 - 15:35 #14
Hehe undskyld dobbelt posting - jeg glemmer hele tiden at etste før jeg svarer. Nu har jeg fået det til at virke, men det der mysql_real_escape_string giver mig 4 fejlmeddelelser - er det vigtigt?

Jeg siger rigtig mange tak for jer allesammens hjælp... ;) Ærgerligt jeg ikke har flere point i denne tråd til repox :(

Kunne være jeg skulle oprette en ny med et enkelt og nok simpelt spørgsmål, bare så han kunne få point ;)
Avatar billede repox Seniormester
12. august 2010 - 15:41 #15
Man kan ikke vide hvilken betydning det har, når vi ikke ved hvilke fire fejlmeddelelser du får?
Avatar billede Christian_Bundgaard Nybegynder
12. august 2010 - 15:42 #16
Vi skriver jo næsten oveni hinanden :)

Her er de 4 fejlmeddelser; jeg har bare gjort følgende i koden:

$bruger = mysql_real_escape_string($_POST["brugernavn"]);
$password = mysql_real_escape_string($_POST["password"]);


Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'devdesign.dk'@'srv170.one.com' (using password: NO) in STI on line 4

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in STI on line 4

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'devdesign.dk'@'srv170.one.com' (using password: NO) in STI on line 5

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in STI on line 5

+ til sidst kommer de to fejlmeddelser om, at der ikke er indtastet noget.
Avatar billede repox Seniormester
12. august 2010 - 15:46 #17
Har du forbindelse til databasen, inden du bruger mysql_real_escape_string?
Avatar billede Christian_Bundgaard Nybegynder
12. august 2010 - 15:50 #18
Ahh, det havde jeg slet ikke tænkt på! Mange tak! Det virkede.

Nu ender jeg denne tråd, og opretter en ny, så du kan få nogle point og mit sidste spørgsmål indtil videre, kan blive opklaret.
Avatar billede majbom Novice
12. august 2010 - 15:54 #19
-> #11 - det kunne faktisk være ret sejt!
Avatar billede Christian_Bundgaard Nybegynder
12. august 2010 - 15:58 #20
Aaargh... beklager repox, de point må du få når jeg finder et nyt spørgsmål :) Det var en alt for pinlig fejl jeg opdagede, men jeg var ved at lave spørgsmålet... havde skrevet en SQL kommando, men havde glemt mysql_query - pinligt, pinligt, pinligt...
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