2015-07-07 2 views
0

Я работаю над проектом php, где пользователи могут выбрать марку и модель автомобиля из формы, и это приведет к поиску продуктов, которые применяются для этой конкретной комбинации. Когда я запускаю запрос в SQL, и есть несколько продуктов, я получаю несколько строк. но когда я пытаюсь показать эти результаты с помощью PHP, я получаю только 1 строку. У вас есть идея, что я делаю неправильно? вот код:SQL-запрос, возвращающий только 1 строку

$query1 = "SELECT * FROM partmakes WHERE MAKE = '$_POST[make]' and MODEL ='$_POST[model]'"; 
$results1 = mysqli_query($cnx, $query1); 
$row1 = mysqli_fetch_assoc($results1); 


$query2 = "SELECT * FROM `products` WHERE `PARTNO`= '$row1[PARTMAKE1]' OR (`PARTNO`= 
'$row1[PARTMAKE2]' OR `PARTNO`= '$row1[PARTMAKE3]' OR `PARTNO`= '$row1[PARTMAKE4]');"; 

$results2 = mysqli_query($cnx, $query2); 

echo "These are the products for your car:<br />"; 
while ($row2 = mysqli_fetch_assoc($results2)){ 
    extract($row2); 
    echo "$row2[PARTNO]<br />"; 
} 

Спасибо большое за вашу помощь


редактировать - содержимое из файла OP в http://standtek.com.mx/test/screenshots.docx в комментариях

Таким образом, пользователь будет выбирать из выпадающего Марка и модель автомобиля. Первый запрос ищет марку и модель в таблице: enter image description here

Затем я использую информацию из столбцов PARTMAKE в качестве ссылки для второго запроса

Вот пример запроса в PHPMyAdmin, и это показывает 4 строки: enter image description here

Мой текущий скрипт отображает только один ряд по некоторым причинам: enter image description here

Это то, что я хочу отображаться в результатах: enter image description here

+1

Вместо 2 отдельных запросов, вы могли бы сделать это в 'JOIN' запроса. Что-то вроде - 'SELECT * FROM products JOIN partmakes ON (products.PARTNO = partmakes.PARTMAKE1 OR products.PARTNO = partmakes.PARTMAKE2 ИЛИ продукты.PARTNO = частьmakes.PARTMAKE3 OR products.PARTNO = partmakes.PARTMAKE4) WHERE partmakes.MAKE = '$ _POST [make]' AND partmakes.MODEL = '$ _ POST [model]' '. обратите внимание, убедитесь, что вы дезинфицируете свои пользовательские данные. – Sean

+0

Это дает мне 1 строку с остальной частью PARTMAKES в конце строки. Я ищу, чтобы получить отдельные строки для каждого PARTMAKE. Что-то вроде этого: PARTNO DESC PRICE 1 Что-то 10.50 2 другие вещи 7.50 – Eduardo

+0

Можете ли вы предоставить некоторые данные из двух таблиц и показать желаемый результат. – Sean

ответ

0

Используйте JOIN запрос, и вы можете вернуть все строки -

$query = "SELECT products.* 
      FROM products 
      JOIN partmakes 
      ON (
      products.PARTNO = partmakes.PARTMAKE1 
      OR 
      products.PARTNO = partmakes.PARTMAKE2 
      OR 
      products.PARTNO = partmakes.PARTMAKE3 
      OR 
      products.PARTNO = partmakes.PARTMAKE4) 
      WHERE partmakes.MAKE = '$_POST[make]' 
      AND partmakes.MODEL ='$_POST[model]'"; 

$results = mysqli_query($cnx, $query); 

echo "These are the products for your car:<br />"; 

echo "<table><tr><th>PARTNO</th><th>TITLE</th><th>PRICE</th></tr>"; 

while ($row = mysqli_fetch_assoc($results)){ 
    echo "<tr><td>{$row[PARTNO]}</td><td>{$row[TITLE]}</td><td>{$row[PRICE]}</td></tr>"; 
} 
echo "</table>"; 

Убедитесь, что дезинфицировать ваши $_POST пользовательские данные.

Вы можете увидеть JOIN запрос, работающий в sqlFiddle - http://sqlfiddle.com/#!9/754feb/4

+0

Большое спасибо за все усилия, я ценю это. Однако он все еще показывает 1 строку :(Я знаю, что пример sqlfiddle показывает все строки, но когда вы пытаетесь выполнить запросы в phpmyadmin, он возвращает только 1 строку. И php не делает показать какие-либо ошибки или предупреждения, только 1 строка – Eduardo

+0

Тогда может возникнуть проблема с вашими данными. Например, могут быть некоторые пробелы в начале или конце, поэтому базовый '=' не будет соответствовать.Вам нужно будет посмотреть на 3 строки, которые не отображаются, и выяснить, почему они не возвращаются. – Sean

+0

По прошествии некоторого времени, анализируя данные, решение заключалось в том, чтобы избавиться от лишних пробелов, как вы предполагали. Большое спасибо за ваше время и помощь! – Eduardo

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