2016-08-17 7 views
-2

Ich habe den folgenden Code, der eine Tabelle erstellen und mit zwei Benutzern füllen sollte. Die create table-Abfrage funktioniert, die Einfügung jedoch nicht. Jede Hilfe wäre willkommen.Wie füge ich PHP-Variablen in eine MySQL-Tabelle ein?

<?php 
    require_once 'login12.php'; 
    $link = mysqli_connect($db_hostname, $db_username, $db_password); 
    if (!$link) die ("Unable to connect to MySQL: " .mysqli_error()); 
    mysqli_select_db($link, $db_database) or die("Unable to select database: "  .mysqli_error()); 
$query = "CREATE TABLE `users` (
     forename VARCHAR(32) NOT NULL, 
     surname VARCHAR(32) NOT NULL, 
     username VARCHAR(32) NOT NULL UNIQUE, 
     password VARCHAR(32) NOT NULL)"; 
$result = mysqli_query($link, $query); 
if (!$result) die ("Database access failed: " .mysqli_error()); 
$salt1 = 'G3tD0wnonIT!'; 
$salt2 = 'Y0uwant2'; 
$forename = 'Bill'; 
$surname = 'Smith'; 
$username = 'bsmith'; 
$password = 'mysecret'; 
$token = sha1("$salt2$password$salt1"); 
add_user($forename, $surname, $username, $token); 
$forename = 'Pauline'; 
$surname = 'Jones'; 
$username = 'pjones'; 
$password = 'acrobat'; 
$token = sha1("$salt2$password$salt1"); 
add_user($forename, $surname, $username, $token); 
function add_user($fn, $sn, $un, $pw) { 
    $query = "INSERT INTO `users` (`forename`, `surname`, `username`, `password`) VALUES ('$fn', '$sn', '$un', '$pw')"; 
    $result = mysqli_query($link, $query); 
    if (!$result) die ("Database access failed: " .mysqli_error()); 
} 
?> 

Antwort

1

$link ist für die Funktion außerhalb des Bereichs, so dass es keinen Zugriff darauf hat. Sie müssen es als Parameter an Ihre Funktion übergeben.

add_user($link, $forename, $surname, $username, $token); 
function add_user($link, $fn, $sn, $un, $pw) { 
    $query = "INSERT INTO `users` (`forename`, `surname`, `username`, `password`) VALUES ('$fn', '$sn', '$un', '$pw')"; 
    $result = mysqli_query($link, $query); 
    if (!$result) die ("Database access failed: " .mysqli_error($link)); 
} 
+0

Danke, aber es funktioniert immer noch nicht :( –

+0

@vaughnjovi Ich habe einen Fehler in meinem Beispiel. Versuchen Sie, den aktualisierten Code, den ich zur Verfügung gestellt und sehen, ob das für Sie arbeitet. –

+0

Ich habe bereits versucht, dass, bevor Sie Ihren Kommentar und leider hat es nicht funktioniert. Manuel's Antwort hat auch nicht funktioniert. –

-1

Nun, mein früheres Plakat bereits darauf hingewiesen, dass $ link nicht im Rahmen Ihrer Funktion ist. Ich würde empfehlen, globale Anweisung über $ link als Parameter für die Funktion zu verwenden, weil es sauberer ist und Sie müssen es nicht jedes Mal übergeben.

add_user($forename, $surname, $username, $token); 
function add_user($fn, $sn, $un, $pw) { 
    global $link; 

    $query = "INSERT INTO `users` (`forename`, `surname`, `username`, `password`) VALUES ('$fn', '$sn', '$un', '$pw')"; 
    $result = mysqli_query($link, $query); 
    if (!$result) die ("Database access failed: " .mysqli_error()); 
} 
+0

Die Verwendung von 'global' ist eine sehr schlechte Praxis und sollte nicht gefördert werden. Es ist * nicht * sauberer und sollte nicht verwendet werden. –

+0

Für Dinge wie diese ist es ok imo, zumindest muss man es nicht jedes Mal passieren, was in einem solchen Fall noch schlimmer ist. –

+0

Das ist eigentlich sehr faul. Sie übergeben als Parameter * trivial * und verdeutlichen in der Funktionssignatur, was für die Funktion benötigt wird. Die Verwendung von global ist eine Quelle für schwer zu findende Fehler und erschwert das Testen. Sie sollten vermieden werden. –

Verwandte Themen