2010-11-26 5 views
0

Je n'arrive pas à insérer des données dans une table. J'ai les tables suivantes: track (id, tracktitle), album (id, albumtitle), compositeur (id, nom de compositeur), albumtrack (PRIMARY: trackid, albumid, compositeur).Insertion de données dans des tables SQL

Ma page PHP vous permet d'ajouter une piste, puis de sélectionner l'album et le compositeur qui y sont connectés. Il ajoute la piste à la trackable mais ça ne l'ajoutera pas à un album. Je continue à chercher comment faire et je continue à me perdre un peu. Quelqu'un peut-il me dire comment je devrais faire cela correctement? Merci

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

En savoir plus sur l'injection SQL, votre code actuel est vulnérable ... – ChristopheD

+0

Utilisez-vous MySQL? Où avez-vous vu une syntaxe 'INSERT INTO tbl_a, tbl_b'? Cela ne marchera pas. – Konerak

+0

Merci à vous deux. Je ne me souviens pas d'où est venue cette syntaxe. Je l'ai probablement rêvé ou quelque chose. ! A bientôt – paj

Répondre

1

Votre phrase d'insertion est erronée:

Essayez ceci:

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

En supposant que votre ID sont numériques.

Méfiez-vous des injections SQL lorsque vous injectez des valeurs non aseptisées provenant de votre requête.

+0

Merci Pablo. Très appréciée. – paj

+0

Je l'ai basé sur un tutoriel d'un livre PHPSQL. L'original était $ sql = "INSERT IGNORE INTO jokecategory SET jokeid = $ jid, categoryid = $ catID"; Mais il se passe probablement autre chose, ou c'est dépassé. Merci pour votre correction. – paj

0

A côté de la manière corrigée de Pablo d'écrire la requête. Je remarque également que vous essayez d'insérer dans deux tables à la fois avec:

$sql= "INSERT INTO track, albumtrack" 

MySQL ne permet pas l'insertion dans deux tables à la fois.

+0

Merci Haluk. Je ne sais pas d'où j'ai eu l'idée. Merci de m'avoir corrigé. – paj

Questions connexes