Avatar billede michaeltryl Seniormester
10. marts 2007 - 11:58 Der er 9 kommentarer og
1 løsning

tjekke om tabel findes og om den ser rigtig ud

er der en måde hvorpå jeg kan tjekke om en tabel er oprettet og om den ser ud som den skal.

f.eks.
jeg har en install fil til et cms i denne oprettes
tabellen brugere

    CREATE TABLE `brugere` (
`brugerid` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`brugernavn` VARCHAR( 255 ) NOT NULL ,
`password` VARCHAR( 255 ) NOT NULL ,
`email` VARCHAR( 255 ) NOT NULL ,
`fornavn` VARCHAR( 255 ) NOT NULL ,
`efternavn` VARCHAR( 255 ) NOT NULL ,
`birth` DATE NOT NULL ,
`web` VARCHAR( 255 ) NOT NULL ,
`interesser` TEXT NOT NULL ,
`gruppe` VARCHAR( 255 ) NOT NULL DEFAULT 'bruger',
`oprettet` DATETIME NOT NULL ,
`laston` DATETIME NOT NULL ,
`ontid` DATETIME NOT NULL ,
`online` VARCHAR( 3 ) NOT NULL DEFAULT 'nej'
) ENGINE = innodb;

hvis der så på et tidspunkt skal insættes flere felter i denne tabel ville det være smart bare at rette den til

    CREATE TABLE `brugere` (
`brugerid` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`brugernavn` VARCHAR( 255 ) NOT NULL ,
`password` VARCHAR( 255 ) NOT NULL ,
`email` VARCHAR( 255 ) NOT NULL ,
`fornavn` VARCHAR( 255 ) NOT NULL ,
`efternavn` VARCHAR( 255 ) NOT NULL ,
`birth` DATE NOT NULL ,
`web` VARCHAR( 255 ) NOT NULL ,
`interesser` TEXT NOT NULL ,
`city` VARCHAR( 255 ) NOT NULL ,
`postnr` VARCHAR( 4 ) NOT NULL ,
`gruppe` VARCHAR( 255 ) NOT NULL DEFAULT 'bruger',
`oprettet` DATETIME NOT NULL ,
`laston` DATETIME NOT NULL ,
`ontid` DATETIME NOT NULL ,
`online` VARCHAR( 3 ) NOT NULL DEFAULT 'nej' ,
`mailkode` VARCHAR( 255 ) NOT NULL DEFAULT '0'
) ENGINE = innodb;

og når siden så loades tjekke scriptet selv for om alle felter er der i tabellen og hvis ikke skal de oprettes. Hvis man ikke kan tjekke om felterne er oprettet kan man så bare tjekke om tabellen findes?
Avatar billede showsource Seniormester
10. marts 2007 - 12:24 #1
Hentet fra manuelen,

<?php
$result = mysql_query("SHOW COLUMNS FROM sometable");
if (!$result) {
    echo 'Kunne ikke eksekvere forespørgslen: ' . mysql_error();
    exit;
}
if (mysql_num_rows($result) > 0) {
    while ($row = mysql_fetch_assoc($result)) {
        print_r($row);
    }
}
?>
Avatar billede showsource Seniormester
10. marts 2007 - 12:26 #2
Avatar billede michaeltryl Seniormester
10. marts 2007 - 12:57 #3
jeg får en fejl.

$result = mysql_query("SHOW COLUMNS FROM tabel_test");
if (!$result) {

    $opret_test = mysql_query("
CREATE TABLE `tabel_test` (
`test_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`bruger` VARCHAR( 255 ) NOT NULL
) ENGINE = innodb;
") or die(mysql_error());

}
if (mysql_num_rows($result) > 0) {
    while ($row = mysql_fetch_assoc($result)) {

$udvid_test = mysql_query("
ALTER TABLE `tabel_test` ADD `pass` VARCHAR( 255 ) NOT NULL DEFAULT '0' AFTER `test_id` ;
    ") or die(mysql_error());   
    }
}

der kommer denne fejl
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\wamp\www\demo\tabel-test.php on line 45
hvor linie 45 er denne
if (mysql_num_rows($result) > 0) {

jeg er heller ikke helt sikker på at det efter linien er rigtig. den opretter fint tabellen først, men derefter skal den jo oprette de felter som ikke findes
Avatar billede showsource Seniormester
10. marts 2007 - 14:07 #4
1. Først henter du fra en tabel som måske ikke findes ! Brug evt. mysql_list_tables() for at tjekke om den findes
2. Bruger du ikke mysql_list_tables(), så husk at køre din $result query igen, efter oprettelse, inde i if(!$result).
3. Om feltet findes i forvejen, da er du nødt til at ha' et array med nye feltnavne, og så som min. bruge $row["Field"] til endnu et array, for at sammenligne forskelle på de to arrays
Avatar billede showsource Seniormester
10. marts 2007 - 14:08 #5
Og hvis $result er sand, skal du jo heller ikke for hvert felt i $result oprette et nyt felt (med samme navn) i tabellen. ;O)
Avatar billede michaeltryl Seniormester
10. marts 2007 - 14:59 #6
jeg har nu forsøgt, men jeg kan ikke rigtig få den til at udvide tabellen med de nye felter

$result = mysql_query("SHOW COLUMNS FROM tabel_test");
if (!$result) {

    $opret_test = mysql_query("
CREATE TABLE `tabel_test` (
`test_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`bruger` VARCHAR( 255 ) NOT NULL
) ENGINE = innodb;
") or die(mysql_error());
}

$result = mysql_query("SHOW COLUMNS FROM tabel_test");
if (mysql_num_rows($result) > 0) {
    while ($row = mysql_fetch_assoc($result)) {
$nye = array("password");
$nye[] = "post";

if ($row["Field"] != $nye)
{
if($nye == "password")
{
$udvid_test = mysql_query("
ALTER TABLE `tabel_test` ADD `password` VARCHAR( 255 ) NOT NULL DEFAULT '0' AFTER `test_id` ;
    ") or die(mysql_error());   
}
}
else
{
echo"no<br>";


  }
}
Avatar billede showsource Seniormester
11. marts 2007 - 11:28 #7
<?php
$tabel = "tabel_test";

if (false == ($result = mysql_query("SHOW COLUMNS FROM `". $tabel ."`"))) {

    mysql_query("
    CREATE TABLE `". $tabel ."` (
    `test_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `bruger` VARCHAR( 255 ) NOT NULL
    ) ENGINE = innodb;
    ") or die(mysql_error());

    $result = mysql_query("SHOW COLUMNS FROM `". $tabel ."`");
}

$new = array();
$new["tal"] = "INT NOT NULL";
$new["tekst"] = "VARCHAR ( 255 ) NOT NULL";
$new["tester"] = "INT NOT NULL";

    while ($row = mysql_fetch_assoc($result)) {

        if (isset($new[$row["Field"]])) { // hvis feltnavn findes, slet fra $new
        unset($new[$row["Field"]]);
        }

    }

mysql_free_result($result);

/*
echo"<pre>";
print_r($new);
echo"</pre>";
*/

if(!empty($new)) {

$addsql = "ALTER TABLE `". $tabel ."`";
$ialt = 0;

    foreach($new as $felt => $value) {
    $ialt++;

    $addsql .= " ADD `". $felt ."` ". $value;
        if($ialt < count($new)) {
        $addsql .= ",";
        }

    }

echo $addsql;
mysql_query($addsql) or die (mysql_error());

}else{
echo"Feltnavne findes, men hvilken type de er, er ikke tjekket! :O)";
}


?>
Avatar billede michaeltryl Seniormester
11. marts 2007 - 11:50 #8
Mange tak for hjælpen. Bare kom med et svar
Avatar billede showsource Seniormester
12. marts 2007 - 07:57 #9
ingen point, ellers tak.
Avatar billede michaeltryl Seniormester
12. marts 2007 - 13:38 #10
okay jeg siger mange tak for hjælpen så.
lukker
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