Fejlkode ved brug af CREATE TABLE i app.php - hjælp søges

Jeg fik en fin public function til min app.php, og den ligner lige dét jeg havde brug for, men:
Jeg får fejlkode når jeg kalder den med " <?php $app->CreateTable($_POST['okNavn']); ?>"
får jeg:
"Fatal error: Uncaught Error: Call to a member function setAttribute() on null in C:\xampp\htdocs\app.php:44 Stack trace: #0 C:\xampp\htdocs\Loenberegning\test.php(50): minAwesomeApp->CreateTable('Testtabel') #1 {main} thrown in C:\xampp\htdocs\app.php on line 44"
og linie 44 i app.php:
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Jeg kan se, at den har fat i den rigtige POST (Testtabel), og jeg har forsøgt mig med alt jeg kan finde på (bl.a. at outline line 44 - og så kører den fejlfri gennem, bare uden at lave tabellen).
Hvis jeg er off topic, hører jeg gerne om hvor der er et forum, jeg kan stille denne slags spørgsmål.
Med venlig hilsen
Steen

Hej @Steen
Tak for dit indlæg her på forummet. createTable() er ikke en funktion som vi har udviklet, så det er svært for mig at hjælpe dig uden at kende yderligere til din kode. Kan du ikke sende relevante kode-stumper ind i indlægget her på vores forum, så kan vi bedre hjælpe dig.
Du sætter kode ind ved at bruge "Indsæt code"-knappen i vores editor:
Med venlige hilsner Daniel Bahl (@db)
CEO – v5.dk ApS

Det drejer sig om nedenstående (som jeg fik i svaret på "Hvordan laver man en "public function CreateTable" i app.php.??"):
public function CreateTable($table_name) {
try {
// så vi kan få fejlbeskeder
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// sql til at lave din database tabel
$sql = "CREATE TABLE IF NOT EXISTS $table_name (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY
)";
// prøv at lav databasen
$conn->exec($sql);
} catch (PDOException $e) {
// får vi en fejl, viser vi den efter vores sql kode
echo $sql . "<br>" . $e->getMessage();
}
}
// Vi kan nu kalde funktionen med eksempelvis:
$app->CreateTable("navn_paa_tabel");
Der er ingen tvivl om, at det var denne jeg manglede (hvis jeg ellers kan få den til at virke ).
Hvis du skulle undre dig over hvorfor jeg har brug for en sådan funktion kan dette (noget ubehjælpsomme - man er vel amatør) måske give dig en ide:
Med venlig hilsen
Steen

Jeg kunne forestille mig, at fejlen ligger i, at koden ikke er skrevet til den app.php som bliver brugt i "Byg et brugersystem PHP" (og som jeg med kyshånd gør brug af ;-) ).
Jeg sidder selvfølgelig og "fedter lidt" med en tilpasning, men forstår ikke rigtigt koden - bortset fra, at det kun er nødvendigt at sende $table_name til CreateTable (altså ikke den $query, som skal sendes til de øvrige funktioner i app.php).
Med venlig hilsen
Steen

Hej @Steen
Jeg har nu haft tid til at bygge en funktion der er kompatibel med vores app.php fil, her er hvad du skal gøre:
1) Åbn app.php filen og indsæt denne kode et tilfældigt sted, på lige fod med de andre "public function"-linjer der allerede eksisterer.
Koden her laver en ny funktion, som vi kan kalde, der hedder "DatabaseCreateTable". Funktionen laver en ny Tabel i din database med 3 felter: id, navn og adresse.
public function DatabaseCreateTable($table_name) {
try {
// Rå SQL-kode der opretter en ny "Tabel" i din database:
$query = "CREATE TABLE IF NOT EXISTS $table_name (
id int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
navn varchar(20) NOT NULL,
adresse varchar(30) NOT NULL
)";
// Kalder vores "Prepare" der forbereder ovenstående query
$stmt = self::$db->prepare($query);
// Eksekverer vores query
$stmt->execute();
// Returnerer status fra vores eksekvering
return $stmt;
} catch (PDOException $e) {
// Catch fejlbesked og echo den ud
echo 'Der opstod en fejl - fejlbesked: ' . $e->getMessage();
exit;
}
}
2) Lav en ny fil du kalder f.eks. test.php. Inde i denne fil, skal du indsætte følgende linjer, for at kalde den nye "DatabaseCreateTable"-funktion. F.eks. vil følgende kode, oprette en ny tabel i din database der hedder "MinNyeTabel".
<?php
// Inkluderer vores class
include("app.php");
$app = new minAwesomeApp;
$app->DatabaseCreateTable('MinNyeTabel');
Når du kører følgende, og logger ind i din database, har du nu den nye omtalte tabel:
Redigeret af
@db
d. 19.12.2016 kl. 19:24 Med venlige hilsner Daniel Bahl (@db)
CEO – v5.dk ApS

Det er så smukt, at man næsten får tårer i øjnene
Der går dog et par dage inden jeg får tid til at prøve det af for alvor - jeg skal (selvfølgelig)også lige rette til de rigtige (start-)kolonner startDato og slutDato (resten skal i lighed med tabeloprettelsen foregå fra "admin front end" (ALTER TABLE som jeg skal "lege lidt" med, inden det bliver et spørgsmål)
Tak for endnu et hurtigt svar.
Redigeret af
@Steen
d. 19.12.2016 kl. 21:40 Med venlig hilsen
Steen