Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP+MYSQL Przyjęcie towaru i faktura
Forum PHP.pl > Forum > PHP
kanjox
Witam,

Mam problem ze stworzeniem kodu, który utworzy mi fakturę oraz doda więcej niż 1 rekord do bazy.

baza wygląda tak:
schemat

Potrzebuję tego na zajęcia.
Z góry dziękuję za pomoc i poświęcony czas.
kapslokk
http://lmgtfy.com/?q=PHP+PDO+tutorial
To Ci powinno wiele wyjaśnić wink.gif Jak już coś napiszesz i będziesz miał z tym problem to wrzuć kod smile.gif
kanjox
W tym fragmencie chcę zrobić wprowadzenie danych do tabeli towar oraz(jeśli cześć danych się powtarza) zamianę danych.

No i nie wiem co wpisać w funkcji if(zastanawiałem się, czy nie użyć pętli for)

  1. <?php
  2. require_once "connect/connectPDO.php";
  3.  
  4. try
  5. {
  6.  
  7. if($_SERVER['REQUEST_METHOD'] == 'POST')
  8. {
  9.  
  10.  
  11.  
  12. $stmt = $db -> prepare('INSERT INTO towar (id_towar, Nazwa, Rodzaj, VAT, CENA, STAN)
  13. VALUES(
  14. :id_towar,
  15. :Nazwa,
  16. :Rodzaj,
  17. :VAT,
  18. :CENA,
  19. :STAN'); // INSERT
  20.  
  21. $stmt -> bindValue(':id_towar', $_POST['id_towar'], PDO::PARAM_STR); // POSZCZEGÓLNE KOLUMNY
  22. $stmt -> bindValue(':Nazwa', $_POST['Nazwa'], PDO::PARAM_STR);
  23. $stmt -> bindValue(':Rodzaj', $_POST['Rodzaj'], PDO::PARAM_INT);
  24. $stmt -> bindValue(':VAT', $_POST['VAT'], PDO::PARAM_STR);
  25. $stmt -> bindValue(':CENA', (float)$_POST['CENA'], PDO::PARAM_INT);
  26. $stmt -> bindValue(':STAN', $_POST['STAN'], PDO::PARAM_INT);
  27.  
  28.  
  29. // jeśli zawartości 3 komórek rekordu są już w bazie użyj update
  30. /*if()){
  31.  
  32. $db -> prepare ("UPDATE towar SET id_TOWAR=$_POST['id_TOWAR'], Nazwa=$_POST['Nazwa'], Rodzaj= $_POST['Rodzaj'],
  33. VAT=$_POST['VAT'], CENA=$_POST['CENA'], STAN=$_POST['STAN']");
  34.  
  35.  
  36. }*/
  37.  
  38.  
  39.  
  40.  
  41. $ilosc = $stmt -> execute(); // ilość dodanych rekordów
  42.  
  43. if($ilosc > 0)
  44. {
  45. echo 'Dodano: '.$ilosc.' rekordow';
  46. }
  47. else
  48. {
  49. echo 'Wystapil blad podczas dodawania rekordow!';
  50. }
  51. }
  52. else
  53.  
  54. {//WPROWADZANIE DANYCH, FORMULARZ
  55. echo '<table border="1" style="background-color: silver; border-color: black; font-size:33px">';
  56. echo '<form method="post" action="pt.php">
  57.  
  58. <tr><td> ID: </td><td> Nazwa: </td><td> Rodzaj:<td>VAT%:</td><td> Cena:</td><td> Stan:</td></td><td> Akcja:</td></tr>
  59. <td><input style="height:100%; " type="int(11)" name="id_towar" /></td>
  60.  
  61. <td><input style="height:100%; "type="varchar(100)" name="Nazwa" /> </td>
  62.  
  63. <td><input style="height:100%; "type="varchar(100)" name="Rodzaj" /></td>
  64.  
  65. <td><center><select style="font-size:30px"; " name="VAT">
  66. <option value="NULL"> </option>
  67. <option value="23">23</option>
  68. <option value="24">24</option>
  69. <option value="7">7</option></center></td>
  70. <td><input style="height:100%; "type="decimal(20,2)" name="CENA" /></td>
  71. <td><input style="height:100%; "type="decimal(10,0)" name="STAN" /></td>
  72.  
  73. </table>
  74. <input style="font-size:33px" type="submit" value="Dodaj" />
  75. </form>';
  76. }
  77.  
  78. }
  79. catch(PDOException $e)
  80. {
  81. echo 'Wystapil blad biblioteki PDO: ' . $e->getMessage();
  82. }
  83. ?>
JakubBab
Tak na szybko bez sprwadzania - powinno dac Ci pomysl.

  1. function compareBoth(){
  2. $foo = $handle->prepare("SELECT ****jakis autoincrement***** from towar where id_towar = :id_towar AND CENA =:CENA ");
  3.  
  4. $id_towar = $_POST['id_towar'];
  5. $cena = $_POST['CENA'];
  6. $foo->bindParam(":id_towar",$id_towar, PDO::PARAM_STR);
  7. $foo->bindParam(":CENA",$cena, PDO::PARAM_INT);
  8. $foo->execute();
  9. return $foo->rowCount()>0 ? true : false;
  10. }



pozniej dolacz do pliku glownego i wtedy :



  1. if(!compareBoth()){
  2. jak nie znajdzie zadnego rekordu to tutaj update
  3. }else{
  4. jak znajdzie jakis rekord - to cos tam niech zrobi
  5. }


Pewnie jest bardziej optymalny sposob. Zaraz ninja sie zjawi... ph34r.gif
kanjox
Zrezygnowałem z PDO(nie moja bajka).

Zapisuję wartości do nowej tabeli o nazwie przyjecie_towar i nie za bardzo wiem jak przenieść zawartość tej tabeli do tabeli towar. Przy powtarzających się rekordach

  1. UPDATE `towar` SET `STAN`=`towar.STAN`+ `przyjecie_towar.nastan`
  2. WHERE `id_towar` IN (SELECT * FROM `przyjecie_towar` WHERE `id_t` IN(SELECT `id_towar` FROM `towar`) AND `price` IN(SELECT `CENA` FROM `towar`)) AND
  3. `CENA`IN(SELECT * FROM `przyjecie_towar` WHERE `id_t` IN(SELECT `id_towar` FROM `towar`) AND `price` IN(SELECT `CENA` FROM `towar`))
(i tu jest problem, bo nie wiem co dla klauzuli SET napisać)
, a przy reszcie
  1. INSERT INTO `towar` SELECT `id_t`, `name`, `type` ,`podvat`, `price`, `nastan` FROM `przyjecie_towar` WHERE `id_t` NOT IN(SELECT `id_towar` FROM `towar`)
  2. AND `price` NOT IN(SELECT `CENA` FROM `towar`) AND `podvat` NOT IN(SELECT `VAT` FROM `towar`)

przyjecie.php:
  1. <?php include('constant/header.php');
  2.  
  3. require_once "connect/connect.php";
  4. $sel_vat="SELECT * FROM vat";
  5. $z = $con->query($sel_vat);
  6.  
  7. $mysql=$con->query("SELECT * FROM przyjecie_towar");
  8. echo<<<echo
  9. <center>
  10. <div id="container">
  11. <div class="content">
  12. <table border=4 bordercolor="black" width="100%" height="50%">
  13.  
  14. <tr style="background-color: silver"><th>L.p.</th>
  15. <th>ID</th>
  16. <th>Nazwa</th>
  17. <th>Rodzaj</th>
  18. <th>VAT(%)</th>
  19. <th>CENA</th>
  20. <th>ILOŚĆ</th>
  21. <th>AKCJA</th>
  22. echo;
  23.  
  24. while ($r = mysqli_fetch_assoc($mysql))
  25. {
  26. echo '<form action="przyjecie.php" onchange="this.form.submit()" method="post" >';
  27. echo '<tr style="background-color: white">';
  28. echo '<td><center>'.$r['id_p'].'</center></td>';
  29. echo '<td><center>'.$r['id_t'].'</center></td>';
  30. echo '<td><center>'.$r['name'].'</center></td>';
  31. echo '<td><center>'.$r['type'].'</center></td>';
  32. echo '<td><center>'.$r['podvat'].'</center></td>';
  33. echo '<td><center>'.$r['price'].'</center></td>';
  34. echo '<td><center>'.$r['nastan'].'</center></td>';
  35. //wyrównanie pola usun z odpowiednim id_TOWAR
  36. $idz=$r['id_p'];
  37. $id=$idz.-1 ;
  38. echo '<td><input type="hidden" name="usun" value="'.$id.'" />';
  39. echo '<center><input type="submit" name="del" value= "Usuń" /></center>';
  40. '</form>';
  41.  
  42. };
  43. echo<<<end
  44.  
  45. <form method="post" >
  46. <tr style="background-color: silver">
  47.  
  48. <td><center><input style="height:100%; " type="int(11)" name="idp" /></center></td>
  49.  
  50. <td><center><input style="height:100%; " type="int(11)" name="idt" /></center></td>
  51.  
  52. <td><center><input style="height:100%; "type="varchar(100)" name="name" /></center> </td>
  53.  
  54. <td><center><input style="height:100%; "type="varchar(100)" name="type" /></center></td>
  55.  
  56. <td><center><select style="height:100%; "type="decimal(10,0)" name="vat";>
  57.  
  58. end;
  59.  
  60. while ($r = $z->fetch_assoc()) {
  61.  
  62. echo'<option value='.$r['VAT%'].'>'.$r['VAT%'].'</option>';
  63.  
  64. }
  65. echo<<<end
  66. </select></center></td>
  67. <td><center><input style="height:100%"; maxlength="100" "type="decimal(20,2)" name="price" /></center></td>
  68. <td><center><input style="height:100%; "type="decimal(10,0)" name="cond" /></center></td>
  69. <td><center><input type="submit" name="submit" value="Dodaj" /></center></td>
  70. </tr>
  71. </form>
  72. </table>
  73.  
  74. </center>
  75.  
  76. end;
  77. if(isset($_POST['submit']))
  78. {
  79. $idp=$_POST['idp'];
  80. $idt=$_POST['idt'];
  81. $name=$_POST['name'];
  82. $type=$_POST['type'];
  83. $vat=$_POST['vat'];
  84. $price=$_POST['price'];
  85. $cond=$_POST['cond'];
  86.  
  87. if (!$id || !$idt || !$name || !$type || !$vat || !$price || !$cond )
  88. {
  89.  
  90. echo<<<abs
  91. <div id="container">
  92. <div class="content">
  93.  
  94. <h3>Nie podano wszystkich danych.</h3>
  95. </div>
  96. abs;
  97. @mysqli_close($con);
  98.  
  99. echo<<<abs
  100.  
  101. <div class="content">
  102. <a id="back" href="http://localhost/magazyn/magazyn.php"></a>
  103. </div>
  104. abs;
  105. include('constant/footer.php');
  106. echo"</div>";
  107.  
  108. }
  109. $sql="INSERT INTO przyjecie_towar (id_p, id_t, name, type, podvat, price, nastan) VALUES ('$idp','$idt','$name','$type','$vat', '$price', '$cond')";
  110. $ins = $con->query($sql);
  111. if (!$ins)
  112. {
  113. $sel="SELECT * FROM przyjecie_towar WHERE id_p='$idp' AND id_t='$idt'";
  114. $ch= $con->query($sel);
  115.  
  116. if($idp<=$ch||$idt<=$ch)
  117. {
  118.  
  119. echo<<<abs
  120. <div id="container">
  121. <div class="content">
  122. <h3>Błędne ID lub L.p..</h3>
  123. </div>
  124. <div class="content">
  125. <a id="back" href="http://localhost/magazyn/magazyn.php"></a>
  126. </div>
  127.  
  128.  
  129. abs;
  130.  
  131.  
  132. }
  133. include('constant/footer.php');
  134. echo"</div>";
  135. }
  136.  
  137. header("Location: <a href="http://localhost/magazyn/przyjecie.php&quot%3b%29;//odświerz" target="_blank">http://localhost/magazyn/przyjecie.php");//odświerz</a>
  138. };
  139. if(isset($_POST['del']))
  140. {
  141. $delete=$con->query( "DELETE from przyjecie_towar WHERE id_p='$_POST[usun]'");
  142. unset($_POST);
  143. header("Location: <a href="http://localhost/magazyn/przyjecie.php&quot%3b%29;//odświerz" target="_blank">http://localhost/magazyn/przyjecie.php");//odświerz</a>
  144. };
  145. ?>
  146. <div id="container">
  147. <div class="content">
  148. <a id="back" href="http://localhost/magazyn/magazyn.php"></a>
  149. </div>
  150.  
  151. <?php include('constant/footer.php'); ?>
  152.  
  153. </div>
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.