Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Autonumeracja
Forum PHP.pl > Forum > PHP
Nico~
Cześć,

Problem polega na tym, że chcę aby każdy wiersz był numerowany od 1. Wiem czym jest autoincrement, ale akurat w moim przypadku chciałbym zrobić to bez tej funkcji. Bo jak usunę rekord to zostaje mi dziura w numeracji, a chciałbym tego uniknąć. Poniżej kod, co mogło pójść nie tak?


Kod
<?php
                    $licznik = 1;
                    $id = $licznik++;
                    $nr_karty = $_POST['nr_karty'];
                    $kod_zab = $_POST['kod_zab'];
                    $firma = $_POST['firma'];
                    $imie_nazwisko = $_POST['imie_nazwisko'];
                    $tel = $_POST['tel'];
                    $email = $_POST['email'];
                    
                    if($id and $nr_karty and $kod_zab and $firma and $imie_nazwisko and $tel and $email) {
                        connect(); // <- nawiązanie połączenia z bazą danych
                        
                        $add_client = mysql_query("INSERT INTO karty SET id = '$id', nr_karty = '$nr_karty', kod_zab = '$kod_zab', firma = '$firma', imie_nazwisko = '$imie_nazwisko', tel = '$tel', email = '$email'");
                        if($add_client) echo "<div class='alert alert-success' role='alert'>Klient został przypisany poprawnie do karty!</div>";
                        else echo "<div class='alert alert-danger' role='alert'>Nie udało się przypisać klienta do karty...</div>";
                        
                        mysql_close(connect); // <- zakończenie połączenia z bazą danych
                    }
                ?>
nospor
ID nie sluzy do numeracji. ID sluzy do identyfikacji rekordu. Wiec AUTOINCREMENT wbudowane w silnik bazy jest jak najbardziej ok.
I co z tego ze masz dziury w ID? ID to ID i dziury sa jak najbardziej na miejscu.

Jak chcesz sobie potem na stronie wyswietlac numerki od 1 wzwyz to robisz to w php a nie przez durne poczatkowe zalozenia
Nico~
W sumie racja, tak zrobię.

Skoro już tutaj założyłem temat, to mam jeszcze jedno pytanie.

W wyświetlonej tabeli obok każdego wiersza mam opcję edytuj i usuń. Po wciśnięciu edytuj pokazuje się formularz, a gdy zmieniam dane i klikam "zmień" to dodaje mi nowy wiersza właśnie z tymi danymi co chciałem, a stary zostaje niezmiennie.

  1. <?php
  2. $a = trim($_REQUEST['a']);
  3. $id = trim($_GET['id']);
  4.  
  5. if($a == 'edit' and !empty($id)) {
  6.  
  7. $wynik = mysql_query("SELECT * FROM karty WHERE id='$id'") or die('Błąd zapytania');
  8.  
  9. if(mysql_num_rows($wynik) > 0) {
  10. $r = mysql_fetch_assoc($wynik);
  11.  
  12. echo '<form action="admin.php" method="post">
  13. <input type="hidden" name="a" value="save" />
  14. <input type="hidden" name="id" value="'.$id.'" />
  15. <input type="number" name="nr_karty" class="form-control" placeholder="Numer karty" aria-describedby="basic-addon1" value="'.$r['nr_karty'].'" /><br />
  16. <input type="number" name="kod_zab" class="form-control" placeholder="Kod zabezpieczający" aria-describedby="basic-addon1" value="'.$r['kod_zab'].'" /><br />
  17. <input type="text" name="firma" class="form-control" placeholder="Firma" aria-describedby="basic-addon1" value="'.$r['firma'].'" /><br />
  18. <input type="text" name="imie_nazwisko" class="form-control" placeholder="Imię i nazwisko" aria-describedby="basic-addon1" value="'.$r['imie_nazwisko'].'" /><br />
  19. <input type="tel" name="tel" class="form-control" placeholder="Telefon" aria-describedby="basic-addon1" value="'.$r['tel'].'" /><br />
  20. <input type="email" name="email" class="form-control" placeholder="E-mail" aria-describedby="basic-addon1" value="'.$r['email'].'" /><br />
  21. <input type="submit" name="edit"" value="Popraw" />
  22. </form>';
  23. }
  24. }
  25. elseif($a == 'save') {
  26.  
  27. $id = $_POST['id'];
  28. $nr_karty = trim($_POST['nr_karty']);
  29. $kod_zab = trim($_POST['kod_zab']);
  30. $firma = trim($_POST['firma']);
  31. $imie_nazwisko = trim($_POST['imie_nazwisko']);
  32. $tel = trim($_POST['tel']);
  33. $email = trim($_POST['email']);
  34.  
  35. mysql_query("UPDATE karty SET nr_karty='$numer_karty',
  36. kod_zab='$kod_zab', firma='$firma', imie_nazwisko='$imie_nazwisko', tel='$tel', email='$email' WHERE id='$id'")
  37. or die('Błąd zapytania');
  38. echo "<div class='alert alert-success' role='alert'>Dane zostały zaaktyalizowane!</div>";
  39. }
  40. ?>
nospor
I jak wejdziesz do bazy to masz tam te "zduplikowane" rekordy?
Jak tak, znaczy ze gdzies po drodze robisz jeszcze insert.
Jak nie, znaczy ze masz skopane wyswietlanie wink.gif
Nico~
W bazie mam dodatkowe rekordy, więc tak jak mówisz.
W którym miejscu szukać odpowiedzi?
nospor
Gdzie szukac odpowiedzi? W twoim kodzie. No skad ja mam wiedziec gdzie wykonujesz INSERT?
Zrob przeszukanie projektu pod katem frazy "INSERT" i znajdziesz gdzie robisz insert jak sam nie ogarniasz swojego kodu wink.gif
Nico~
No ja rozumiem, wiem gdzie używam "INSERT", tylko co to ma do edycji i zapisywania? Z początku myślałem, że formularze się nadpisują, ale się myliłem.

  1. <!-- POCZĄTEK DODAJ KLIENTA -->
  2. <div class="panel panel-default">
  3. <div class="panel-heading">Dodawanie klienta</div>
  4. <div class="panel-body">
  5. <?php
  6. $nr_karty = $_POST['nr_karty'];
  7. $kod_zab = $_POST['kod_zab'];
  8. $firma = $_POST['firma'];
  9. $imie_nazwisko = $_POST['imie_nazwisko'];
  10. $tel = $_POST['tel'];
  11. $email = $_POST['email'];
  12.  
  13. if($nr_karty and $kod_zab and $firma and $imie_nazwisko and $tel and $email) {
  14. connect(); // <- nawiązanie połączenia z bazą danych
  15.  
  16. $add_client = mysql_query("INSERT INTO karty SET nr_karty = '$nr_karty', kod_zab = '$kod_zab', firma = '$firma', imie_nazwisko = '$imie_nazwisko', tel = '$tel', email = '$email'");
  17. if($add_client) echo "<div class='alert alert-success' role='alert'>Klient został przypisany poprawnie do karty!</div>";
  18. else echo "<div class='alert alert-danger' role='alert'>Nie udało się przypisać klienta do karty...</div>";
  19.  
  20. mysql_close(connect); // <- zakończenie połączenia z bazą danych
  21. }
  22. ?>
  23. <form action="admin.php" method="post">
  24. <input type="number" name="nr_karty" class="form-control" placeholder="Numer karty" aria-describedby="basic-addon1" required /><br>
  25. <input type="number" name="kod_zab" class="form-control" placeholder="Kod zabezpieczający" aria-describedby="basic-addon1" required /><br>
  26. <input type="text" name="firma" class="form-control" placeholder="Firma" aria-describedby="basic-addon1" required /><br>
  27. <input type="text" name="imie_nazwisko" class="form-control" placeholder="Imię i nazwisko" aria-describedby="basic-addon1" required /><br>
  28. <input type="tel" name="tel" class="form-control" placeholder="Telefon" aria-describedby="basic-addon1" required /><br>
  29. <input type="email" name="email" class="form-control" placeholder="E-mail" aria-describedby="basic-addon1" required /><br>
  30. <input type="submit" name="send" value="Dodaj" />
  31. <input type="reset" name="reset" value="Wyczyść" />
  32. </form>
  33. </div>
  34. </div>
  35. <!-- KONIEC DODAJ KLIENTA -->
nospor
pokazujesz wyrwane z kontekstu kawalki kodu i co ja ma powiedziec...
Gdzies one sie lacza, moze robiac update najpierw wykonujesz kod z insert. Nie wiem, nie widze calosci
Nico~
  1. <!-- POCZĄTEK DODAJ KLIENTA -->
  2. <div class="panel panel-default">
  3. <div class="panel-heading">Dodawanie klienta</div>
  4. <div class="panel-body">
  5. <?php
  6. $nr_karty = $_POST['nr_karty'];
  7. $kod_zab = $_POST['kod_zab'];
  8. $firma = $_POST['firma'];
  9. $imie_nazwisko = $_POST['imie_nazwisko'];
  10. $tel = $_POST['tel'];
  11. $email = $_POST['email'];
  12.  
  13. if($nr_karty and $kod_zab and $firma and $imie_nazwisko and $tel and $email) {
  14. connect(); // <- nawiązanie połączenia z bazą danych
  15.  
  16. $add_client = mysql_query("INSERT INTO karty SET nr_karty = '$nr_karty', kod_zab = '$kod_zab', firma = '$firma', imie_nazwisko = '$imie_nazwisko', tel = '$tel', email = '$email'");
  17. if($add_client) echo "<div class='alert alert-success' role='alert'>Klient został przypisany poprawnie do karty!</div>";
  18. else echo "<div class='alert alert-danger' role='alert'>Nie udało się przypisać klienta do karty...</div>";
  19.  
  20. mysql_close(connect); // <- zakończenie połączenia z bazą danych
  21. }
  22. ?>
  23. <form action="admin.php" method="post">
  24. <input type="number" name="nr_karty" class="form-control" placeholder="Numer karty" aria-describedby="basic-addon1" required /><br>
  25. <input type="number" name="kod_zab" class="form-control" placeholder="Kod zabezpieczający" aria-describedby="basic-addon1" required /><br>
  26. <input type="text" name="firma" class="form-control" placeholder="Firma" aria-describedby="basic-addon1" required /><br>
  27. <input type="text" name="imie_nazwisko" class="form-control" placeholder="Imię i nazwisko" aria-describedby="basic-addon1" required /><br>
  28. <input type="tel" name="tel" class="form-control" placeholder="Telefon" aria-describedby="basic-addon1" required /><br>
  29. <input type="email" name="email" class="form-control" placeholder="E-mail" aria-describedby="basic-addon1" required /><br>
  30. <input type="submit" name="send" value="Dodaj" />
  31. <input type="reset" name="reset" value="Wyczyść" />
  32. </form>
  33. </div>
  34. </div>
  35. <!-- KONIEC DODAJ KLIENTA -->
  36. <!-- POCZĄTEK LISTY KLIENTÓW -->
  37. <div class="panel panel-default">
  38. <div class="panel-heading">Lista wszystkich klientów</div>
  39. <div class="panel-body">
  40. <?php connect();
  41.  
  42. $lp = 1;
  43. $wynik = mysql_query("SELECT * FROM karty ORDER BY id") or die('Błąd zapytania');
  44. if(mysql_num_rows($wynik) > 0) {
  45. echo "<table class=\"table\" border=1>";
  46. echo "<thead>";
  47. echo "<td>Lp.</td>";
  48. echo "<td>Numer karty</td>";
  49. echo "<td>Kod zabezpieczający</td>";
  50. echo "<td>Firma</td>";
  51. echo "<td>Imię i nazwisko</td>";
  52. echo "<td>Telefon</td>";
  53. echo "<td>E-mail</td>";
  54. echo "<td>Akcja</td>";
  55. echo "</thead>";
  56. while($row = mysql_fetch_assoc($wynik)) {
  57. echo "<tr>";
  58. echo "<td>".$lp++."</td>";
  59. echo "<td>".$row['nr_karty']."</td>";
  60. echo "<td>".$row['kod_zab']."</td>";
  61. echo "<td>".$row['firma']."</td>";
  62. echo "<td>".$row['imie_nazwisko']."</td>";
  63. echo "<td>".$row['tel']."</td>";
  64. echo "<td>".$row['email']."</td>";
  65. echo "<td>
  66. <a href=\"admin.php?a=del&amp;id={$row['id']}\">DEL</a>
  67. <a href=\"admin.php?a=edit&amp;id={$row['id']}\">EDIT</a>
  68. </td>";
  69. echo "</tr>";
  70. }
  71. echo "</table>";
  72. }
  73. ?>
  74. </div>
  75. </div>
  76. <!-- KONIEC LISTY KLIENTÓW -->
  77. <!-- POCZĄTEK EDYTUJ KLIENTA -->
  78. <div class="panel panel-default">
  79. <div class="panel-heading">Edytuj klienta</div>
  80. <div class="panel-body">
  81. <?php
  82. $a = trim($_REQUEST['a']);
  83. $id = trim($_GET['id']);
  84.  
  85. if($a == 'edit' and !empty($id)) {
  86.  
  87. $wynik = mysql_query("SELECT * FROM karty WHERE id='$id'") or die('Błąd zapytania');
  88.  
  89. if(mysql_num_rows($wynik) > 0) {
  90. $r = mysql_fetch_assoc($wynik);
  91.  
  92. echo '<form action="admin.php" method="post">
  93. <input type="hidden" name="a" value="save" />
  94. <input type="hidden" name="id" value="'.$id.'" />
  95. <input type="number" name="nr_karty" class="form-control" placeholder="Numer karty" aria-describedby="basic-addon1" value="'.$r['nr_karty'].'" /><br />
  96. <input type="number" name="kod_zab" class="form-control" placeholder="Kod zabezpieczający" aria-describedby="basic-addon1" value="'.$r['kod_zab'].'" /><br />
  97. <input type="text" name="firma" class="form-control" placeholder="Firma" aria-describedby="basic-addon1" value="'.$r['firma'].'" /><br />
  98. <input type="text" name="imie_nazwisko" class="form-control" placeholder="Imię i nazwisko" aria-describedby="basic-addon1" value="'.$r['imie_nazwisko'].'" /><br />
  99. <input type="tel" name="tel" class="form-control" placeholder="Telefon" aria-describedby="basic-addon1" value="'.$r['tel'].'" /><br />
  100. <input type="email" name="email" class="form-control" placeholder="E-mail" aria-describedby="basic-addon1" value="'.$r['email'].'" /><br />
  101. <input type="submit" name="edit"" value="Popraw" />
  102. </form>';
  103. }
  104. }
  105. elseif($a == 'save') {
  106.  
  107. $id = $_POST['id'];
  108. $nr_karty = trim($_POST['nr_karty']);
  109. $kod_zab = trim($_POST['kod_zab']);
  110. $firma = trim($_POST['firma']);
  111. $imie_nazwisko = trim($_POST['imie_nazwisko']);
  112. $tel = trim($_POST['tel']);
  113. $email = trim($_POST['email']);
  114.  
  115. mysql_query("UPDATE karty SET nr_karty='$numer_karty',
  116. kod_zab='$kod_zab', firma='$firma', imie_nazwisko='$imie_nazwisko', tel='$tel', email='$email' WHERE id='$id'")
  117. or die('Błąd zapytania');
  118. echo "<div class='alert alert-success' role='alert'>Dane zostały zaaktyalizowane!</div>";
  119. }
  120. ?>
  121. </div>
  122. </div>
  123.  
  124. <!-- USUŃ -->
  125. <?php
  126. connect();
  127. $a = trim($_GET['a']);
  128. $id = trim($_GET['id']);
  129.  
  130. if($a == 'del' and !empty($id)) {
  131.  
  132. mysql_query("DELETE FROM karty WHERE id='$id'")
  133. or die('Błąd zapytania: '.mysql_error());
  134. echo 'Rekord został usunęty z bazy';
  135. }
  136. ?>
  137.  
  138.  
  139.  
  140. </div>
nospor
No i jak widac teraz w calosci, ty wszystko masz w jednym pliku.....
I INSERT wykonujesz niezaleznie czy to jest update, delete czy nie. Insert leci za kazdym razem gdy tylko sa jakies dane w POST. Naprawde tego nie widzisz?
Nico~
A masz racje! Czy jeżeli teraz w drugim formularzu tym do zmiany zmienię name przy inpucie, to problem powinien zniknąć?
nospor
A nie lepiej bedzie jak dasz poprostu warunek na INSERT a nie zawsze go wykonujesz?
Nico~
Ale jak to zrobić? ohmy.gif sciana.gif
nospor
Rety....
A jak to zrobiles dla UPDATE??
Dodales pole ukryte, ktory musi miec wartosc SAVE.
Nie mozesz dla insert tez dodac pola ukrytego ktore musi miec wartosc INSERT?questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif
Nico~
Nie no poddaje się, nie kumam nic już :/
A gdybym podzielił wszystkie operacje na pliki? czyli edit.php / del.php itd?
nospor
Dla UPDATe masz
<input type="hidden" name="a" value="save" />

czemu wiec dla insert nie dorobisz pola w formie:
<input type="hidden" name="a" value="insert" />
I nie dodasz tego do warunku dla insert?
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.