2017-08-31 2 views
0

1つのテーブルから複数の行データをフェッチし、ユーザ選択で、選択した行のみを別のテーブルに格納します。1つのテーブルから複数の行を取り出し、PHPの別のテーブルに保存

テーブル 'FLIGHTS'のデータはデータベースから正確にフェッチされていますが、別のテーブル 'bookFlight'に格納しようとすると、すべての列にNULL値しか格納されません。助けてください!あなたは、フォームとsubmit以外のものを送信していない、と$_POST配列がsubmit値を除いて何もしています理由だからだ

<?php 

$username = "root"; 
$password = ""; 
$hostname = "localhost"; 
$dbhandle = mysql_connect($hostname, $username, $password) 
      or die("Unable to connect to MySQL"); 
$selected = mysql_select_db("dbtest",$dbhandle) 
      or die("Could not select dbtest"); 

session_start(); 

     ////// STORING DATA INTO TABLE 'bookFlight' //////// 

if(isset($_POST['Submit'])) 
{ 
     $company_name = mysql_real_escape_string($_POST['company_name']); 
     $flight_category= mysql_real_escape_string($_POST['flight_category']); 
     $rates   = mysql_real_escape_string($_POST['rates']); 
     $qry = "INSERT INTO bookFlight"."(company_name,flight_category,rates)". 
        "VALUES('$company_name','$flight_category','$rates')"; 

    $retval = mysql_query($qry, $dbhandle); 
    if(! $retval) { 
      die('<br><br> Could not enter data: ' . mysql_error()); 
     } 
     else { echo "Entered data successfully\n"; }    
} 
       ////// FETCHING DATA FROM TABLE 'flights' //////// 

$sql = "SELECT * FROM flights where type_id = 
             (SELECT type_id FROM tour WHERE city = 
            '{$_SESSION['destination_Address']}')"; 

$myData = mysql_query($sql,$dbhandle); 
$num = mysql_num_rows($myData); 

    echo "<table border=1> 
    <tr> 
    <th> COMPANY NAME : </th> 
    <th> FLIGHT CATEGORY : </th> 
    <th> RATES : </th> 
    </tr>"; 

for ($i=0; $i <$num; $i++) 
{ 
$record = mysql_fetch_array($myData,MYSQL_ASSOC); 
echo "<form method=post>"; 
    echo "<tr>"; 
    echo "<td>" . $company_name[]= $record['company_name']  ."</td>"; 
    echo "<td>" . $flight_category[]= $record['flight_category']."</td>"; 
    echo "<td>" . $rates[]= $record['rates']     ." </td>"; 
    echo "<td>" . "<input type='submit' name='Submit' value='SELECT'></td>"; 
    echo "</tr>"; 
} 
echo"</table>"; 
echo "</form>"; 

?> 
+0

フォームから値を渡したり、投稿したりする必要があります。 –

+0

**警告**:PHPを習得しているだけの方は、古い['mysql_query'](http://php.net/manual/en/function.mysql-query.php)インタフェースを学ばないでください。それはひどいので、PHP 7では削除されました。[PDOは学ぶのが難しくありません](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo- for database-access /)、[PHP The Right Way](http://www.phptherightway.com/)のようなガイドはベストプラクティスの説明に役立ちます。 **あなたのユーザーパラメータが[正しくエスケープされている](http://bobby-tables.com/php)か、重大な[SQLインジェクションバグ](http://bobby-tables.com/ )。 – tadman

+0

関数呼び出しの外でクエリを定義することも、中断する必要があります。間違った文字列を引数として渡すのは簡単です。特に '$ sql1'、' $ sql2'などのようなものを扱う場合は特にそうです。クエリ文字列を関数に直接与えることで、あいまいさが完全に排除されます。 – tadman

答えて

0

あなたはbookFlightテーブルにその特定の行を挿入することができるようにフォームデータと一緒に(私はこのケースでID列を仮定している)行IDを渡す必要があります。

for ($i=0; $i <$num; $i++){ 
    $record = mysql_fetch_array($myData,MYSQL_ASSOC); 
    echo "<form action='?id=".$record['id']."' method='post'>"; 
    ... 
} 

、ユーザーが送信ボタンをヒットしたら、これはあなたがデータをINSERTことができる方法です。

if(isset($_POST['Submit'])){ 
    $qry = "INSERT INTO bookFlight (company_name, flight_category, rates) SELECT company_name, flight_category, rates FROM flights WHERE id = '".$_GET['id']."'"; 
    $retval = mysql_query($qry, $dbhandle); 
    if(! $retval) { 
     die('<br><br> Could not enter data: ' . mysql_error()); 
    }else { 
     echo "Entered data successfully\n"; 
    }    
} 

追記:mysql_*機能を使用しないでください、彼らは、PHP 5.5で廃止されており、PHP 7.0で完全に削除されます。代わりにmysqliまたはpdoを使用してください。 And this is why you shouldn't use mysql_* functions

+0

申し訳ありませんが、動作しています..しかし、今度はエラーは発生しているのは、id = 1のWHERE句だけで、他のIDでは格納されていないということです。私は今何をするのですか? – Sabah

+0

@Sabahあなたは何を意味するのかを具体的に教えてもいいですか?それはid = 1の場合のみ格納され、他のIDの場合は格納されません*?また、 'for'ループの中でこの終了文' echo ""; 'を移動する必要があります。 –

+0

よろしくお願いします!解決済み:)エラー – Sabah

関連する問題