Ich fühle mich wie ich dieses ganze Szenario wirklich übermäßig verkomplizieren. Hoffentlich kann jemand helfen.PHP PDO lastinsertid der vorherigen Funktion
Ich habe ein Formular, das Daten an zwei Tabellen übermittelt (items
und uploads
). Die Formulardaten gehen an items
und der Anhang an uploads
. Grundsätzlich möchte ich, dass beide Tabellen eine entsprechende itemId
Spalte haben.
Meine beiden Funktionen create()
und uploadFile()
funktionieren beide. Ich bin mir jedoch nicht sicher, wie ich den lastInsertId-Wert $crud->create()
in meiner Variablen $itemId
verwenden soll - siehe Kommentare in meinem Code.
Reduzierte Versionen meiner Funktionen sind unten, einschließlich der Kommentare.
class.crud.php
class crud {
private $db;
function __construct($DB_con) {
$this->db = $DB_con;
}
public function create($inv, $ip, $make){
$stmt = $this->db->prepare("INSERT INTO items (inv,ip,make) VALUES (:inv,:ip,:make");
$stmt->bindparam(":inv", $inv);
$stmt->bindparam(":ip", $ip);
$stmt->bindparam(":make", $make);
$stmt->execute();
return true;
}
public function uploadFile($itemId, $inv, $file, $file_type, $file_size) {
$stmt = $this->db->prepare("INSERT INTO uploads (itemId,inv,file,type,size) VALUES (:itemId,:inv,:file,:file_type,:file_size)");
$stmt->bindParam(":itemId", $itemId); // inserts 777
$stmt->bindParam(":inv", $inv);
$stmt->bindparam(":file", $file);
$stmt->bindparam(":file_type", $file_type);
$stmt->bindparam(":file_size", $file_size);
$stmt->execute();
return true;
}
}
Add-data.php
if (isset($_POST['btn-save'])) {
$itemId = '777'; //this successfully inserts 777 into the uploads.itemId teble, but i'd like to insert the lastInsertId value of $crud->create()
$inv = $_POST['inv'];
$ip = $_POST['ip'];
$make = $_POST['make'];
$file = rand(1000, 100000) . "-" . $_FILES['file']['name'];
$file_loc = $_FILES['file']['tmp_name'];
$file_size = $_FILES['file']['size'];
$file_type = $_FILES['file']['type'];
$folder = "uploaded_files/";
if ($crud->create($inv, $ip, $make)) {
echo 'success';
} else {
echo 'error';;
}
if (move_uploaded_file($file_loc, $folder . $file)) {
$crud->uploadFile($itemId, $inv, $file, $file_type, $file_size);
}
}
<form method='post' enctype="multipart/form-data">
<input type='text' name='inv'>
<input type='text' name='ip'>
<input type='text' name='make'>
<input type='file' name='file'>
<button type="submit" name="btn-save"></button>
</form>
Die Struktur meiner beiden Tabellen sind wie folgt;
Artikel(itemId primär ist, einzigartig und Auto-Inkrement)
+--------+---------+-----------------+-------+
| itemId | inv | ip | make |
+--------+---------+-----------------+-------+
| 1 | 1293876 | 123.123.123.123 | Dell |
+--------+---------+-----------------+-------+
| 2 | 4563456 | 234.234.234.234 | Dell |
+--------+---------+-----------------+-------+
| 3 | 7867657 | 345.345.345.345 | Apple |
+--------+---------+-----------------+-------+
Artikel(upload_id primär ist, einzigartig und Auto-Inkrement)
+-----------+--------+-----+----------+------------+------+
| upload_id | itemId | inv | file | type | size |
+-----------+--------+-----+----------+------------+------+
| 56 | 777 | 123 | test.txt | text/plain | 266 |
+-----------+--------+-----+----------+------------+------+
| 57 | 777 | 123 | test.txt | text/plain | 266 |
+-----------+--------+-----+----------+------------+------+
| 58 | 777 | 123 | test.txt | text/plain | 266 |
+-----------+--------+-----+----------+------------+------+
Bitte vergib den unordentlichen Code. Ich versuche nur, die Logik zu korrigieren und dann kann ich daran arbeiten.
Jeder Rat wird geschätzt.
Anstatt 'true' in Ihren Funktionen zurückzugeben, versuchen Sie' $ this-> db-> lastInsertId(); 'zurückzugeben und sehen Sie, was Sie bekommen. – Maximus2012
Was gibt 'var_dump ($ crud-> create ($ inv, $ ip, $ make))', nachdem Sie Änderungen an der Funktion vorgenommen haben? – Maximus2012
Dies ist nur für die Funktion 'create()' und nicht für die Funktion 'uploadFile()'. Laut Ihrem Code hat '$ itemId' nichts mit Ihrer' create() 'Funktion zu tun.Wenn Sie bereits Änderungen an der Funktion 'create()' vorgenommen haben, um 'lastInsertId()' zurückzugeben, hilft Ihnen 'var_dump' beim Testen. – Maximus2012