Avatar billede matz Nybegynder
17. marts 2008 - 22:33 Der er 12 kommentarer

Insert data class

Jeg har lavet en class hvor den skal indsætte data i Mysql. Den skriver denne fejl:

Column count doesn't match value count at row 1

Nogen der ved hvad der er galt?

Kode:

<?php
include_once('connect.php');
class DatabaseData {
   
    public $brugernavn;
    public $password;
    public $fornavn;
    public $efternavn;
    public $adresse;
    public $email;
 
   
    function InsertData($brugernavn,$password,$fornavn,$efternavn,$adresse,$email) {
     
        $this->navn = $navn;
         
  $test_2 = new sql();
  $test_2->connect();
  $test_2->q("INSERT INTO bruger
  (brugernavn,
  password,
  fornavn,
  efternavn,
  adresse,
  email,
  admin,
  ip)
 
  VALUES ('".$this->brugernavn = $brugernavn."',
  md5('".$this->password = $password."'),
  '".$this->fornavn = $fornavn."',
  '".$this->efternavn = $efternavn."',
  '".$this->adresse = $adresse."',
  '".$this->email = $email."')");
 
  $test_2->close();
  echo "Du er nu oprettet som bruger...";
    }
   
    function Show() {
        echo '<form action="" method="post" enctype="multipart/form-data" name="upload_form">
<table class="table" width="400" border="0">
  <tr>
      <td width="90" valign="top">Brugernavn:</td>
      <td width="310"><input type="text" name="brugernavn" size="37"><?php echo $message1; ?></td>
    </tr>
    <tr>
      <td width="90" valign="top">Password:</td>
      <td width="310"><input type="password" name="password" size="37"><?php echo $message2; ?>
     
      </td>
    </tr>
    <tr>
      <td width="90" valign="top">Fornavn:</td>
      <td width="310"><input type="text" name="fornavn" size="37"><?php echo $message3; ?>
     
      </td>
    </tr>
    <tr>
      <td width="90" valign="top">Efternavn:</td>
      <td width="310"><input type="text" name="efternavn" size="37"><?php echo $message4; ?>
     
      </td>
    </tr>
    <tr>
      <td width="90" valign="top">Adresse:</td>
      <td width="310"><input type="text" name="adresse" size="37"><?php echo $message5; ?></td>
    </tr>

  <tr>
    <td width="90" valign="top">E-mail: </td>
  <td width="310"><input type="text" name="email" size="37"><?php echo $message6; ?></td>
  </tr>
    </table>

<br><input type="submit" name="Submit" value="Upload" />
</form>'
        ;
    }
}
$et = new DatabaseData();
if (isset($_POST['Submit'])) {
    echo $et->InsertData($_POST['brugernavn'],$_POST['password'],$_POST['fornavn'],$_POST['efternavn'],$_POST['adresse'],$_POST['email']);
}
else {
$et->Show();   
}


?>
Avatar billede erikjacobsen Ekspert
17. marts 2008 - 22:39 #1
Du skal vel så enten indsætte en værdi for admin og ip, eller lade være med at nævne dem, så de får default værdier.
Avatar billede erikjacobsen Ekspert
17. marts 2008 - 22:41 #2
Men hvor kommer den $navn fra? Og er det ikke mere læseligt at lave de tilordninger udenfor SQL-sætningen?
Avatar billede matz Nybegynder
17. marts 2008 - 22:43 #3
Ja det virkede... Jo men hvis jeg laver det udenfor klassen, hvordan skal jeg så definere det inde i klassen?
Avatar billede erikjacobsen Ekspert
17. marts 2008 - 22:47 #4
Du skal ikke lave det udenfor klassen, bare udenfor din sql-sætning.

Og så skal du selvfølgelig lige tænke over det der med sql-injection, inden du lægger din kode på nettet til fri afbenyttelse. Hvorfor ikke bruge mysqli-funktionerne med parameters?
Avatar billede matz Nybegynder
17. marts 2008 - 22:50 #5
Hvordan udenfor sql-sætningen, er ikke helt med?

Jeg er ikke lige så bekendt med Mysqli, har kun fået set lidt på det. Med sikkerhed har jeg ikke sat fokus på det, da jeg skulle få dette her til at virke først.
Avatar billede erikjacobsen Ekspert
17. marts 2008 - 22:53 #6
Du skriver

$this->brugernavn = $brugernavn

(og de andre) før sql-sætningen, og bruger enten $this->brugernavn eller $brugernavn i sql-sætningen. Det er for læselighedens skyld.

Det er så i orden at vente med det der med sikkerhed, så længe du leger. Men lægger du kode på nettet, der er åbent for sql-injections (eller andet), så kan man få sig mange sjove overraskelser ;)
Avatar billede matz Nybegynder
17. marts 2008 - 22:57 #7
Ja det gav lidt bedre overblik. Normalt plejer jeg at bruge mysql_real_escape_string, Andre der måske er bedre at bruge? ;)
Avatar billede erikjacobsen Ekspert
17. marts 2008 - 23:00 #8
mysql_real_escape_string er fin nok - men det er træls hvis PHP er indstillet til magic-quotes. Men kig på mysqli-funktionerne en dag.
Avatar billede matz Nybegynder
17. marts 2008 - 23:02 #9
Beskytter mysqli bedre?
Avatar billede erikjacobsen Ekspert
17. marts 2008 - 23:06 #10
Kun på den måde, at du ikke selv skal huske at gøre noget.
Avatar billede matz Nybegynder
17. marts 2008 - 23:08 #11
Okay tak for det. Lig et svar :)
Avatar billede erikjacobsen Ekspert
17. marts 2008 - 23:09 #12
Jeg samler slet ikke på point, tak. Svar selv, accepter eget svar.
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