Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak dodać kolejny element do tablicy
Forum PHP.pl > Forum > PHP
tomekp
Wyciągam dane z bazy:
  1. <?php
  2. $dane = mysql_fetch_assoc(sql("SELECT * FROM dane WHERE id = '$_POST[id]'"));
  3. ?>

Wrzucam go sobie w tablice:
  1. <?php
  2. $faktura[] = $dane;
  3. ?>

Co daje:
Kod
Array
(
    [0] => Array
        (
            [id] => 9
            [nazwa_towaru] => towar
            [vat] => 22%
            [cena_netto] => 200.00
            [cena_vat] => 44.00
            [cena_brutto] => 244.00
            [opis_towaru] =>
            [ilosc_sztuk] => 1
        )

)

Chcę dodać kolejny rekord w ten sposób do tej tablicy w ten sam sposób pobierając z bazy, jak to zrobić?
Hacker
  1. <?php
  2. $dane = mysql_fetch_assoc(sql("SELECT * FROM dane WHERE id = '$_POST[id]'"));
  3. $faktura[] = $dane;
  4. ?>


EDIT:
Żeby nie było, że nabijam posty
Cytat
  musisz pobrać największy numer elementu tablicy $faktura[] i zapisać do $faktura[$i] gdzie $i to będzie wartość ostatniego elementu tablicy + 1


Można, ale po co skoro można napisać $tablica[] = nastempnyelement;
dyktek
musisz pobrać największy numer elementu tablicy $faktura[] i zapisać do $faktura[$i] gdzie $i to będzie wartość ostatniego elementu tablicy + 1
tomekp
Robie tak ale coś mi nie działa tak jak należy, nie zapamiętuje wartości po dodaniu nowego elementu.
Foxx
Jak już piszesz, że kod nie działa, to go wklej.
Może chodzi Ci o coś takiego:
  1. <?php
  2.  
  3. $i=0;
  4. $result = mysql_query($query) or die(mysql_error());
  5. if (mysql_num_rows($result)) {
  6.     while($odp = mysql_fetch_assoc($result)){
  7.            $faktura[$i] = $odp;
  8.            $i++;
  9.     }
  10. } 
  11.  
  12. ?>
dyktek
jeśli robisz to z przeładowaniem strony no to zapisz tablice do sesji
a potem ostatni element odczytasz przez
  1. <?php
  2. sizeof($mojaTablica)
  3. ?>
tomekp
Opisze może dokładniej o co mi chodzi.
Z listy magazynu wybieram produkt który chcę dodać do faktury i mam problem z zachowaniem danych tej faktury, próje to zrobić za pomocą zmiennych $_POST, ale gubię dane faktury. kod wyglada następująco:

  1. <?php
  2. function add() {
  3. global $smarty;
  4.  
  5. if ($_SERVER['REQUEST_METHOD'] == "POST") {
  6. if ($_GET['z'] == "2") {
  7.  
  8. } elseif ($_GET['z'] == "1") {
  9.  
  10. if (!is_valid_kod_klienta($_POST['kod_klienta'])) {
  11. error("Klient o podanym kodzie klienta nie istnieje!");
  12. } else {
  13.  
  14. if (sizeof($_POST['faktura']) == 0) {
  15. $_POST["faktura"] = array();
  16. }
  17.  
  18. if ($_POST['produkt_magazyn'] != 0) {
  19. $dane = mysql_fetch_assoc(sql("SELECT * FROM magazyn WHERE id = '$_POST[produkt_magazyn]';"));
  20. $dane['ilosc_sztuk'] = $_POST['ilosc_sztuk'];
  21. array_push($_POST["faktura"],$dane);
  22. unset($_POST['produkt_magazyn']);
  23. unset($_POST['ilosc_sztuk']);
  24. }
  25.  
  26. ?><pre><?print_r($_SESSION);?></pre><?
  27.  
  28. $query = sql("SELECT id,nazwa_towaru FROM magazyn ORDER BY nazwa_towaru ASC");
  29. while ($a = mysql_fetch_assoc($query)) {
  30. $magazyn[] = $a;
  31. }
  32. $smarty->assign('magazyn',$magazyn);
  33. }
  34. }
  35. }
  36.  
  37. $smarty->display('header.tpl');
  38. $smarty->display('fv/add.tpl');
  39. $smarty->display('footer.tpl');
  40. }
  41. ?>

Template do tego:
  1. [snip]
  2. {elseif $smarty.get.z == "1"}
  3.      {if !empty($error)}
  4.            {include file="error.tpl"}
  5.      {else}
  6. <br /><br />
  7. <table border="0" cellpadding="5" cellspacing="1" width="800">
  8. <tr>
  9.      <td width="800" align="left" class="listtitle" colspan="2"><b>Dodawanie faktury krok (2/4)</b></td>
  10. </tr>
  11. <tr>
  12.      <td width="800" align="left" class="list" colspan="2"><b>Lista produktów na fakturze</b></td>
  13. </tr>
  14. {if empty($faktura)}
  15. <tr>
  16.      <td width="800" align="center" class="list" colspan="2">Nie dodałeś żadnych produktów!</td>
  17. </tr>
  18. {/if}
  19. <tr>
  20.      <td width="800" align="left" class="listtitle" colspan="2"></td>
  21. </tr>
  22. <form method='POST' action='{$smarty.server.PHP_SELF}?option=fv&action=add&z=1'>
  23. <tr>
  24.      <td width="800" align="left" class="list" colspan="2"><b>Wybierz produkt z magazynu</b></td>
  25. </tr>
  26. <tr>
  27.      <td width="200" align="right" class="list"><b>Produkt:</b></td>
  28.      <td width="600" align="left" class="list">
  29. <SELECT name="produkt_magazyn" class="text">
  30. <OPTION value="0">-wybierz produkt z magazynu-</OPTION>
  31. {foreach from=$magazyn item="entry"}
  32.            <OPTION VALUE="{$entry.id|escape}">{$entry.nazwa_towaru|escape}</OPTION>
  33. {/foreach}
  34.      </td>
  35. </tr>
  36. <tr>
  37.      <td width="200" align="right" class="list"><b>Ilość sztuk:</b></td>
  38.      <td width="600" align="left" class="list"><input type="text" name="ilosc_sztuk" value="1" size="4"></td>
  39. </tr>
  40. <tr>
  41.      <td width="800" align="center" class="list" colspan="2"><input type="submit" value="Dodaj produkt do faktury"></td>
  42. </tr>
  43. <tr>
  44.      <td width="800" align="left" class="listtitle" colspan="2"></td>
  45. </tr>
  46. {foreach from=$smarty.post item="entry" key="key"}
  47. <input type="hidden" name="{$key}" value="{$entry}">
  48. {/foreach}
  49. </form>
  50. [snip]

Jakbyście mi mogli zasugerować co jest źle.
dyktek
masz jakiś listing towarów w magazynie, wybierasz towar i przekazujesz jego id postem, wyjmujsz z bazy dane powiązane z tym id i zapisujesz je do tablicy $faktura[0] zrób coś takiego

  1. <?php
  2.  
  3. //..
  4.  
  5. //..
  6. $faktura[0] = $row;
  7. $_SESSION['faktura'] = $faktura[0];
  8.  
  9. ?>

w sesji masz juz tablice faktura i potem wyjmujesz ostatni klucz tablicy zwiekszasz o 1 i dodajesz kolejny produkt, wszędzie gdzie czytasz zmienne sesyjne dodaj session_start();
tomekp
Chodzi o to, czy można to zrobić bez sesji?
dyktek
można przesyłając cały czas dane w ukrytych polach formularza lub cookie
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.