2017-05-27 3 views
-1

Beim Versuch, diese Website zu werfen, habe ich ein Problem beim Schreiben einer Funktion, um Moderatoren zu ermöglichen, Produkte hinzuzufügen. Ich habe den Code und die Fehlermeldungen, die ich erhalte, angehängt.

FUNKTION (von Produkt-model.php):
PHP-Variablen undefiniert, wenn an SQL-Anweisung übergeben

function insPro(){ 

// Create a connection object using the acme connection function 
    $db = acmeConnect(); 
// The SQL statement 
    $sql = 'INSERT INTO inventory (invName, invDescription, invImage, invThumbnail, invPrice, invStock, invSize, invWeight, invLocation, categoryId, invVendor, invStyle) 
     VALUES (:invName, :invDescription, :invImage, :invThumbnail, :invPrice, :invStock, :invSize, :invWeight, :invLocation, :categoryId, :invVendor, :invStyle)'; 
// Create the prepared statement using the acme connection 
    $stmt = $db->prepare($sql); 
    $stmt->bindValue(':invName', $invName, PDO::PARAM_STR); 
    $stmt->bindValue(':invDescription', $invDescription, PDO::PARAM_STR); 
    $stmt->bindValue(':invImage', $invImage, PDO::PARAM_STR); 
    $stmt->bindValue(':invThumbnail', $invThumbnail, PDO::PARAM_STR); 
    $stmt->bindValue(':invPrice', $invPrice, PDO::PARAM_STR); 
    $stmt->bindValue(':invStock', $invStock, PDO::PARAM_STR); 
    $stmt->bindValue(':invSize', $invSize, PDO::PARAM_STR); 
    $stmt->bindValue(':invWeight', $invWeight, PDO::PARAM_STR); 
    $stmt->bindValue(':invLocation', $invLocation, PDO::PARAM_STR); 
    $stmt->bindValue(':categoryId', $categoryId, PDO::PARAM_STR); 
    $stmt->bindValue(':invVendor', $invVendor, PDO::PARAM_STR); 
    $stmt->bindValue(':invStyle', $invStyle, PDO::PARAM_STR); 
// Insert the data 
    $stmt->execute(); 
// Ask how many rows changed as a result of our insert 
    $rowsChanged = $stmt->rowCount(); 
// Close the database interaction 
    $stmt->closeCursor(); 
// Return the indication of success (rows changed) 
    return $rowsChanged; 


Fehlermeldungen:

Notice: Undefined variable: invName in C:\CIT336\htdocs\acme\model\product-model.php on line 37 

Notice: Undefined variable: invDescription in C:\CIT336\htdocs\acme\model\product-model.php on line 38 

Notice: Undefined variable: invImage in C:\CIT336\htdocs\acme\model\product-model.php on line 39 

Notice: Undefined variable: invThumbnail in C:\CIT336\htdocs\acme\model\product-model.php on line 40 

Notice: Undefined variable: invPrice in C:\CIT336\htdocs\acme\model\product-model.php on line 41 

Notice: Undefined variable: invStock in C:\CIT336\htdocs\acme\model\product-model.php on line 42 

Notice: Undefined variable: invSize in C:\CIT336\htdocs\acme\model\product-model.php on line 43 

Notice: Undefined variable: invWeight in C:\CIT336\htdocs\acme\model\product-model.php on line 44 

Notice: Undefined variable: invLocation in C:\CIT336\htdocs\acme\model\product-model.php on line 45 

Notice: Undefined variable: categoryId in C:\CIT336\htdocs\acme\model\product-model.php on line 46 

Notice: Undefined variable: invVendor in C:\CIT336\htdocs\acme\model\product-model.php on line 47 

Notice: Undefined variable: invStyle in C:\CIT336\htdocs\acme\model\product-model.php on line 48 

Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'invName' cannot be null in C:\CIT336\htdocs\acme\model\product-model.php:50 Stack trace: #0 C:\CIT336\htdocs\acme\model\product-model.php(50): PDOStatement->execute() #1 C:\CIT336\htdocs\acme\products\index.php(158): insPro('Baseball', 'A round ball wi...', 'no-image.png', 'no-image.png', '5', '24', '6', '6', 'San Jose', '15', 'Diamond', 'Nylon') #2 {main} thrown in C:\CIT336\htdocs\acme\model\product-model.php on line 50 


Ich weiß nicht, warum die Variablen nicht definiert wäre, weil ich ähnliche Funktionen mit der gleichen Syntax in der gleichen Datei verwende, die gut funktionieren.
Was mache ich falsch im Code?

+0

Funktionen sind bereichsspezifisch. – chris85

+0

@ chris85 Ich verstehe, aber die Funktionen sind innerhalb des Gültigkeitsbereichs –

+0

Die Variablen innerhalb der Funktion sind nicht. '$ invName' ist niemals in' insPro' usw. definiert. – chris85

Antwort

1

Ihre Variablen sind undefiniert, da diese Funktion keine Kenntnis davon hat, dass diese existieren. Eine Möglichkeit, dieses Problem zu beheben, besteht darin, die Variablen als Parameter an Ihre Funktion zu übergeben. Zum Beispiel:

Funktion insPro (Ihre Variablen hier passieren) {Code geht hier}

Wenn das Verfahren innerhalb einer Klasse ist und diese Variablen sind innerhalb der Klasse Umfang verfügbar, dann müssen Sie nicht solche, wie sie passieren Parameter. Sie würden die Variablen ändern wie folgt zu lesen:

$ this-> invName

und so weiter.

+0

Nun, ich fühle mich wie ein Idiot ... Ich kann nicht glauben, dass ich meine Variablen insPro ($ all, $ up, $ in, $ hier) nicht gesetzt habe {}
Vielen Dank. –

+0

Gern geschehen. Sei nicht so hart zu dir selbst. Fehler passieren. –

Verwandte Themen