PHP - показване на резултатите взети от БД на различни места в html таблица

Проблема ми е следния:
Имам таблица в базата данни озаглавена data, която има 4 колони - id, grad, name, rabota
idgradnamerabota
1АсеновградЕмил
2ВарнаКостадин
3ПловдивВальо
4ХасковоИван
5ДобричПетя
6ВидинВасил
7АхтополБорис

Извиквам информацията по следния начин:
PHP:
<?php
    $q=mysqli_query($db, 'SELECT * FROM data');
    echo '<table>';
    echo '<tr>';
    echo '<th>Име</th>';
    while ($row = mysqli_fetch_assoc($q)){
            echo '<th>'.$row['grad'].'</th>';  
    }
    echo '</tr>';
    echo '<tr>';
    while ($row = mysqli_fetch_assoc($q)){
            echo '<td>'.$row['name'].'</td>';  
    }
    echo '</tr>';
    echo '</table>';

Получавам следното нещо:
ИмеАсеновградВарнаПловдивХасковоДобричВидинАхтопол
Емил
Костадин
Вальо
Иван
Петя
Васил
Борис

Под таблицата имам следната форма:
HTML:
<form method="POST">
<input type="text" name="info"/>
<input type="submit" name="vkarai" value="Добави"/>
[PHP]
echo '<select name="imenata">';
echo '<option value="Изберете име">Изберете име</option>';
while ($row1 = mysqli_fetch_assoc($q)) {
    echo '<option value="'.$row1['id'].'">'.$row1['name'].'</option>';  
    }   
    echo '</select>';
[/PHP]
</form>

И следния код за вкарване на инфо в базата данни:
PHP:
if (isset($_POST['vkarai'])){
    $insert= trim($_POST['info']);
    $insert= htmlspecialchars($insert);
    $insert= mysqli_real_escape_string($db, $insert);
    $nameId= $_POST['imenata'];
    $nameId= htmlspecialchars($nameId);
    $nameId= mysqli_real_escape_string($db, $nameId);
$insertDb= mysqli_query($db, 'UPDATE data SET rabota="'.$insert.'" WHERE id="'.$nameId.'"');
}

Избирам от падащото поле име - Например Петя
В текстовото поле пиша: програмист
Събмитвам написаното с бутона "Добави". В базата данни получавам следния запис:

idgradnamerabota
1АсеновградЕмил
2ВарнаКостадин
3ПловдивВальо
4ХасковоИван
5ДобричПетяпрограмист
6ВидинВасил
7АхтополБорис

Въпроса ми е как да изкарам информацията за да получа таблицата в този вариант:
ИмеАсеновградВарнаПловдивХасковоДобричВидинАхтопол
Емил
Костадин
Вальо
Иван
Петяпрограмист
Васил
Борис
 

Прикачени файлове

  • Untitled.jpg
    Untitled.jpg
    32 KB · Преглеждания: 8
Последно редактирано:
От: PHP - показване на резултатите взети от БД на различни места в html таблица

Още в първия код не изкарваш нищо повече от имена и градове. Да не кажа че и имена не изкарваш, ама айде, правописна грешка.

Освен това този начин на писане на код е най-лесния колкото да нахвърляш нещо, ама после бързо води до задръстване, грешки и проблеми.
 
От: PHP - показване на резултатите взети от БД на различни места в html таблица

Благодаря - поправих си кода!
Зная, че това е лесния начин за писане на код! Напълно начинаещ съм!!! През цялото си свободно време, чета и пиша код. Трудно е да си самоук. Просто искам помощ от Вас опитните. Мерси!!!
Кода при учебните си проекти, които правя го разделям - в смисъл разделям html-а от php-то (разделям си логиката от визуализацията). Правя си го на много малки "порцийки" и в php-то, където ми трябва html го инклудвам.
Тук птосто го написах набързо - ИЗВИНЯВАМ СЕ!!!
 
От: PHP - показване на резултатите взети от БД на различни места в html таблица

Е добре, и все пак ми се струва че някъде в първата таблица трябва да използваш $row['rabota'], иначе от къде ще се появи тази "работа" :)

Освен това тия два while цикъла с mysqli_fetch_assoc в тях и еднакви условия... въобще влиза ли се във втория цикъл? Не съм много спец по MySQL, но нещо не ми изглеждат добре тия цикли.
 
От: PHP - показване на резултатите взети от БД на различни места в html таблица

Долу горе бива с доста забележки , но най-вероятно успяваш да вкараш информацията в БД-то .
$q=mysqli_query($db, 'SELECT * FROM data');
echo '<table>';
echo '<tr>';
echo '<th>Име</th>';
while ($row = mysqli_fetch_assoc($q)){
echo '<th>'.$row['grad'].'</th>';
}
echo '</tr>';
while ($row = mysqli_fetch_assoc($q)){
echo '<tr>';
echo '<td>'.$row['name'].'</td>';
echo '<td>'.$row['rabota'].'</td>';
echo '</tr>';
}
echo '</table>';

За да изкараш работата на даден запис(човек) просто използваш $row['rabota'] .
 
От: От: PHP - показване на резултатите взети от БД на различни места в html таблица

Долу горе бива с доста забележки , но най-вероятно успяваш да вкараш информацията в БД-то .
$q=mysqli_query($db, 'SELECT * FROM data');
echo '<table>';
echo '<tr>';
echo '<th>Име</th>';
while ($row = mysqli_fetch_assoc($q)){
echo '<th>'.$row['grad'].'</th>';
}
echo '</tr>';
while ($row = mysqli_fetch_assoc($q)){
echo '<tr>';
echo '<td>'.$row['name'].'</td>';
echo '<td>'.$row['rabota'].'</td>';
echo '</tr>';
}
echo '</table>';

За да изкараш работата на даден запис(човек) просто използваш $row['rabota'] .

Това ми е ясно - но искам работата от $row['rabota'] да се визуализира в таблицата точно тук:
Виж файлът 12739
 
От: PHP - показване на резултатите взети от БД на различни места в html таблица

Тия прикрепени файлове така и не ги оправиха в тоя форум...

На мен нещо ми куца структурата на данните. Нещо ми се струва, че така както построяваш таблицата се получава винаги квадратна матрица. Ами ако Петя има братовчед Пешо и той също е от Добрич? Значи ще добавиш още една колона Добрич. И когато попълниш всички клетки за работа, те ще образуват диагинал, а всички останали клетки няма да съдържат нищо. Буквално се получава същата таблица както в базата данни, само дето градовете са на хоризонтален ред, а работата е на 45 градуса. Какъв е смисъла на тая таблица тогава...

Обаче ако градовете са индекс, т.е. да има толкова колони колкото са градове и толкова редове колкото са имената на хората, тогава масива от данни не е едномерен и е друго. И тогава би било редно градовете да са изнесени в друга таблица, а в тази да са записани като ID от другата.
При такъв случай за всеки ред от таблицата ще изчертаваш толкова <td> елемента, колкото е броя на градовете, като за всеки <td> елемент ще питаш дали града съответства. С други думи, когато изчертаваш реда на Петя, първо ще питаш дали тя е от Асеновград, после дали е от Варна, и само ако е от Добрич нанасяш в полето й "програмист".

Или ако може някак да се изкара такъв масив, че да съдържа всички клетки от таблицата, включително празните такива. Да има точно 7х7 = 49 на брой елемента ако таблицата е като тази горе. Идея си нямам как и дали това става с MySQL. Чувал съм за някакви JOIN неща, ама може и да се бъркам.
 
От: От: PHP - показване на резултатите взети от БД на различни места в html таблица

Това ми е ясно - но искам работата от $row['rabota'] да се визуализира в таблицата точно тук:
Виж файлът 12739

Виж тук как да прикачиш снимка - http://www.predpriemach.com/showthread.php?t=59735
А по темата нещо ти бяга логиката. Зарежи кода и пробвай пак да обясниш.
 
От: PHP - показване на резултатите взети от БД на различни места в html таблица

Ето снимка - дано се вижда вече!
ssnn.jpg

Ако не излиза снимката може да е видите тук: http://encyclopedia.lubopitko-bg.com/images/ssnn.jpg
Имената на колоните т.е. там където са изписани имената на градовете са фиксирани и няма как да се променят - остават си така. Няма там да се добавят още градове!
Имената на хората ще се променят - там може да се добавят и други имена!
Въпроса ми е като добавя професия тя да излиза срещу името на човека, но да е под града от който е дадената личност!


Логиката ми - имам си текстово поле. Имената на хората, изписани в колона "име" на таблицата, също ги държа и в форма <select><option></option></select>. В текстовото поле пиша професия (например:дърводелец), от select/option менюто избирам коя личност ще е дърводелец и събмитвам формата. В базата данни ми се записва така:
ssnn1.jpg

А като извиквам цялата информация за таблицата от базата данни, искам да се визуализира така:
ssnn2.jpg
 
Последно редактирано:
От: PHP - показване на резултатите взети от БД на различни места в html таблица

Нещо такова ти трябва ..
$q=mysqli_query($db, 'SELECT * FROM data');

$gradove = array();
while ($row = mysqli_fetch_assoc($q)){
$gradove[] = $row['grad'];


echo '<table>';
echo '<tr>';
echo '<th>Име</th>';
foreach ($gradove as $grad){
echo '<th>'.$grad.'</th>';
}
echo '</tr>';
while ($row = mysqli_fetch_assoc($q)){
echo '<tr>';
echo '<td>'.$row['name'].'</td>';
foreach($gradove as $grad)
echo '<td>'.($grad==$row['grad']?$row['rabota']:"&nbsp;").'</td>';
echo '</tr>';
}
echo '</table>';
 

Горе