2010-11-26 31 views
0

テーブルにデータを挿入できません。 トラック(id、トラックタイトル)、アルバム(id、albumtitle)、作曲者(id、コンポジット名)、アルバムトラック(PRIMARY:trackid、albumid、composerid)のテーブルがあります。データをSQLテーブルに挿入

私のPHPページでは、トラックを追加し、それに接続されているアルバムとコンポーザーを選択することができます。トラックテーブルにトラックを追加しても問題ありませんが、アルバムには追加されません。

私はそれを行う方法を探し続けており、少し失われ続けています。 これを正しく行う方法を教えてもらえますか? あなたの挿入文が間違っている

if (isset($_POST['tracktitle'])): 
    // A new track has been entered 
    // using the form. 

    $cid= $_POST['cid']; 
    $tracktitle = $_POST['tracktitle']; 
    $albs = $_POST['albs']; 

    if ($cid == '') { 
    exit('<p>You must choose an composer for this track. Click "Back" and try   again.</p>'); } 

    $sql = "INSERT INTO track, albumtrack SET 
    track.tracktitle='$tracktitle', albumtrack.albumid='$albs', albumtrack.composerid='$cid' " ; 
    if (@mysql_query($sql)) { 
    echo '<p>New track added</p>'; 
    } else { 
    exit('<p>Error adding new track' . mysql_error() . '</p>'); 
    } 

    $trackid = mysql_insert_id(); 


if (isset($_POST['albs'])) { 
$albs = $_POST['albs']; 
    } else { 
$albs = array(); 
} 

$numAlbs = 0; 
    foreach ($albs as $albID) { 
$sql = "INSERT IGNORE INTO albumtrack 
     SET albumtrack.trackid='$trackid', albumtrack.albumid='$albs',  albumtrack.composerid='$cid'"; 
if ($ok) { 
    $numAlbs = $numAlbs + 1; 
} else { 
    echo "<p>Error inserting track into album $albID: " . 
     mysql_error() . '</p>'; 
} 
    } 
?> 

<p>Track was added to <?php echo $numAlbs; ?> albums.</p> 

    <p><a href="<?php echo $_SERVER['PHP_SELF']; ?>">Add another track</a></p> 
    <p><a href="tracks.php">Return to track search</a></p> 

<?php 
else: // Allow the user to enter a new track 

    $composers = @mysql_query('SELECT id, composername FROM composer'); 
    if (!$composers) { 
exit('<p>Unable to obtain composer list from the database.</p>'); 
    } 

    $albs = @mysql_query('SELECT id, albumtitle FROM album'); 
if (!$albs) { 
    exit('<p>Unable to obtain album list from the database.</p>'); 
    } 
    ?> 

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
    <p>Enter the new track:<br /> 
    <textarea name="tracktitle" rows="1" cols="20"> 
    </textarea></p> 
    <p>Composer: 
    <select name="cid" size="1"> 
    <option selected value="">Select One</option> 
    <option value="">---------</option> 
    <?php 
    while ($composer= mysql_fetch_array($composers)) { 
    $cid = $composer['id']; 
    $cname = htmlspecialchars($composer['composername']); 
    echo "<option value='$cid'>$cname</option>\n"; 
    } 
?> 
</select></p> 
<p>Place in albums:<br /> 
    <?php 
    while ($alb = mysql_fetch_array($albs)) { 
    $aid = $alb['id']; 
    $aname = htmlspecialchars($alb['albumtitle']); 
    echo "<label><input type='checkbox' name='albs[]'  value='$aid' />$aname</label><br />\n"; 
    } 
    ?> 
+1

SQLインジェクションについて少しお読みください。現在のコードは脆弱です... – ChristopheD

+0

MySQLを使用していますか?あなたは 'INSERT INTO tbl_a、tbl_b'の構文をどこで見たのですか?それは動作しません。 – Konerak

+0

ありがとうございます。私はその構文がどこから得られたのか覚えていない。私はおそらくそれか何か夢を見た。 !乾杯します。 – paj

答えて

1

ありがとう:

はこれを試してください:あなたののIDを想定し

$sql = "INSERT IGNORE INTO albumtrack (trackid, albumid, composerid) values " . 
     "($trackid, $albs, $cid)"; 

は数値です。

あなたがあなたの要求から得る浄化されていない値を注入するときは、SQLインジェクションに注意してください。

+0

ありがとうパブロ。とても有難い。 – paj

+0

私は実際にそれをPHPSQLの本のチュートリアルに基づいています。元は$ sql = "INSERT IGNORE INTO jokecategory SET jokeid = $ jid、categoryid = $ catID"でした。しかし、おそらく何か他のことが起こっている、またはそれは時代遅れです。あなたの修正をありがとう。 – paj

0

BesideのPabloがクエリを書く方法を修正しました。また、一度に2つのテーブルに挿入しようとしていることに気付きます。

$sql= "INSERT INTO track, albumtrack" 

MySQLでは、2つのテーブルに同時に挿入することはできません。

+0

ありがとうHaluk。私はどこからアイデアを得たかわからない。私を真っ直ぐにしてくれてありがとう – paj