Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] złe przekazywanie danych z form do koszyka
Forum PHP.pl > Forum > Przedszkole
FliSs_tCv
Witam nie owijając w bawełne smile.gif pragne przedstawić mój problem otóż polega on na tym ,że nie przekazuję danych tak jak powinien tzn. chodzi o nie dokładne przesyłanie ilości towaru (w form ustawiam 1 a w koszyku wyświetla 2) i tutaj nie o tyle błąd co moja nieumiejętność w zrozumieniu może i nawet w wykonaniu aby cena danego towaru która w form jest wybierana za pomocą option select byla przesłana taka jak została wybrana. w pliku "koszyk.pizza.php" będzie widoczne pole cena lecz nie wiem jak wykonać aby przyjmowała wartość wysłanego z wcześniejszego formularza

oto kod tego formularza który przesyła dane do koszyka nosi nazwę "zam.pizza.php"

  1. <div style="margin : auto; width : 450px; text-align : left;">
  2. <div style="width : 420px; margin-top : 20px; margin-bottom : 30px;">
  3. <?php
  4. $sql_serwer = "localhost";
  5. $sql_login = "";
  6. $sql_haslo = "";
  7. $sql_baza  = "caprii";
  8. $sql_tabela = "pizza";
  9. mysql_connect($sql_serwer, $sql_login, $sql_haslo);
  10. mysql_select_db($sql_baza);
  11. $_id = $_GET['id'];
  12. $query = "SELECT nazwa, cena_m, cena_d FROM pizza WHERE id='$_id'";
  13. mysql_query("SET CHARSET latin2");
  14. $result = mysql_query($query) or die(mysql_error());
  15. $row = mysql_fetch_array($result);
  16. echo "<table style=\"border : 1px solid #363636;\">
  17. <tr>
  18. <td style=\"width : 400px; height : 50px; text-align : center; border : 1px solid white; background : white; color : #363636; f
    ont-size : 14px;\">
  19. Pizza, którą wybrałeś, to :<b>$row[nazwa]
  20. </td>
  21. </tr>";
  22. ?></b>
  23. <tr>
  24. <form action="index.php?page=koszyk.pizza&id=<?php echo $_id; ?>" method="post">
  25. <input type="hidden" name="pizza" value="<?php echo $row['nazwa']; ?>">
  26. <td style="width : 400px; height : 50px; text-align : center; border : 1px solid white; background : white; color : #363636; f
    ont-size : 12px;">
  27. <b>Wybierz wielkość</b>: <select style="border : 1px solid #363636;" name="wielkosc">
  28. <option value="m" selected>Mała (<?php echo $row['cena_m']; ?> zł)</option>
  29. <option value="d">Duża (<?php echo $row['cena_d']; ?> zł)</option>
  30. </select>
  31.  
  32. <b>Wybierz ilość</b>: <input style="border : 1px solid #363636;" type="text" name="ilosc" value=1 size=5 maxlength=2>
  33. </td>
  34.  </tr>
  35. <tr>
  36. <td style="width : 400px; height : 330px; text-align : center; border : 1px solid white; background : white;">
  37.  
  38. <span style="font-size : 13px;">
  39. <b style="color : #363636;">Dodatek do pizzy Mała(1.00zł) Duża(2.00zł),<br />
  40. Podwójny ser Mała(1.50zł) Duża(3.00zl)
  41. </b>
  42. <br />
  43. <br />
  44. </span>
  45. <?php
  46. $query = "SELECT * FROM dodatki";
  47. $result = mysql_query($query);
  48. echo '<table>'; $i=1;
  49. while ($row = mysql_fetch_array($result)){
  50. if($i==1) echo '<tr>';
  51. echo '<td style="border : 1px solid #363636; color : #363636; font-size : 11px;">
  52. <input type="checkbox" name="dodatek['.$row['id'].']" value=true>
  53. <b>'.$row['nazwa'].'</b>
  54.  </td>';
  55. if($i==3) {
  56. echo '<tr>';
  57. $i=0;
  58. }
  59. $i++;
  60. }
  61. echo '</table>';
  62. ?>
  63. </td>
  64. </tr>
  65. <tr>
  66. <td style="width : 400px; height : 250px; text-align : center; border : 1px solid white; background : white; color : #363636;">
  67. <b style="font-size : 13px;">Uwagi dotyczące wykonania pizzy.</b><br /><br />
  68. <textarea style="border : 1px solid #363636; width : 390px; height : 200px;" name="uwagi"></textarea>
  69. </td>
  70. </tr>
  71. </tr>
  72. </table>
  73. <p style="width : 400px; text-align : center;"><input type="submit" value="Dodaj do koszyka"></p>
  74. </form>
  75. </div>
  76. </div>


a oto plik koszyk.pizza.php

  1. <?php
  2. Treść tego pliku uległa zmianie. na dole podam jak wygląda aktualnie koszyk :)
  3. ?>


Podam również zrzut z bazy danych smile.gif nie da się tego wszystkiego wyświetlić w jetnym topicu smile.gif jak ktoś będzie chętny proszę napisać w nastepnej wypowiedzi podam takowy zrzut smile.gif

Prosiłbym was o pomoc w wykonaniu prawidłowgo skryptu nie mam pojęcia jak przekazać poprawnie te dane do koszyk a może bardziej jak je odebrac w pliku koszyk smile.gif pozdrawiam
hank
hej:)

piszesz bardzo nieczytelny kod:) o tej porze już ciężko się domyślać jakie dane pobierasz np tutaj "$wynik = mysql_query("SELECT * FROM $sql_tabela WHERE id='$id'");". Co do twojego pytania, to prześledź dokładnie, co się dzieje z twoją zmienną od momentu przesłania jej do skryptu-koszyka. Błędy 'o jedynkę' zdarzają się bardzo często, zwłaszcza przy operatorach dekrementacji/inkrementacji
Kod
if ($sz=="") $_SESSION["koszyk"]["$id"]["ile"]++;

Być może to ta linia powoduje błąd - wrzuć w kilku miejscach echo, które wypisze ci aktualną wartość zmiennej w trakcie wykonywania się skryptu, wtedy szybko wyłapiesz miejsce, gdzie następuje niepożądana zmiana. Kolejnym punktem, gdzie może się wszystko sypać jest zapis typu
Kod
$_SESSION["koszyk"]["$id"]["ile"]

Jeśli $id jest zmienną, wówczas nie obejmuj jej cudzysłowem. W cudzysłowach umieszczaj tylko stringi (literały). Następną rzeczą, która może ci kiedyś uprzykrzyć życie to nie trzymanie się wybranych przez ciebie standardów. Może pomyślisz że się czepiam, ale tak nie jest:) na podobnych błędach straciłem kiedyś sporo czasu:) piszesz np. <br /> co sugeruje xhtml'a, a wartości atrybutów tagów podajesz bez cudzysłowów, co było dopuszczalne tylko w 'zwykłym' html'u:
Kod
<b>Wybierz ilość</b>: <input (...) name="ilosc" value=1 size=5 maxlength=2>

Wartości liczbowe atrybutów również warto podawać otaczając je cudzysłowem lub apostrofami. Wątpię, aby to było przyczyną twojego problemu, ale to tak na zapas:) Poza tym, zamiast tablicy $_REQUEST polecam ci używanie konkretnie $_GET lub $_POST, gdyż masz wtedy większą kontrolę nad przekazywanymi danymi - wiesz skąd się spodziewasz danych i stamtąd je pobierasz.

Polecam ci jeszcze jedną rzecz. Zamiast grzęznąć w kodzie obok zapisów takich jak
Kod
     if (mysql_connect($sql_serwer, $sql_login, $sql_haslo) && mysql_select_db($sql_baza))
    {
        $wynik = mysql_query("SELECT * FROM $sql_tabela WHERE id='$id'");
        mysql_close();
    }


warto sobie nawiązywanie i kończenie połączenia z bazą wywalić do osobnego pliku, gdzie znajdą się dwie podstawowe funkcje:
Kod
// łączenie z bazą danych
function ConnectDB()
{
     $sql = @mysql_connect('localhost', 'login', 'haslo');
     if (!$sql)
     {
         exit('Wystąpił błąd nr ('.mysql_errno().'): <b>'.mysql_error().'</b>');
     }
     $db = mysql_select_db('caprii') or die("BŁĄD - nieudane wybranie bazy!");
}
// rozłączenie z bazą danych
function DisconnectDB()
{
     @mysql_close();
}

potem sobie ten plik inkludujesz na początku każdego skryptu wymagającego dostępu do bazy, na początku skryptu wywołujesz ConnectDB() a na końcu DisconnectDB(). W środku zostaje ci już tylko miła zabawa z zapytaniami.

To tyle , mam nadzieję, że trochę ci pomogłem swoim gadaniem.

Pozdro:) Aha, pisz więcej komentarzy:)
FliSs_tCv
Witaj Hank wielkie dzięki za opr biggrin.gif nic nie szkodzi smile.gif skrypt koszyka uległ zmianie. podam go niżej, lecz w nim mam również problem ale myślę że to proscizna smile.gif ja już nie mam pomysłów sad.gif

  1. <?php
  2. $sql_serwer = "localhost";
  3. $sql_login = "";
  4. $sql_haslo = "";
  5. $sql_baza  = "caprii";
  6. $sql_tabela = "pizza";
  7. mysql_connect($sql_serwer, $sql_login, $sql_haslo);
  8. mysql_select_db($sql_baza);
  9.  
  10. $_SESSION['koszyk']['pizza'][$_POST['pizza']]['nazwa'] = $_POST['pizza'];
  11. $_SESSION['koszyk']['pizza'][$_POST['pizza']]['ilosc'] = $_POST['ilosc'];
  12. $_SESSION['koszyk']['pizza'][$_POST['pizza']]['wielkosc'] = $_POST['wielkosc'];
  13. $_SESSION['koszyk']['pizza'][$_POST['pizza']]['uwagi'] = $_POST['uwagi'];
  14. $_SESSION['koszyk']['pizza'][$_POST['pizza']]['dodatki'] = $_POST['dodatek'];
  15.  
  16. $przetworzona_wielkosc = ($_POST['wielkosc'] == 'm') ? 'mała' : 'duża';
  17. echo '<p>Wybrałeś, '.$przetworzona_wielkosc.' pizzę o nazwie '.$_POST['pizza'].'.</p> Ilość:'.$_POST['ilosc'].' <p>Dodatki od pizzy:</p>';
  18.  
  19. $array = array_keys($_POST['dodatek']);
  20. $query = "SELECT nazwa FROM dodatki WHERE id=";
  21. foreach ($array as $dodatek)
  22. {
  23. $query .= $dodatek.' OR id=';
  24. }
  25. $query = substr($query, 0, -7);
  26. $result = mysql_query($query);
  27. while ($row = mysql_fetch_array($result))
  28. {
  29. echo $row['nazwa'].'<br>';
  30. }
  31. ?>
  32. <a href="add.php">Zamów</a>


Tutaj jest taki problemem że jak nie dodam żadnego dodatku wyświetla mi taki o to błąd patrzałem w manualu ale dla mnie mało jeszcze znającego się na php to nic nie powiedziało ehh. \

BŁĄD = "Warning: array_keys() [function.array-keys]: The first argument should be an array in D:\WebServ\httpd-users\test\koszyk.php on line 22

Warning: Invalid argument supplied for foreach() in D:\WebServ\httpd-users\test\koszyk.php on line 24
ser
podwójny ser
potrójny ser
papryka
szynka
"

jak widać pokazuję mi wszystkie dostępne składniki poniżej sad.gif . Zaznaczę że jak tylko nie dodam tego dodatku tak sie pokazuję a jak dodam chodżby jeden już nie ma tego błędu smile.gif please help me smile.gif

-----------EDIT -------------------

zauważyłem również że nie da się za jednym zamówieniem zamówić 2 inych pizz kurde a to ważne sad.gif bez kitu nie wiem już jak to zrobić:(

to jest kod starego koszyka może mi pomożecie z niego jakoś udoskonalić ten wyżej abo na odwrót sad.gif ?

stary koszyk.php

  1. <?php
  2. ?>
  3. <?php
  4. $sql_serwer = "localhost";
  5. $sql_login = "";
  6. $sql_haslo = "";
  7. $sql_baza  = "caprii";
  8. $sql_tabela = "pizza";
  9.  
  10. function odbierz($txt)
  11. {
  12. if (get_magic_quotes_gpc()) $txt = stripslashes($txt);
  13. return str_replace(array('',"'"), array('',"&#092;'"), trim($txt));
  14. }
  15.  
  16.  
  17. $id = odbierz($_REQUEST["id"]);
  18. $sz = isset($_REQUEST["sz"]) ? number_format($_REQUEST["sz"],0,".","") : "";
  19.  
  20. if ($id<>"")
  21. {
  22. if (mysql_connect($sql_serwer, $sql_login, $sql_haslo) && mysql_select_db($sql_baza))
  23. {
  24. $wynik = mysql_query("SELECT * FROM $sql_tabela WHERE id='$id'");
  25. }
  26. if ($wynik && mysql_num_rows($wynik)==1)
  27. {
  28. $dane = mysql_fetch_array($wynik);
  29. $_SESSION["koszyk"]["$id"]["nazwa"]=$dane["nazwa"];
  30. $_SESSION["koszyk"]["$id"]["cena"]=$dane["cena"];
  31. $_SESSION["koszyk"]["$id"]["wielkosc"]=$_REQUEST["wielkosc"];
  32. foreach ($_REQUEST['dodatek'] as $dodatek => $true)
  33. {
  34. $_SESSION["koszyk"]["$id"]["dodatki"][]=$dodatek;
  35. }
  36. $_SESSION["koszyk"]["$id"]["ile"]=$_REQUEST['ilosc'];
  37. if ($sz=="") $_SESSION["koszyk"]["$id"]["ile"]++;
  38. else if ($sz>=1) $_SESSION["koszyk"]["$id"]["ile"]=$sz;
  39. else if ($sz<=0) unset($_SESSION["koszyk"]["$id"]);
  40. }
  41. }
  42. if (count($_SESSION["koszyk"])>0)
  43. {
  44. echo "<table border=\"1\">
  45. <colgroup>
  46. <col />
  47. <col align=\"right\" />
  48. <col align=\"center\" />
  49. <col align=\"right\" />
  50. </colgroup>
  51. <tr><th>towar</th><th>cena</th><th>sztuk</th><th>łącznie</th></tr>";
  52. foreach($_SESSION["koszyk"] as $indeks=>$kosz)
  53. {
  54. echo "<tr>";
  55. echo "<td>{$kosz["nazwa"]}</td>";
  56. echo "<td>{$kosz["cena"]} zł</td>";
  57. echo "<td>
  58. <form action=\"index.php?page=zam.dania\" method=\"post\" style=\"display:inline;\">
  59. <div style=\"display:inline;\">
  60. <input type=\"hidden\" name=\"id\" value=\"$indeks\" />
  61. <input type=\"text\" name=\"sz\" value=\"{$kosz["ile"]}\"
  62. style=\"width:25px;\" />
  63. <input type=\"submit\" value=\"zmień\" style=\"width:45px;\" />
  64. </div></form>
  65. <form action=\"index.php?page=zam.dania\" method=\"post\" style=\"display:inline;\">
  66. <div style=\"display:inline;\">
  67. <input type=\"hidden\" name=\"id\" value=\"$indeks\" />
  68. <input type=\"hidden\" name=\"sz\" value=\"0\"
  69. style=\"width:25px;\" />
  70. <input type=\"submit\" value=\"usuń\" style=\"width:45px;\" />
  71. </div></form>
  72. </td>";
  73. echo "<td>".number_format($kosz["cena"]*$kosz["ile"],2,".","");
  74. echo " zł</td>";
  75. echo "</tr>";
  76. $lacznie +=$kosz["cena"]*$kosz["ile"];
  77. }
  78. echo "<tr><td colspan=\"3\" align=\"right\">
  79. w sumie: </td><td>";
  80. echo number_format($lacznie,2,".","")." zł</td></tr>";
  81. echo "</table>";
  82.  
  83.  
  84. echo "<table border=\"1\" style=\"font-size : 12px;\">";
  85. echo "<tr>
  86. Aby zamówienie zostało zrealizowane, należy podać swoje dane osobowe<br /> oraz adres zamieszkania i nr. telefonu.
  87. Kliknij <a href=\"index.php?page=add\">tutaj</a> aby kontynuować!
  88. </tr>";
  89. echo "</table>";
  90. } else echo "<p style=\"width : 730px; text-align : center; margin-top : 100px; margin-bottom : 100px;\">Twój koszyk jest pusty...</p>";
  91. ?>
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.