2012-05-14 3 views
0

Я занимаюсь созданием базы данных, которая имеет 4 столбца: «Тип», «Совместимый», «StockLevel», «Стоимость».Работа с php (explode)

Тип может быть «Батарея» с совместимым полем, являющимся идентификатором устройств, с которыми работает эта батарея, например, «1, 4, 9».

Мне нужен мой PHP, чтобы выполнить запрос в базу данных для всех «типов», которые включают $ _POST [compatible] в строке «Compatible». Конечно, это не так просто, как IF X = X, потому что нам сначала нужно (php) взорвать поле Compatible.

У меня болит голова, и я все еще пытаюсь найти решение, но я вставлю свой код и надеюсь, что один из вас может оказать некоторую помощь.


IF ($_POST["printer"]) { 

    $printerinfo_query = mysql_query("SELECT * FROM printers WHERE ID LIKE '$_POST[printer]'"); 
    $printerinfo_result = mysql_fetch_assoc($printerinfo_query); 

    echo ("<H5>".$printerinfo_result["Model"]."</H5>"); 
    echo "".$printerinfo_result["Description"].""; 

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

    $cartridge_query = mysql_query("SELECT * FROM cartridges"); 
    $cartridge_result = mysql_fetch_assoc($cartridge_query); 


    $explode = $cartridge_result["Compatible"]; 
    $explodedata = explode(", ", $explode); 
    $explode_count = count($explodedata); 
    $explode_count_dec = count($explodedata); 
    $explode_number = "0"; // Re-creates $explodedata[0], [1], [2] etc.. using $explodedata[$explode_number] in the loop! 

    echo ("<P>Select a cartridge type &mdash;</P>"); 

    echo "<form action='index.php?page=printeradv' method='POST'>"; 


     while ($explode_count_dec > "0"): 

     $while_query = mysql_query("SELECT * FROM cartridges WHERE ID LIKE '$explodedata[$explode_number]'"); 
     $while_result = mysql_fetch_assoc($while_query); 

     echo "<input type='radio' value='".$explodedata[$explode_number]."' name='cartridge' />".$while_result["Type"]." <BR /> "; 

     ++$explode_number; 
     --$explode_count_dec; 
     endwhile; 

    echo "<input type='submit' value='Select model' />"; 
    echo "</form>"; 

} 
+0

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

+0

Я знаю, это звучит глупо, но я планирую редактировать эти данные с помощью панели администратора, и поэтому не нужно поддерживать ее напрямую. Хотя, как бы вы предложили мне сделать свою базу данных? У меня есть 2 стола, «Батареи» и «Часы». Часы имеют идентификатор, имя, описание. Таблица батарей (совместимое поле) затем включает идентификатор часов, с которыми эта батарея совместима. Это понятно? – Fal

+0

См. Пост Surreal Dreams ниже, что делать. Проблема с помещением всех данных в список, разделенный запятыми, заключается в том, что если вы определили поле как (скажем) 250 символов, у вас закончится свободное пространство при добавлении дополнительных элементов; если вы поместите информацию в отдельную таблицу, вы можете добавить столько, сколько вам нужно. – andrewsi

ответ

3

Вам не нужно делать использование explode(), и я не знаю, почему вы используете LIKE, когда вы на самом деле не используя дикие символы.

Вы можете непосредственно искать с $cartridge_result['Compatible'], как это:

... WHERE ID IN('.$cartridge_result['Compatible'].')' 
+0

Это интересно, можете ли вы объяснить дальше? Мне нужно показать имя каждого «Тип», которое включает $ _POST [совместимый] в поле «Совместимо». – Fal

1

Я думаю, вам нужно добавить дополнительную таблицу отношения связать ваши батареи устройств. Это очень простой стол:

relativeid | batteryId | DeviceId

Это позволяет делать простые запросы, чтобы получить все совместимые батареи или устройств. Это стандартная практика для управления многими и многими отношениями, такими как это. Конечным результатом является то, что вы можете запускать один запрос для определения совместимости, а ваша обработка впоследствии в PHP минимальна.