2017-02-21 15 views
1

Я изо всех сил пытаюсь получить небольшой PHP-скрипт для правильной работы. Пожалуйста, проверьте the following link:, заменяющий определенные значения ключа (с помощью foreach) в массиве, останавливает дальнейшее выполнение PHP-скрипта. Как решить?

Связанный скрипт работает правильно. Единственная дополнительная вещь, которую я хочу сделать, - это в столбце «werkgebied», чтобы заменить числа соответствующими текстовыми значениями (например, 1 = Nederland, 5 = Friesland и т. Д.

Чтобы добиться этого, я использовал следующий код

foreach ($result as $key=>$val) 
{ 
    if ($key='pf_werkgebied' && $val=1) 
    { 
     $val="Nederland"; 
    } 
} 
echo $val; 
echo '<br>'; 

foreach ($result as $key=>$val) 
{ 
    if ($key='pf_werkgebied' && $val=5) 
    { 
     $val = "Friesland"; 
    } 
} 
echo $val; 
echo '<br>'; 

отображается полный сценарий ниже:?

<?php 
$connect = mysqli_connect ("localhost", "XXX", "YYY", "ZZZ"); 
$output = ''; 


if(isset($_POST["query"])) 
{ 
$search = mysqli_real_escape_string($connect, $_POST["query"]); 
$query = " 
SELECT * FROM phpbb_profile_fields_data 
INNER JOIN phpbb_users ON 
phpbb_profile_fields_data.user_id=phpbb_users.user_id 
WHERE pf_voornaam COLLATE UTF8_GENERAL_CI LIKE '%".$search."%' 
OR pf_achternaam COLLATE UTF8_GENERAL_CI LIKE '%".$search."%' 
OR pf_woonplaats COLLATE UTF8_GENERAL_CI LIKE '%".$search."%' 
OR pf_telefoon_vast COLLATE UTF8_GENERAL_CI LIKE '%".$search."%' 
OR pf_telefoon_mobiel COLLATE UTF8_GENERAL_CI LIKE '%".$search."%' 
OR user_email COLLATE UTF8_GENERAL_CI LIKE '%".$search."%' 
OR pf_werkgebied COLLATE UTF8_GENERAL_CI LIKE '%".$search."%' 
"; 
} 
else 
{ 
$query = "SELECT d.pf_voornaam, d.pf_achternaam, d.pf_werkgebied, 
d.pf_ei_opl_afgerond, CASE WHEN d.pf_ei_opl_afgerond = 1 THEN 'voor 2000' 
WHEN d.pf_ei_opl_afgerond = 10 THEN '2007' 
WHEN d.pf_ei_opl_afgerond = 12 THEN '2009' 
WHEN d.pf_ei_opl_afgerond = 15 THEN '2012' 
WHEN d.pf_ei_opl_afgerond = 17 THEN '2014' 
WHEN d.pf_ei_opl_afgerond = 18 THEN '2015' 
WHEN d.pf_ei_opl_afgerond = 20 THEN '2017' 
END AS fly 
FROM phpbb_profile_fields_data d 
ORDER BY d.pf_achternaam ASC"; 
} 
$result = mysqli_query($connect, $query); 

foreach ($result as $key=>$val) 
{ 
    if ($key='pf_werkgebied' && $val=1) 
    { 
     $val="Nederland"; 
    } 
} 
echo $val; 
echo '<br>'; 

foreach ($result as $key=>$val) 
{ 
    if ($key='pf_werkgebied' && $val=5) 
    { 
     $val = "Friesland"; 
    } 
} 
echo $val; 
echo '<br>'; 


if(mysqli_num_rows($result) > 0) 
{ 
$output .= ' 
    <div class="table-responsive"> 
    <table class="table table bordered"> 
    <tr> 
    <th>Voornaam</th> 
    <th>Achternaam</th> 
    <th>Email</th> 
    <th>Afgestudeerd</th> 
    <th>Werkgebied</th> 
    </tr> 
'; 

while($row = mysqli_fetch_array($result)) 
{ 
    $output .= ' 
    <tr> 
    <td>'.$row["pf_voornaam"].'</td> 
    <td>'.$row["pf_achternaam"].'</td> 
    <td>'.$row["user_email"].'</td> 
    <td>'.$row["fly"].'</td> 
<td>'.$row["pf_werkgebied"].'</td> 
    </tr> 
    '; 
} 
echo $output; 
} 
else 
{ 
echo 'Data Not Found'; 
} 

?> 

результат приведенного выше кода можно проверить via the following link. Что происходит здесь не так, что должно быть улучшено Любая т ips высоко оценили.

ответ

0

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

Это вопрос из следующих шагов: 1: взрывая несколько значений полого элемента массива 2: обработка отдельных элементов 3: обработанные взрывающихся отдельные элементы обратно в элемент массива.

Результат можно увидеть via this link.

Здесь Вы можете найти сценарий, который сделал трюк

<?php 
$connect = mysqli_connect("localhost", "XXX", "YYY", "ZZZ"); 
$output = ''; 

if(isset($_POST["query"])) 
{ 
$search = mysqli_real_escape_string($connect, $_POST["query"]); 
$query = " 
SELECT * FROM phpbb_profile_fields_data 
INNER JOIN phpbb_users 
ON phpbb_profile_fields_data.user_id=phpbb_users.user_id 
WHERE pf_voornaam COLLATE UTF8_GENERAL_CI LIKE '%".$search."%' 
OR pf_achternaam COLLATE UTF8_GENERAL_CI LIKE '%".$search."%' 
OR pf_woonplaats COLLATE UTF8_GENERAL_CI LIKE '%".$search."%' 
OR pf_telefoon_vast COLLATE UTF8_GENERAL_CI LIKE '%".$search."%' 
OR pf_telefoon_mobiel COLLATE UTF8_GENERAL_CI LIKE '%".$search."%' 
OR user_email COLLATE UTF8_GENERAL_CI LIKE '%".$search."%' 
OR pf_werkgebied COLLATE UTF8_GENERAL_CI LIKE '%".$search."%' 
"; 
} 
else 
{ 
$query = "SELECT d.pf_voornaam, d.pf_achternaam, d.pf_werkgebied, 
d.pf_ei_opl_afgerond, CASE WHEN d.pf_ei_opl_afgerond = 1 THEN 'voor 2000' 
WHEN d.pf_ei_opl_afgerond = 10 THEN '2007' 
WHEN d.pf_ei_opl_afgerond = 12 THEN '2009' 
WHEN d.pf_ei_opl_afgerond = 15 THEN '2012' 
WHEN d.pf_ei_opl_afgerond = 17 THEN '2014' 
WHEN d.pf_ei_opl_afgerond = 18 THEN '2015' 
WHEN d.pf_ei_opl_afgerond = 20 THEN '2017' 
END AS fly 
FROM phpbb_profile_fields_data d 
ORDER BY d.pf_achternaam ASC"; 
} 

$result = mysqli_query($connect, $query); 

echo "<table border='1'> 
<tr> 
<th>Voornaam</th> 
<th>Achternaam</th> 
<th>Email</th> 
<th>Afgestudeerd</th> 
<th>Werkgebied</th> 
</tr>"; 

while($row = mysqli_fetch_array($result)) 
{ 


$selected_opts=explode(';',$row['pf_werkgebied']); 
foreach ($selected_opts as & $selected_opt) 
{ 
if ($selected_opt == '1'){ $selected_opt = "Nederland"; } 
elseif ($selected_opt == '5'){ $selected_opt = "Groningen"; } 
elseif ($selected_opt == '6'){ $selected_opt = "Friesland"; } 
elseif ($selected_opt == '7'){ $selected_opt = "Drenthe"; } 
elseif ($selected_opt == '8'){ $selected_opt = "Gelderland"; } 
elseif ($selected_opt == '9'){ $selected_opt = "Utrecht"; } 
elseif ($selected_opt == '18'){ $selected_opt = "Brabant"; } 
elseif ($selected_opt == '19'){ $selected_opt = "Limburg"; } 

// echo "$selected_opt <br />"; 
} 

$row['pf_werkgebied'] = implode(', ', $selected_opts); 
// echo "$selected_opts_string <br />"; 

echo "<tr>"; 
echo "<td>" . $row['pf_voornaam'] . "</td>"; 
echo "<td>" . $row['pf_achternaam'] . "</td>"; 
echo "<td>" . $row['user_email'] . "</td>"; 
echo "<td>" . $row['fly'] . "</td>"; 
echo "<td>" . $row['pf_werkgebied'] . "</td>"; 
echo "</tr>"; 
} 
echo "</table>"; 

mysqli_close($con); 
?> 
0

Прежде всего, я рекомендую вам больше узнать о ООП here является хорошим учебником и MVC более here. И, конечно, используйте SOLID.
Потому что нехорошо использовать запросы к базе данных в том же скрипте с выходом.
Следующая вещь, попытаться минимизировать код, это означает следующее:
$result = mysqli_query($connect, $query); foreach ($result as $key=>$val) { if ($key='pf_werkgebied' && $val=1) { $val="Nederland"; } else if($key='pf_werkgebied' && $val=5){ $val = "Friesland"; } else {....} } echo $val; echo '<br>';


т.д.

+0

спасибо за ваши ценные предложения. ООП, MVC и SOLID находятся в моем списке дел сейчас. Я попытался свести к минимуму мой код так, как вы предложили, к сожалению, это не решило проблему. –

+0

Вы уверены, что '$ row [" pf_werkgebied "]' возвращает то, что вы хотите, строку, а не целое число? Возможно, он возвращает индекс строки, но для вашей задачи вам нужен второй элемент массива. Возможно, вы можете получить его с помощью '$ row [" pf_werkgebied "] [1]'. И будет здорово, если вы покажете нам свой отладочный запрос с 'print_r' – Grynets

+0

hi Grynets, результат print_r ($ output); показывает только заголовки таблицы (которые: Voornaam Achternaam Email Afgestudeerd Werkgebied) –

0

вы можете попробовать, как это, вам не нужно писать $ ключ = 'pf_werkgebied' & & $ Вэл = 5, если вы должны сравнить же «pf_werkgebied» с $ ключ

$data = array(1=>'Nederland',5=>'Friesland'); //put name in array as you alreay know the names 

$result = mysqli_query($connect, $query); 

foreach ($result as $resultdata) { 

switch ($resultdata['pf_werkgebied']){ // using switch instead of if condition 

    case "1" : 
     $val = $data[1]; 
     echo $data[1]; 

    case "5" : 
     $val = $data[5]; 
     echo $data[5]; 

    } 

} 
+0

Спасибо за ваш ответ. Однако при использовании вашего предложения немного дальше в скрипте: if (mysqli_num_rows ($ resultdata)> 0) теперь запускает «Данные не найдены». И результаты таблицы не отображаются. –

+0

для mysqli_num_rows вам нужно использовать $ result (как и данные таблицы) вместо $ resultdata, пожалуйста, попробуйте это – Sooraz

+0

привет Sooraz, я сделал, теперь я получаю «старую» ситуацию, а это значит: эхо отображается правильно и после этого отображаются только заголовки таблицы, содержимое таблицы не отображается. –