Avatar billede tras Juniormester
16. oktober 2007 - 09:15 Der er 11 kommentarer og
1 løsning

Insert into SQL virke ikke?

Hej kan i hjælpe mig med at se hvad der er galt?

$log = echo "oprettet | '".date("d-m-Y")."' | '".date("H-i")."' | '".$username."' logget ind";
mysql_query("INSERT INTO dhu_log (
log
) VALUES (
'$log'
)") or die (Java::Alert("MySQL Error: ".mysql_error()));
Avatar billede nielle Nybegynder
16. oktober 2007 - 09:19 #1
SQL er ikke begejstret for at du inkludere '-tegn i din $log. Disse bruges jo også til at vise start og slut af et stykke tekst overfor SQL.

Sådan?

$log = echo "oprettet | '".date("d-m-Y")."' | '".date("H-i")."' | '".$username."' logget ind";

$log = mysql_real_escape_string($log);

mysql_query("INSERT INTO dhu_log (
log
) VALUES (
'$log'
)") or die (Java::Alert("MySQL Error: ".mysql_error()));
Avatar billede tras Juniormester
16. oktober 2007 - 09:25 #2
virker desvære stadig ikke.

The website cannot display the page
HTTP 500 
  Most likely causes:
The website is under maintenance.
The website has a programming error.

  What you can try:


<?php
include("func.php");
DB::Conn("open");
session_start();

// check is form is submittet

if (isset($_POST['submit'])) {
   
    // cleans up the username and password to work with the database, and to help prevent fraud logins
   
    $username = trim($_POST['username']);
    $password = md5(trim($_POST['password']));
   
    // if the username and / or password is empty report it to user and return
   
    if(!$username || !$password){
        Java::Alert("Husk alle felter!");
        Java::GoToURL("index.php?page=manage");
        die;
    }
   
    // Searches the database for a user ho match the posted username
   
    $result = mysql_query("SELECT * FROM dhu_users WHERE username = '$username' LIMIT 1");
   
    // Loops through the result to match a user and password, then starts a session to keep them logged in
   
    while($r=mysql_fetch_assoc($result)){
   
        if(($r['username'] == $username) && ($r['password'] == $password)){
       
            // Sets the session's name
           
            session_name("sid");
           
            // Starts the session
           
            session_start();
           
           
            // Sets the username in the session to be passed from page to page
           
           
            $_SESSION['username'] = $username;
            $_SESSION['status'] = $r['status'];
            $_SESSION['level'] = $r['level'];
            $_SESSION['name'] = $r['name'];
           
            $log = echo "oprettet | ".date("d-m-Y")." | ".date("H:i")." | ".$_SESSION['username']." logget ind";
            $log = mysql_real_escape_string($log);
            mysql_query("INSERT INTO dhu_log (
            log
            ) VALUES (
            '$log'
            )") or die (Java::Alert("MySQL Error: ".mysql_error()));
           
        }else{
       
            // kills the script if something didn't match up above
           
            Java::Alert("Dit brugernavn eller password er forkert. Prøv igen");
            Java::GoToURL("index.php?page=manage");
            die;
           
        }
    }
   
    // Checks to make sure the session's username was set, or kills the script
   
    if(empty($_SESSION['username'])){
   
        Java::Alert("Der er sket en fejl, prøv at logge ind igen eller skriv til admin");
        Java::GoToURL("index.php?page=manage");
        die;
   
    }

    // Go back to form_login
    Java::GoToURL("index.php?page=manage");
       
}else{

    // Stop siden og gå tilbage "hackker"
    Java::Alert("Der er sket en fejl, prøv at logge ind igen eller skriv til admin");
    Java::GoToURL("index.php?page=manage");
       
}
?>
Avatar billede nielle Nybegynder
16. oktober 2007 - 09:36 #3
Tja, nu er det i hvert fald ikke SQL'en som den fejler på.

Umiddelbart kan jeg ikke se hvad der ellers skulle være i vejen med din kode. Dest skulle da lige være hvis der var en fejl i en af de mange Java-kald.
Avatar billede nielle Nybegynder
16. oktober 2007 - 09:37 #4
Forresten - du kalder session_start() 2 gange i koden. Den i din while-løkke skal fjernes.
Avatar billede tras Juniormester
16. oktober 2007 - 09:55 #5
har altid brugt den metode med at kalde den der også men har fjernet den og virker stadig ikke udkommentere jeg SQL delen virker login siden fint!
Avatar billede nielle Nybegynder
16. oktober 2007 - 10:09 #6
Lyder mystisk. En SQL fejl burde ikkt få den til at styrte på den måde.

Men prøv så med noget debugning:

$log = echo "oprettet | " . date("d-m-Y") . " | " . date("H:i") . " | " . $_SESSION['username'] . " logget ind";
$log = mysql_real_escape_string($log);
$sql = "INSERT INTO dhu_log (log) VALUES ('$log')";
echo "DEBUG: $sql<br>";
// mysql_query() or die (Java::Alert("MySQL Error: " . mysql_error()));

Hvad udskriver dette?
Avatar billede tras Juniormester
16. oktober 2007 - 10:14 #7
jeg er helt på bunden her vis jeg bruger echo "bla bla"; laver den HTTP 500 error
men bruger jeg print(""); så skriver den bare 1 i databasen

oprettet | 16-10-2007 | 10:12 | nick logget indDEBUG: INSERT INTO dhu_log (log) VALUES ('1')
:S
Avatar billede nielle Nybegynder
16. oktober 2007 - 10:19 #8
Prøv lige at rette:

$log = echo "oprettet | " . date("d-m-Y") . " | " . date("H:i") . " | " . $_SESSION['username'] . " logget ind";

til:

$log = "oprettet | " . date("d-m-Y") . " | " . date("H:i") . " | " . $_SESSION['username'] . " logget ind";
Avatar billede tras Juniormester
16. oktober 2007 - 10:27 #9
:D yes problemet var nemlig at echo ikke skulle være der :P tak

$log = "oprettet | " . date("d-m-Y") . " | " . date("H:i") . " | " . $_SESSION['username'] . " logget ind";
mysql_query("INSERT INTO dhu_log (log) VALUES ('$log')") or die (Java::Alert("MySQL Error: ".mysql_error()));

dette virker.
Avatar billede nielle Nybegynder
16. oktober 2007 - 10:30 #10
Svar :^)
Avatar billede tras Juniormester
16. oktober 2007 - 10:32 #11
her :P
Avatar billede nielle Nybegynder
16. oktober 2007 - 10:34 #12
Du kan godt have '-tegn i din $log, men så skal mysql_real_escape_string() kaldes.

I øvrigt bør du også kalde mysql_real_escape_string() på dine login oplysninger da du ellers er sårbar overfor SQL-injection:

$username = mysql_real_escape_string(trim($_POST['username']));
$password = md5(trim($_POST['password']));
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