Avatar billede mega-hawk Nybegynder
18. oktober 2004 - 14:08 Der er 8 kommentarer og
1 løsning

OOP he he ;o)

I'm back IGEN :o/

Alså jeg er nu endt op med denne her kode som heller ik duer :o/

my_class.php
-------------
<?php
class connect {
        var $host;
        var $user;
        var $pass;
        var $db;

        function connect(){
                $this->host="localhost";
                $this->user="root";
                $this->pass="";
                $this->db="hawk";
        mysql_connect("$this->host","$this->user","$this->pass");
        mysql_select_db("$this->db");
        }

        function opret_bruger($id, $navn, $kode, $status, $dato) {
                $status=1;
                $dato = date('d/m/Y H:i:s');
                mysql_query("INSERT INTO bruger (id, navn, kode, status, dato) VALUES
            ('$id','$_REQUEST[navn]','$_REQUEST[kode]','$status','$dato'");
            }
        }

Min user.php
-------------
<?php
require("my_class.php");
?>
<center>
Opret en ny bruger<br><br><br>
</center>
<form method="post" action=''>
Ønskede chat navn:&nbsp;
<input type="text" name="navn"><br><br>
Skriv ønskede kode:
<input type="password" name="kode"><br><br>
<input type="submit" name="opret" value="Opret bruger">
</form>
<?php
if ($_REQUEST['opret']){
        $opret = new connect();
        $opret->opret_bruger($id, $navn, $kode, $status, $dato);
        echo "$this->navn er nu oprettet";
}?>

Hvad er der galt?
Avatar billede bojo Nybegynder
18. oktober 2004 - 14:44 #1
umiddelbart
echo "$this->navn er nu oprettet";
skal være
echo "$opret->navn er nu oprettet";
Avatar billede Slettet bruger
18. oktober 2004 - 15:04 #2
id på brugertabellen er vel en autoincrement? Så skal du slet ikke indsætte den.

Både dato og status er defineret inde i objektet, så de skal ikke overføres som parametre.

Jeg ville nok have valgt at lade datofeltet i databasen være et format, som MySQL selv forstår og sætte typen til DATETIME. (Dette har jeg ikke rettet.)

Og prøv lige at bestemme dig til hvordan du laver indrykninger i koden, for det kan blive meget uoverskueligt, hvis man ikke bruger et fast system. (Jeg har indrykket, som jeg foretrækker nednunder.)

my_class.php
-------------
<?php
class connect {
  var $host;
  var $user;
  var $pass;
  var $db;

  function connect(){
    $this->host="localhost";
    $this->user="root";
    $this->pass="";
    $this->db="hawk";
    mysql_connect("$this->host","$this->user","$this->pass");
    mysql_select_db("$this->db");
  }

  function opret_bruger($navn, $kode) {
    $status=1;
    $dato = date('d/m/Y H:i:s');
    $result=mysql_query("INSERT INTO bruger (navn, kode, status, dato) VALUES
      ('$navn','$kode','$status','$dato'");
    if(mysql_affected_rows($result)==1){
      return true; // En række blev oprettet.
    } else {
      return false; // Der blev ikke oprettet en række - måske findes brugernavnet allerede?
    }   
  }
}

?>

user.php
-------------
<?php
require("my_class.php");
?>
<center>
Opret en ny bruger<br><br><br>
</center>
<form method="post" action=''>
Ønskede chat navn:&nbsp;
<input type="text" name="navn"><br><br>
Skriv ønskede kode:
<input type="password" name="kode"><br><br>
<input type="submit" name="opret" value="Opret bruger">
</form>

<?php
if ($_POST['opret']){
  $opret = new connect();
  if($opret->opret_bruger($_POST['navn'], $_POST['kode'])){
    echo $_POST['navn'] . " er nu oprettet";
  } else {
    echo $_POST['navn'] . " kunne ikke oprettes";
  }
}
?>
Avatar billede Slettet bruger
18. oktober 2004 - 15:06 #3
Rettelse: mysql_affected_rows($result) skulle bare have været mysql_affected_rows()
Avatar billede mega-hawk Nybegynder
18. oktober 2004 - 15:26 #4
hm... hvis man kigger tilbage for et par dage siden hvor jeg startede på OOP og så til må i da vel sige jeg har lært lidt eller?
Avatar billede mega-hawk Nybegynder
18. oktober 2004 - 15:45 #5
Nå men sandbox det virker ik helt (endnu) men du bliver sgu lige nødt til at forklare mig et par småting hvis du gider.
Alså den variable som jeg sætter = new noget skal jeg så sætte i en if sætning med -> mod den function jeg vil bruge. Rigtig?
Og når du i user.php skriver om navnet kan oprettes eller ikke kan, hvorfor så også tage return true eller false med i class filen?
og hvorfor alt det her kode:
function opret_bruger($navn, $kode) {
    $status=1;
    $dato = date('d/m/Y H:i:s');
    $result=mysql_query("INSERT INTO bruger (navn, kode, status, dato) VALUES
      ('$navn','$kode','$status','$dato'");
    if(mysql_affected_rows($result)==1){
      return true; // En række blev oprettet.
    } else {
      return false; // Der blev ikke oprettet en række - måske findes brugernavnet allerede?
    }   
  }
hvorfor kan man ikke bare nøjes med:
function opret_bruger($navn, $kode) {
    $status=1;
    $dato = date('d/m/Y H:i:s');
    $result=mysql_query("INSERT INTO bruger (navn, kode, status, dato) VALUES
      ('$navn','$kode','$status','$dato'");
  }
Håber da ikke jeg går jeg på, men jeg ønsker alså at lære det her crap her.
Avatar billede Slettet bruger
18. oktober 2004 - 15:54 #6
I user.php ved den kun om navnet kunne oprettes fordi der blev returneret true eller false. Og jeg laver de returkoder i funktionerne fordi jeg synes det er god skik at lade omverdenen vide, hvis det, de bad om ikke kunne lade sig gøre. (Og det gælder så på to niveauer i denne situation.)

Grunden til at jeg lavede en if($opret->opret_bruger($_POST['navn'], $_POST['kode'])) var netop at jeg havde sat den til at returnere noget, der kunne bruges af en if. Ellers har koden i user.php ikke en chance for at vide, om det lykkedes.

Jeg kunne også have gemt svaret fra metoden i en variabel og teste på den i stedet:

$svar=$opret->opret_bruger($_POST['navn'], $_POST['kode']);

if($svar){
  echo $_POST['navn'] . " er nu oprettet";
} else {
  echo $_POST['navn'] . " kunne ikke oprettes";
}
Avatar billede mega-hawk Nybegynder
18. oktober 2004 - 16:00 #7
hm ok.
Tror jeg begynder at forstå lidt, men øh kan du se hvor der umiddelbart ville være en fejl siden den IKKE opretter noget?
Avatar billede Slettet bruger
18. oktober 2004 - 16:19 #8
Måske er der sket en fejl undervejs et sted.

Prøv at sætte

or die(mysql_error)

på dine kald til mysql_query(), mysql_connect() og mysql_select_db()
Avatar billede Slettet bruger
18. oktober 2004 - 18:13 #9
Efter lidt lokal afprøvning og lidt snak over msn fandt vi frem til følgende:

<?php
class connect {
  var $host;
  var $user;
  var $pass;
  var $db;

  function connect(){
    $this->host="localhost";
    $this->user="root";
    $this->pass="";
    $this->db="hawk";
    mysql_connect($this->host,$this->user,$this->pass)or die(mysql_error);
    mysql_select_db($this->db) or die(mysql_error);
  }

  function opret_bruger($navn, $kode) {
    $status=1;
    //$dato = date('d/m/Y H:i:s');
    $result=mysql_query("INSERT INTO bruger (navn, kode, status) VALUES
      ('$navn','$kode',$status)") or die(mysql_error());
    if(mysql_affected_rows()==1){
      return true;
          } else {
      return false;
    }
  }
}

?>
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