Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: błąd w kodzie php
Forum PHP.pl > Forum > PHP
sz4rlej
Napisałem takie coś:

Kod
<?php
                     $tasks_filter=mysql_query("
                     SELECT task_id, task_name, task_duration, task_duration_type, task_project
                     FROM tasks
                     WHERE
                     task_end_date >= '".$start_date->format( FMT_DATETIME_MYSQL )."'
                     AND task_end_date <= '".$end_date->format( FMT_DATETIME_MYSQL )."'
                     AND task_id IN (SELECT task_id FROM user_tasks WHERE user_id=$log_userfilter)
                     ")
                     or die(mysql_error()."blad1");

                    while($r = mysql_fetch_array($tasks_filter)) $tab1[]=$r;
?>
<table cellspacing="1" cellpadding="4" border="0" class="tbl">
     <?php
    
         for ($x = 0; $x <count($tab2); $x++)
         {
             echo "<tr>";
             echo "<td>".$tab1[$x]['task_name']."</td>";
             echo "<td>".$tab1[$x]['task_duration']."</td>";
             echo "</tr>";
         }
     ?>
</table>

i w tabeli nic się nie pojawia. Ktoś m apomysł co jest nie tak? Polecenie mysql_num_rows($tasks_filter) zwraca wartość większą od zera, czyli zapytanie jest raczej poprawne
skowron-line
wrzucasz do tab1 a count robisz z tab2
sz4rlej
dzięki smile.gif odmóżdżony jestem totalnie winksmiley.jpg
nexis
Czym są tak właściwie obiekty start_date i end_date? Ponadto upewni się, że zmienna log_userfilter istnieje.

  1. <?php
  2. $query = mysql_query
  3.  ("SELECT
  4. `task_id`,
  5. `task_name`,
  6. `task_duration`,
  7. `task_duration_type`,
  8. `task_project`
  9.  FROM `tasks`
  10.  WHERE
  11. `task_end_date` >= '" . $start_date->format(FMT_DATETIME_MYSQL) . "'
  12. AND `task_end_date` <= '" . $end_date->format(FMT_DATETIME_MYSQL) . "'
  13. AND `task_id` IN
  14.  (SELECT `task_id` FROM `user_tasks` WHERE `user_id` = '" . $log_userfilter . "')
  15.  ") or exit(mysql_error());
  16. echo '<table>' . PHP_EOL;
  17. while ($result = mysql_fetch_array($query)) {
  18.  echo "\t" . '<tr>' . PHP_EOL;
  19.  echo "\t\t" . '<td>' . $result['task_name'] . '</td>' . PHP_EOL;
  20.  echo "\t\t" . '<td>' . $result['task_duration'] . '</td>' . PHP_EOL;
  21.  echo "\t" . '</tr>' . PHP_EOL;
  22. }
  23. echo '</table>';
  24. ?>
sz4rlej
tamten błąd już pokonany, teraz mam kolejną przeszkodę:
  1. <?php
  2. for ($i = 0; $i <count($tab); $i++){
  3. $tasklog_query=mysql_query("SELECT task_log_hours FROM task_log
  4. WHERE task_log_task='$tab[$i][task_id]' AND task_log_creator='$tab[$i][user_id]'") 
  5. or die(mysql_error()."blad2");
  6. for($j=0;$j<count($tasklog_query); $j++)
  7. {
  8. $tasklogs[]=mysql_fetch_array($tasklog_query);
  9. echo $tasklogs[$j]."<br/>";
  10. $suma+=$tasklogs[$j]["task_log_hours"];
  11. }
  12. }
  13. ?>


linijka echo $tasklogs[$j]."<br/>"; nie wyrzuca żadnych wartości, mimo, że za pomocą mysql query browser sprawdziłem zapytanie i daje ono prawidłowe rezultaty (czyli konkretne liczby a nie NULL)
ddiceman
blad w linjce 6. count() zlicza elementy tablicy a nie wyniki z mysql: powinno byc
  1. <?php
  2. for($j=0, $dl = mysql_num_rows($tasklog_query);$j<$dl; $j++)
  3. ?>
skowron-line
  1. <?php
  2. $tasklogs[]=mysql_fetch_array($tasklog_query); // tu w nawiasie daj $j
  3. echo $tasklogs[$j]."<br/>"; // powinno wyświetlić ( array )
  4. $suma+=$tasklogs[$j]["task_log_hours"];
  5. ?>

musisz podać nazwę kolumny z której chcesz dane wyświetlić
sz4rlej
żadna z waszych rad nie podziałała. problem leży chyba w tym, że strona nawet nie wchodzi do pętli
  1. <?php
  2. for($j=0;$j<count($tasklog_query); $j++){
  3. echo "pupa";
  4. }
  5. ?>


problem nie zmienił się, gdy pętlę for zastąpiłem pętlą while (zgodnie z php manual)
  1. <?php
  2. while($r = mysql_fetch_array($tasklog_query)) {
  3. $tasklogs[$j]=$r;
  4. echo "tasklogs";
  5. }
  6. ?>


nawet nie wchodzi mi do petli while sad.gif
ddiceman
Wpisz przed
  1. <?php
  2. echo mysql_error($tasklog_query);
  3. ?>

i zobacz jaki dostaniesz komunikat

albo w calosci (IMHO powinno dzialac w zupelnosci):
  1. <?php
  2. for ($i = 0; $i <count($tab); $i++){
  3. $tasklog_query=mysql_query("SELECT task_log_hours FROM task_log
  4. WHERE task_log_task='".$tab[$i]['task_id']."' AND task_log_creator='".$tab[$i]['user_id']."';") 
  5. or die(mysql_error()."blad2");
  6. $tasklogs = array();
  7. for($j=0, $dl=mysql_num_rows($tasklog_query);$j<$dl; $j++)
  8. {
  9. $tasklogs[]=mysql_fetch_array($tasklog_query);
  10. echo $tasklogs[$j]['task_log_hours']."<br/>";
  11. $suma+=$tasklogs[$j]["task_log_hours"];
  12. }
  13. }
  14. ?>
PUPI
Możliwe, że już na samym początku jest bug, sprawdź czy tab nie jest pusta i wykonuje się ta pętla.

  1. <?php
  2. for ($i = 0; $i <count($tab); $i++)
  3. ?>
sz4rlej
problem rozwiązany, po prostu zdarzyło się tak, że pierwsze wiersze w bazie danych były puste, a dopiero kolejne zawieraly to, czego potrzebuję. Musiałem użyć innego sposobu aby posumować kolumny i się udału dzięki SUM smile.gif

dzięki wszystkim za pomoc winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.