2015-03-23 6 views
0

OK Я знаю, что в стеке есть вопросы, которые задают/отвечают здесь, но я попробовал все, что было предложено в этих потоках, безрезультатно. Как видно из заголовка, я получаю уведомление неопределенного индекса при попытке просмотреть xml, написанный скриптом PHP ниже, а именно «track_number» и «track_title». Я знаю, что эти столбцы существуют в моей базе данных. Я подозреваю, что что-то не так, когда я запрашиваю таблицу треклистов, но не могу понять, что именно. Любые идеи были бы хорошы!Неопределенный индекс PHP/mySQL

PHP

<?php 
ini_set('display_errors',1); 


define("HOST",'54.152.129.000'); 
$db=mysqli_connect(HOST,'wp_user','password','*******'); 

$query="select * from albums"; 
$result=mysqli_query($db,$query); 

$fp=fopen('music_inventory.xml','w'); 
$header="<?xml version=\"1.0\"?>\n<!DOCTYPE album SYSTEM \"music_inventory.dtd\">\n"; 
$header.="<?xml-stylesheet type=\"text/css\" href=\"music_inventory.css\"?>\n"; 

$written=fwrite($fp,$header); 

$xml_data="<music_inventory>"; 


while($row=mysqli_fetch_array($result)) 
{ 
    $xml_data .= "<album id=\"".$row['id']."\" type=\"".$type."\" albumart=\"".$row['albumart']."\">"; 
    $xml_data .= "<artist>".htmlentities($row['artist'])."</artist>"; 
    $xml_data .= "<name>".$row['name']."</name>"; 
    $xml_data .= "<year>".$row['year']."</year>"; 
    $xml_data .= "<label>".$row['label']."</label>"; 
    $xml_data .= "<disc>".$row['disc']."</disc>"; 
    $xml_data .= "<totaldiscs>".$row['totaldiscs']."</totaldiscs>"; 


     switch($row["type"]) 
     { 
       case 'E': 
         $type='EP'; 
         break; 
       case 'F': 
         $type='full_length'; 
         break; 
       case 'S': 
         $type='soundtrack'; 
         break; 
       case 'C': 
         $type='compilation'; 
         break; 
       case 'M': 
         $type='multi_disc'; 
         break; 
       default: 
         $type='unknown'; 
         break; 
     } 

     $xml_data .= "<tracklist>"; 

     //problem somewhere in here? 
     $track_query="select track_number,track_title,track_artist from tracklist where id='" . $row['id'] . "' order by track_number"; 
     $track_result=mysqli_query($db,$track_query); 
     while($track_row=mysqli_fetch_array($track_result)) 
     { 

      $xml_data .= "<track id=".$row['track_number'].">".htmlentities($row['track_title'])."</track>"; 

     } 
     $xml_data .= "</tracklist>"; 
     $xml_data .= "</album>"; 
} 




$xml_data .= "</music_inventory>"; 


$written=fwrite($fp,$xml_data); 

fclose($fp); 

readfile('music_inventory.xml'); 

?> 
+0

Пожалуйста, добавьте структуру из альбомов и треклистов, чтобы убедиться, что вы не заметили очевидного (ситуация, когда вы долго смотрели на экран). –

ответ

3

Вероятно, опечатка? Вы зацикливание по этому поводу:

while($track_row=mysqli_fetch_array($track_result)) 

, но вы никогда не ссылаться на $track_row. Может, ты это имел в виду?

$xml_data .= "<track id=".$track_row['track_number'].">".htmlentities($track_row['track_title'])."</track>"; 

родительского цикл использует $row, но это из другого запроса. Тот, у которого, по-видимому, нет этих полей.

+0

от <-------> much>< – Burrito

+0

Ahh да, результат меня ленивый! Я копирую/вставляю из родительского цикла и пропускаю свою ошибку ... весь день. Спасибо! – exeleon

1
while($track_row=mysqli_fetch_array($track_result)) 
    { 

     $xml_data .= "<track id=".$row['track_number'].">".htmlentities($row['track_title'])."</track>"; 

    } 

Я только кратко рассмотрел это, но вы используете $ row not $ track_row в цикле while.

+0

Вы оба пригвоздили его прямо к голове, но Дэвид был на 15 секунд быстрее. Я должен дать его ему. Благодаря! – exeleon

Смежные вопросы