2016-05-02 5 views
0

Ich habe eine Tabelle 'Prac1' mit Spalten id (primary key, auto_increment), Name und Contact. Und eine weitere Tabelle "Prac2" mit Spalten id(foreign key), Order_id(primary key) und Order_items.Abrufen von Autoinkrementwert:

<?php 

$ok=isset($_POST['ok']); 
if($ok) 
{ 

    $name=$_POST['cname']; 
    $order=$_POST['oi']; 
    $contact=$_POST['contact']; 

    $db = new mysqli("localhost", "root", "","learndb"); 
    $stmt=$db->prepare("INSERT INTO prac1 (Name,Contact) values (?,?)"); 
    $stmt->bind_param("si",$name,$contact); 
    $stmt->execute(); 

    $stmt=$db->prepare("INSERT INTO prac2 (Order_items) values(?) "); 
    $stmt->bind_param("i",$order); 
    $stmt->execute(); 


} 

?> 

<form action="prac.php" method="POST"> 
Name:<input type="text" name="cname"><br> 
Contact:<input type="text" name="contact"><br> 
Order Items:<input type="text" name="oi"><br> 
<input type="submit" name="ok"><br> 

Nun Von dieser Form Vorlage, erhalten die Namen und die Auftragspositionen entsprechende Tabelle eingefügt mit Auto-ID in Tabelle pRAC1 erhöht wird. Wie kann ich diese ID der Tabelle prac1 abrufen, um sie in prac2 einzufügen. Und ich denke, wegen der NULL-ID in der Tabelle prac2 sind die beiden Tabellen nicht verbunden und der folgende Code zeigt nichts an.

$db = new mysqli("localhost", "root", "","learndb"); 
$stmt=$db->prepare("SELECT * FROM prac1 INNER JOIN prac2 ON prac1.id=prac2.id ORDER BY prac2.Order_items"); 
$stmt->execute(); 
$result=$stmt->get_result(); 

echo "<TABLE BORDER='1'>"; 
echo "<tr><thead><td>ID</td><td>Order ID</td><td>Order items</td><td>Name</td><td>Contact</td><td>Status</td></thead></tr>"; 
while($row=$result->fetch_assoc()) 
{ 
    echo "<tr>"; 
    echo "<td>"; 
    echo $row['id']; 
    echo "</td><td>"; 
    echo $row['order_id']; 
    echo "</td><td>"; 
    echo $row['Order_items']; 
    echo "</td><td>"; 
    echo $row['Name']; 
    echo "</td><td>"; 
    echo $row['Contact']; 
    echo "</td><td>"; 
    echo $row['Status']; 
    echo "</td>"; 
    echo "</tr>"; 
} 
    echo "</table>"; 
+2

[Sie immer das Handbuch könnten versuchen] (http://php.net/manual/en/ mysqli.insert-id.php) als letztes Mittel natürlich! _hint: mysql_insert_id_ – RiggsFolly

+0

Dinkel ich das falsch shoudl es 'mysqli_insert_id gelesen haben()' – RiggsFolly

Antwort

1

Hier gehen Sie:

<?php 
    if(isset($_POST['ok'])) { 
     $name  = $_POST['cname']; 
     $order = $_POST['oi']; 
     $contact = $_POST['contact']; 

     $db  = new mysqli("localhost", "root", "","learndb"); 
     $stmt=$db->prepare("INSERT INTO prac1 (Name, Contact) values (?,?)"); 
     $stmt->bind_param("si",$name,$contact); 
     $stmt->execute(); 

     //HERE YOU GET THE INSERT ID 
     $insertID = $db->insert_id; //THIS IS THE ID THAT YOU NEED ... 

     // OR IF YOU ARE INTO PROCEDURAL STYLE: 
     // $conn = mysqli_connect("localhost", "my_user", "my_password", "world"); 
     // YOU CAN DO THIS: 
     // $insertID = mysqli_insert_id($conn) 

     //THE REST OF YOUR CODE 
     $stmt=$db->prepare("INSERT INTO prac2 (Order_items) values(?) "); 
     $stmt->bind_param("i", $insertID); 
     $stmt->execute(); 
    } 

Hope this hilft ein wenig ...

+0

Nun das Mindeste, was Sie tun können, wenn Sie eine solche beantworten _low Frucht questions_ hängen abgeschlossen ist die zweite Abfrage für ihn – RiggsFolly

+1

@RiggsFolly Sie haben Recht, außer dass er lernt immer noch ... und das ist keine tiefhängende Fruchtfrage für ihn ... (Für dich als Guru, ja). Er muss auch lernen, die Blanks zu füllen .... Wenn er davon abhängen würde, dass du alles 100% für ihn tust; Er kann stattdessen einen tief hängenden Fruchtprogrammierer enden ... – Poiz

+0

@Poiz wie kann sicherstellen, dass $ insertID ein automatischer Inkrementwert von Tabelle 1 und nicht von Tabelle 2 ist. Und im Rest des Codes erwähnen Sie Order_items nicht die $ insertID. Jedenfalls hat das geholfen. – Steve