Avatar billede flashback83 Nybegynder
07. december 2006 - 23:21 Der er 9 kommentarer og
1 løsning

MySQLi til MySQL

Jeg er sammen med min gruppe, igang med eksamensprojekt, og har lavet et website i PHP. Problemet er at vi har kodet lokalt på computeren og støttet os til en ny bog, som baserer koderne på MySQLi... Det understøtter vores webhotel bare ikke!!!

Ingen af os er hjemmevante nok til hurtigt at kunne skrive koderne om til "gammeldags" mysql, og projektet skal afleveres i næste uge.

Er der en som kan hjælpe?? Evt. bare med enkelte af filerne, så vi kan "kigge efter" og forhåbentlig få de andre til at virke selv?

Rasmus
Avatar billede flashback83 Nybegynder
07. december 2006 - 23:25 #1
Her er en af filerne:

<?php

$username = $_POST['username'];
$pswrd = $_POST['pswrd'];
$pswrd2 = $_POST['pswrd2'];
$email = $_POST['email'];
$name = $_POST['name'];
$diver = $_POST['diver'];
$dives_no = $_POST['dives_no'];
$cert_sys = $_POST['cert_sys'];
$cert_lvl = $_POST['cert_lvl'];
$fav_site = $_POST['fav_site'];
$interests = $_POST['interests'];
$pic = $_POST['pic'];

if(!get_magic_quotes_gpc())
{
    $username = addslashes($username);
    $pswrd = addslashes($pswrd);
    $pswrd2 = addslashes($pswrd2);
    $email = addslashes($email);
    $name = addslashes($name);
    $diver = addslashes($diver);
    $dives_no = addslashes($dives_no);
    $cert_sys = addslashes($cert_sys);
    $cert_lvl = addslashes($cert_lvl);
    $fav_site = addslashes($fav_site);
    $interests = addslashes($interests);
    $pic = addslashes($pic);
}

$pswrd = sha1($pswrd);
   
@ $db = new mysqli("host", "bruger", "password" , "DB"); //opretter forbindelse til serveren med host, username, password, database
   
if (mysqli_connect_errno())
    die('Kunne ikke oprette forbindelse til database-serveren');

$result = $db->query("SELECT * FROM tbl_user WHERE username='$username'" );
    if(!$result)
        die('Kunne ikke udføre forespørgsel');
    if($result->num_rows>0)
        die('Brugernavnet er optaget - Gå tilbage og vælg et andet');   
   
$query = "INSERT INTO tbl_user (username, pswrd, email, name, diver, dives_no, cert_sys, cert_lvl, fav_site, interests, pic) VALUES ( '$username', '$pswrd', '$email', '$name', '$diver', '$dives_no', '$cert_sys', '$cert_lvl', '$fav_site', '$interests', '$pic')";

$result = $db->query($query);
echo mysql_error();

if($result)
    echo $db->affected_rows.' Bruger registreret.';
    $db->close();
   
?>
Avatar billede fojensen Nybegynder
08. december 2006 - 09:00 #2
Jeg tror bare det er databasekaldene der skal tilpasses...

linier som...
@ $db = new mysqli("host", "bruger", "password" , "DB"); //opretter forbindelse til serveren med host, username, password, database
og...   
if (mysqli_connect_errno())
skal tilpasses som bestrevet på http://dk2.php.net/manual/da/ref.mysql.php under eksempel 1

håber det var lidt hjælp til selvhjælp.
Avatar billede tdafoobar Nybegynder
08. december 2006 - 09:10 #3
Hvor mange filer drejer det sig om ? Hvis det er mere end 10 er det nok hurtigere at skrive en abstration af mysqli som bruger de almindelige mysql_* funktioner.

Jeg har skrevet en lign. til PDO :-)
Avatar billede tdafoobar Nybegynder
08. december 2006 - 09:11 #4
Derudover er jeres webhotel noget skrammel.. køb et andet :-) Det er ligeså fornuftigt at bruge en gammel version af php, som det er at kører windows 3.11 i år 2006.
Avatar billede tdafoobar Nybegynder
08. december 2006 - 09:18 #5
Her er lidt at arbejde ud fra:

<?php

class mysqli
{
    var $conn;
    var $db;

    var $affected_rows;
    var $insert_id;

    function mysqli($hostname,$username,$password,$database) {
        $this->conn = mysql_connect($hostname,$username,$password);
        $this->db  = mysql_select_db($database);
    }

    function query($sql) {
        $res = mysql_query($sql);
        if(mysql_affected_rows()) {
            $this->affected_rows = mysql_affected_rows();
        } elseif(mysql_insert_id()) {
            $this->insert_id = mysql_insert_id();
        }
        return mysqli_result($res);
    }
}

class mysqli_result
{
    var $num_rows;
    var $res;

    function mysqli_result($res) {
        $this->res = $res;
        $this->num_rows = mysql_num_rows($res);
    }
}

function mysqli_connect_errno() {
    return mysql_errno();
}

?>
Avatar billede tdafoobar Nybegynder
08. december 2006 - 09:19 #6
hint: læg det i en seperat fil kaldet mysqli.php, og wrap den ind i:

if(!class_exists('mysqli')) {
    require_once 'mysqli.php';
}
Avatar billede flashback83 Nybegynder
08. december 2006 - 14:54 #7
Du har fuldstændig ret! webhotelet sutter... Jeg troede man mere eller mindre kunne regne med opdaterede versioner, men så blev jeg så meget klogere. I øvrigt gælder det for både 1go.dk og one.com at de ikke har mysqli-extension - Bare så du ved det til en anden gang :)
Vi har været så heldige at finde en ven, som kunne klare en server med mysqli, så vi slipper for omskrivningen af koderne.

Tak for hjælpen!
Hvis du samler point, så smid et svar, så får du dem. Det var en god ide at skrive sine egne funktioner...

Rasmus
Avatar billede tdafoobar Nybegynder
10. december 2006 - 10:22 #8
Egen abstraction er fin, men pas på det ikke bliver for hackish i enden, f.eks. PHPBB har en elendig DB class ;)

Men nej tak, giver ikke så meget for pointsystemet, gem dine points til at ask flere questions.
Avatar billede flashback83 Nybegynder
10. december 2006 - 13:38 #9
Sjovt du siger det - jeg har netop selv stemt på at afskaffe pointsystemet. Det betyder ikke noget for dem som er gode til programmeringen og dem, som virkelig har brug for at spørge, har ikke så meget mulighed for at tjene point ved at svare... tåbeligt!
Tak for hjælpen i hvert fald
Avatar billede ssohl Nybegynder
02. februar 2007 - 01:14 #10
Nu har jeg studeret ovenstående og er også i samme uheldige situation med et dårligt webhotel. Jeg har prøvet at omskrive kaldene men uden held. Er der nogen som kan hjælpe? Koden ser sådan ud og bliver required_once fra en config.php - kan jeg omskrive den:

<?php
/**
* Class CDB
*
* @Purpose: MySQLi database wrapper, adds exceptions
*
*/   
/* Create custom exception classes */
class ConnectException extends Exception {}
class QueryException extends Exception {}

class CDB extends mysqli
{
    function __construct()
    {
        /* Pass all arguments passed to the constructor on to the parent's constructor */
        $args = func_get_args();
        eval("parent::__construct(" . join(',', array_map('add_single_quotes', $args)) . ");");

        /* Throw an error if the connection fails */
        if(mysqli_connect_error())
        {
            throw new ConnectException(mysqli_connect_error(), mysqli_connect_errno());
        }
    }
   
    public function query($query)
    {
        $result = parent::query($query);
        if(mysqli_error($this))
        {
            throw new QueryException(mysqli_error($this), mysqli_errno($this));
        }
        return $result;
    }
}
?>
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