Что не так с моим кодом SQL Insert? - PullRequest
0 голосов
/ 30 ноября 2010

Я пытаюсь выяснить, почему этот код не работает для меня.У меня есть таблицы: albums (albumid, albumname), composers (composerid, composername) и tracks (trackid, tracktitle, albumid, composerid).

Когда я использую свою форму, чтобы добавить трек и связать его с композитором и альбомом из этого:

<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['composerid'];
 $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['albumid'];
  $aname = htmlspecialchars($alb['albumname']);
  echo "<label><input type='checkbox' name='albs[]' 
  value='$aid' />$aname</label><br />\n";
  } ?>
  </p>
  <input type="submit" value="SUBMIT" />
  </form>
  <?php endif; ?>

Я получаю это сообщение:

Добавлен новый трек
Ошибка вставки трека в альбом 2:
Трек был добавлен в 0 альбомов.

The phpкод, который предшествует форме:

if (isset($_POST['tracktitle'])): 
 // A new track has been entered
 // using the form.
$tracktitle = mysql_real_escape_string($tracktitle);
$cid= $_POST['cid'];
$tracktitle = $_POST['tracktitle'];
$albs = $_POST['albs'];
if ($cid == '') {
exit('<p>You must choose an composer for this track. Click 

«Назад» и попробуйте еще раз.

');}
$sql = "INSERT INTO tracks (tracktitle)
 VALUES ('$tracktitle')" ;
if (@mysql_query($sql)) {
echo '<p>New track added</p>';
 } else {
exit('<p>Error adding new track' . mysql_error() . '</p> 
echo mysql_error() ');}
$trackid = mysql_insert_id();
if (isset($_POST['albs'])) {
$albs = $_POST['albs'];
} else {
$albs = array();
}
$numAlbs = 0;
foreach ($albs as $albID) {
$sql = "INSERT IGNORE INTO tracks (trackid, albumid, 
composerid) VALUES " .
"($trackid, $albs, $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>

<?php
else: // Allow the user to enter a new track
$composers = @mysql_query('SELECT composerid, composername 
FROM composers');
if (!$composers) {
 exit('<p>Unable to obtain composer list from the database.</p>');
}
$albs = @mysql_query('SELECT albumid, albumname FROM albums');
if (!$albs) {
  exit('<p>Unable to obtain album list from the database.</p>');}?>

Я продолжаю искать причину сбоя и продолжаюударяя кирпичные стены.Я также знаю, что в настоящее время это не очень безопасно, что будет следующей вещью, которую я выберу.Я просто хочу, чтобы действительная функция работала первой.

Ответы [ 2 ]

2 голосов
/ 01 декабря 2010

@ paj: изменить

if ($ok) {

до

if (mysql_query($sql)) {

-

Я также предлагаю обновить ваши операторы SQL до

$sql = "INSERT INTO tracks (tracktitle) VALUES ('" . $tracktitle . "')";

$sql = "INSERT IGNORE INTO tracks (trackid, albumid, composerid) VALUES (" . $trackid . ", " . $albID . ", " . $cid . ")";
1 голос
/ 30 ноября 2010

Похоже, что $ok не существует, кроме как в строке if ($ok) {.Его нужно определить где-то ранее, иначе он всегда будет читать false, потому что он не существует.

На самом деле вы можете пропустить $ ok, который не существует, и вставить if (@mysql_query($sql)) { для этой строки, как выиметь выше.Я должен согласиться с комментариями, что код нуждается в некоторой любви, но если вы хотите знать, почему он выходит из строя, кажется, именно поэтому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...