Avatar billede kodak Mester
02. november 2010 - 17:58 Der er 3 kommentarer og
2 løsninger

Hvad er der galt?

Jeg har følgendene script til at oprette brugere med:

<?php
    //Start session
    session_start();
   
    //Inkluder databaseforbindelse detaljer
    require_once('config.php');
   
    //Array at gemme valideringsfejl
    $errmsg_arr = array();
   
    //Valideringsfejl flag
    $errflag = false;
   
    //Forbinder til MySQL-serveren
    $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
    if(!$link) {
        die('Fejl ved forbindelse til serveren: ' . mysql_error());
    }
   
    //Vælg database
    $db = mysql_select_db(DB_DATABASE);
    if(!$db) {
        die("Kan ikke finde databasen");
    }
   
    //Funktion til at rense værdier modtaget fra formularen. Forhindrer SQL-injektion
    function clean($str) {
        $str = @trim($str);
        if(get_magic_quotes_gpc()) {
            $str = stripslashes($str);
        }
        return mysql_real_escape_string($str);
    }
   
    //Desinficere POST værdier
    $fname = clean($_POST['fname']);
    $lname = clean($_POST['lname']);
    $login = clean($_POST['login']);
    $mail = clean($_POST['mail']);
    $sex = clean($_POST['sex']);
    $password = clean($_POST['password']);
    $cpassword = clean($_POST['cpassword']);
   
    //Input validering
    if($fname == '') {
        $errmsg_arr[] = 'Fornavn mangler';
        $errflag = true;
    }
    if($lname == '') {
        $errmsg_arr[] = 'Efternavn mangler';
        $errflag = true;
    }
    if($login == '') {
        $errmsg_arr[] = 'Brugernavn mangler';
        $errflag = true;
    }
    if($mail == '') {
        $errmsg_arr[] = 'E-Mail mangler';
        $errflag = true;
    }
    if($sex == '') {
        $errmsg_arr[] = 'Køn mangler';
        $errflag = true;
    }
    if($password == '') {
        $errmsg_arr[] = 'Password mangler';
        $errflag = true;
    }
    if($cpassword == '') {
        $errmsg_arr[] = 'Bekræftelses password mangler';
        $errflag = true;
    }
    if( strcmp($password, $cpassword) != 0 ) {
        $errmsg_arr[] = 'Passwords er ikke ens';
        $errflag = true;
    }
   
    //Tjekker for dubletter Brugernavn
    if($login != '') {
        $qry = "SELECT * FROM members WHERE login='$login'";
        $result = mysql_query($qry);
        if($result) {
            if(mysql_num_rows($result) > 0) {
                $errmsg_arr[] = 'Brugernavnet er allerede i brug';
                $errflag = true;
            }
            @mysql_free_result($result);
        }
        else {
            die("Query failed #001");
        }
    }
   
    //Tjekker for dubletter e-mail
    if($login != '') {
        $qry = "SELECT * FROM members WHERE login='$mail'";
        $result = mysql_query($qry);
        if($result) {
            if(mysql_num_rows($result) > 0) {
                $errmsg_arr[] = 'E-Mailen er allerede i brug';
                $errflag = true;
            }
            @mysql_free_result($result);
        }
        else {
            die("Query failed #002");
        }
    }
   
    //Hvis der er input valideringer, omdirigere tilbage til tilmeldingsformularen
    if($errflag) {
        $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
        session_write_close();
        header("location: register-form.php");
        exit();
    }

    //Opret INSERT query
    $qry = "INSERT INTO members(firstname, lastname, login, passwd) VALUES('$fname','$lname','$mail','$sex','$login','".md5($_POST['password'])."')";
    $result = @mysql_query($qry);
   
    //Kontroller, om forespørgslen var en succes eller ej
    if($result) {
        header("location: register-success.php");
        exit();
    }else {
        die("Query failed #003");
    }
?>


hvergang jeg prøver at oprette en bruger melder den følgendene fejl.
Query failed #003

Hvad er de galt siden den gør det?

Følgendene script er selve formularen.

<?php
    session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Login</title>
<link href="loginmodule.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
    if( isset($_SESSION['ERRMSG_ARR']) && is_array($_SESSION['ERRMSG_ARR']) && count($_SESSION['ERRMSG_ARR']) >0 ) {
        echo '<ul class="err">';
        foreach($_SESSION['ERRMSG_ARR'] as $msg) {
            echo '<li>',$msg,'</li>';
        }
        echo '</ul>';
        unset($_SESSION['ERRMSG_ARR']);
    }
?>
<form id="loginForm" name="loginForm" method="post" action="register-exec.php">
  <table width="300" border="0" align="center" cellpadding="2" cellspacing="0">
    <tr>
      <th>Brugernavn </th>
      <td><input name="login" type="text" class="textfield" id="login" /></td>
    </tr>
    <tr>
      <th> </th>
      <td> </td>
    </tr>
    <tr>
      <th>Fornavn </th>
      <td><input name="fname" type="text" class="textfield" id="fname" /></td>
    </tr>
    <tr>
      <th width="124">Efternavn </th>
      <td width="168"><input name="lname" type="text" class="textfield" id="lname" /></td>
    </tr>
    <tr>
      <th width="124">E-Mail </th>
      <td width="168"><input name="mail" type="text" class="textfield" id="mail" /></td>
    </tr>
    <tr>
      <th>Køn </th>
      <td width="168">Mand<input name="sex" type="radio" value="Mand" id="mail"  />  Kvinde<input name="sex" type="radio" value="Kvinde" id="mail"  /></td>
    </tr>
    <tr>
      <th> </th>
      <td> </td>
    </tr>
    <tr>
      <th>Password </th>
      <td><input name="password" type="password" class="textfield" id="password" /></td>
    </tr>
    <tr>
      <th>Bekræft Password </th>
      <td><input name="cpassword" type="password" class="textfield" id="cpassword" /></td>
    </tr>
    <tr>
      <td> </td>
      <td><input type="submit" name="Submit" value="Register" /></td>
    </tr>
  </table>
</form>
</body>
</html>

Avatar billede erikjacobsen Ekspert
02. november 2010 - 18:10 #1
Du har angivet fire feltnavne, men flere værdier.
02. november 2010 - 18:10 #2
Det der umiddelbart slaar mig er at du i din query forsoeger at indsaette seks vaerdier i fire felter:

//Opret INSERT query
    $qry = "INSERT INTO members(firstname, lastname, login, passwd) VALUES('$fname','$lname','$mail','$sex','$login','".md5($_POST['password'])."')";
    $result = @mysql_query($qry);

Skulle det have vaeret "INSERT INTO members(firstname, lastname, mail, sex, login, passwd).... eller noget i den retning?
Avatar billede intenz Novice
02. november 2010 - 18:10 #3
Her:
INSERT INTO members(firstname, lastname, login, passwd) VALUES('$fname','$lname','$mail','$sex','$login','".md5($_POST['password'])."')

Du prøver at indsætte 6 forskellige ting i 4 forskellige felter. Der skal være lige mange.
02. november 2010 - 18:10 #4
Saa det er jeg ikke ene om at mene.
02. november 2010 - 18:11 #5
Jeg maa hellere oprette et svar for at vaere med i raeset.
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