2017-12-14 2 views
1

Heyo,Daten in der Tabelle mit einem Formular aus einer anderen Tabelle einfügen

Dies ist die api

+----+----------+--------+-------+ 
| id | name | symbol | price | 
+----+----------+--------+-------+ 
| 1 | bitcoin | btc | 10 | 
| 2 | ethereum | eth |  5 | 
+----+----------+--------+-------+ 

Und dies sind benannte Tabelle die Spalten für die Tabelle testing

+----+--------+-------+-------+ 
| id | symbol | coins | price | 
+----+--------+-------+-------+ 

Was ich erreichen wollen ist für symbol und price, die Werte in api in deneingefügt werden könnenTabelle in ihren jeweiligen Reihen, wenn ich füllen Sie das folgende Formular aus:

<form method="post"> 
    <div class="form-group row justify-content-center"> 
     <label class="col-sm-3 col-form-label">Choose coin</label> 
     <div class="col-sm-6"> 
     <select class="form-control" name="coin"> 
      <?php 
      $stmt = $pdo->query('SELECT id, name, symbol FROM api'); 
      while ($row = $stmt->fetch()) { 
       echo '<option id="'.$row['id'].'" value="'.$row['symbol'].'">'.$row['name'].'</option>'; 
      } 
      ?> 
     </select> 
     </div> 
    </div> 
    <div class="form-group row justify-content-center"> 
     <label class="col-sm-3 col-form-label">How many coins do you have?</label> 
     <div class="col-sm-6"> 
     <input type="number" class="form-control" name="coins" placeholder="1"> 
     </div> 
    </div> 
    <div class="form-group row justify-content-center text-center"> 
     <div class="col-sm-12"> 
     <button type="submit" class="btn btn-primary">Add</button> 
     </div> 
    </div> 
</form> 

Aber mein Hauptproblem hier ist, dass ich möchte auch etwas einfügen, die nicht innerhalb der api Tabelle ist. Ich habe <input type="number" class="form-control" name="coins" placeholder="1">, wo ich eine Nummer eingeben kann und diese Nummer wird in coins Zeile eingefügt werden.

ich denke, die

<select class="form-control" name="coin"> 
    <?php 
    $stmt = $pdo->query('SELECT id, name, symbol FROM api'); 
    while ($row = $stmt->fetch()) { 
     echo '<option id="'.$row['id'].'" value="'.$row['symbol'].'">'.$row['name'].'</option>'; 
    } 
    ?> 
</select> 

Hat einen Faktor hier auswählen, indem Sie das Auswahlfeld mit mir die Daten aus den ausgewählten echo '<option id="'.$row['id'].'" value="'.$row['symbol'].'">'.$row['name'].'</option>'; holen will, aber ich weiß nicht, wie mit diesem vorwärts zu gehen.

Ich glaube, ich etwas richtig mit diesem Code getan haben:

<?php 

    $host = '127.0.0.1'; 
    $db = 'db_learning'; 
    $user = 'root'; 
    $pass = ''; 
    $charset = 'utf8mb4'; 

    $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; 
    $opt = [ 
    PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
    PDO::ATTR_EMULATE_PREPARES => false, 
    ]; 
    $pdo = new PDO($dsn, $user, $pass, $opt); 

    if(!empty($_POST)) { 

     if(empty($_POST['coins'])) { 
     #die 
     die("Please enter how many coins you have."); 
     } 

     $stmt = $pdo->prepare("INSERT INTO testing (coin, coins) VALUES (:coin, :coins)"); 

     $stmt->bindParam(':coin', $coin); 
     $stmt->bindParam(':coins', $coins); 

     # insert the row 
     $coin = $_POST['coin']; 
     $coins = $_POST['coins']; 
     $stmt->execute(); 
    } 
?> 

aber es gibt nur Werte mich in coin und coins auf Vorlage des Formulars, über dem kein Schock durch, was ich Ich habe es gesagt.

Kann mich jemand hier führen?

Danke und frohe Feiertage von einem Neugeborenen php Neuling.

+1

Sie sind verbindlich die Params vor Ihnen setze den Wert. Tausche sie um und du solltest gut sein – IsThisJavascript

+0

@ WillParky93 Ich habe sie getauscht, aber es hat immer noch keine Daten von der anderen Tabelle namens "api" bekommen. Obwohl es die "Münzen" und "Münzen" -Werte in die "Test" -Tabelle einfügte, wenn ich das Formular einreichte, aber das tat es schon, bevor ich es tauschte. – superladremi

Antwort

1

Laut dem mitgelieferten Schema der Tabelle testing hat es keine Spalte coin, so dass die Aussage wahrscheinlich nicht vorbereitet ist. Am allerwenigsten Sie, wenn das Anweisungsobjekt, bevor Sie fortfahren erstellt testen sollte - wie folgt aus:

$stmt = $pdo->prepare("INSERT INTO testing (coin, coins) VALUES (:coin, :coins)"); 
if($stmt){ 
    $stmt->bindParam(':coin', $coin); 
    $stmt->bindParam(':coins', $coins); 
} 

Aber es sieht eher wahrscheinlich, dass die Spalte den Wert erhalten symbol

$stmt = $pdo->prepare("INSERT INTO testing (symbol, coins) VALUES (:symbol, :coins)"); 
if($stmt){ 
    $stmt->bindParam(':symbol', $coin); 
    $stmt->bindParam(':coins', $coins); 
} 

oder sein sollte um den Preis auch ~ mit einem try/catch zu erkennen und zu reagieren fehlgeschlagen sql Prepare Anruf ...

try{ 
    $stmt = $pdo->prepare("insert into testing (`symbol`, `coins`, `price`) values (:symbol, :coins, (select `price` from `api` where `symbol`=:apisymbol))"); 
    if($stmt){ 
     $stmt->bindParam(':symbol', $coin); 
     $stmt->bindParam(':coins', $coins); 
     $stmt->bindParam(':apisymbol',$coin); 
    } else { 
     throw new Exception("Statement failed"); 
    } 
}catch(Exception $e){ 
    echo $e->getMessage(); 
} 
Verwandte Themen