Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]checkbox i edytowanie rekordów w sql
matius71
post 12.04.2018, 21:32:20
Post #1





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 22.08.2009

Ostrzeżenie: (0%)
-----


Witam,

Mam checkboxy w formularzu coś takiego:

  1. <tr>
  2. <td><label class="control-label">Fuel Type:</label></td>
  3. <td><div tabindex=8>
  4. <?php
  5. $stmt = $db->query('SELECT Fuel_ID, Fuel_Type FROM list_fuel');
  6.  
  7. while($x = $stmt->fetch(PDO::FETCH_ASSOC))
  8. {
  9. echo "<label class=checkbox-inline><input type=checkbox name=Fuel_ID[] value=\"".$x['Fuel_ID']."\">".$x['Fuel_Type']."</label>";
  10. }
  11. ?>
  12. </div></td>
  13. </tr>


Do tego mam zpisywanie do bazy:
  1. if (isset($_POST["Fuel_ID"] )) {
  2. for ($i=0;$i<count($_POST["Fuel_ID"]);$i++) {
  3. $Fuel_ID = $_POST["Fuel_ID"][$i];
  4. $stmt = $db->prepare('INSERT INTO car_fuel (Car_ID,Fuel_ID) VALUES (:Car_ID,:Fuel_ID)');
  5. $stmt->execute(array(
  6. ':Car_ID' => $Car_ID,
  7. ':Fuel_ID' => $Fuel_ID
  8. ));
  9. }
  10. }


I teraz załóżmy że że są 3 chekboxy:
1. 95
2. 98
3. 100

Zaznaczam opcje 1 i opcje 3. Zapisuje, przesyłam do bazy i ok. Teraz po jakimś czasie chcę zmienić na opcje 2 i 3. Jak to łatwo zrobić żeby automatycznie kasowało opcje 1 w bazie i zaznaczało 2 i 3? Takiego problemu jeszcze nie miałem bo zwykle zmienia się jeden rekord i to jest łatwe. Jakieś propozycje?

I teraz pytanie jest takie

Ten post edytował matius71 12.04.2018, 21:32:56
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
wxm
post 12.04.2018, 22:35:35
Post #2





Grupa: Zarejestrowani
Postów: 26
Pomógł: 1
Dołączył: 17.02.2018

Ostrzeżenie: (0%)
-----


Chyba najprościej po pierwszej linijce wstawić zapytanie kasujące wszystkie rekordy związane z danym autem a następnie zapisać w bazie te które akurat przyleciały inPOSTEM. Można jeszcze podpiąć ajaxa pod zmianę stanu checboxa i na bieżąco aktualizować stan w bazie ale to więcej roboty smile.gif
Go to the top of the page
+Quote Post
matius71
post 13.04.2018, 02:29:28
Post #3





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 22.08.2009

Ostrzeżenie: (0%)
-----


Mam taki kod:

  1. if (isset($_POST["Fuel_ID"] )) {
  2. $stmt = $db->prepare("DELETE FROM car_fuel WHERE Car_ID=':aid'");
  3. $stmt->bindParam(':aid',$id);
  4.  
  5. for ($i=0;$i<count($_POST["Fuel_ID"]);$i++) {
  6. $Fuel_ID = $_POST["Fuel_ID"][$i];
  7. $stmt = $db->prepare('INSERT INTO car_fuel SET Fuel_ID=:aFuel_ID, Car_ID=:aCar_ID ');
  8. $stmt->bindParam(':aFuel_ID',$Fuel_ID);
  9. $stmt->bindParam(':aCar_ID',$Car_ID);
  10. }
  11. }


W takiej postaci nie działa usuwanie a zapisywanie nowych rekordów działa. Jeśli usunę część z dodawaniem rekordów to usuwanie działa poprawnie. Czemu tak może być?
Go to the top of the page
+Quote Post
leonpro778
post 13.04.2018, 03:47:47
Post #4





Grupa: Zarejestrowani
Postów: 146
Pomógł: 19
Dołączył: 1.03.2012

Ostrzeżenie: (0%)
-----


Masz dwa razy prepare () a ani razu nie widzę execute(). Pewnie masz execute () poza klamrami i dlatego działa Ci tylko zapytanie ostatnie jakie przypiszesz to prepare ().
Go to the top of the page
+Quote Post
matius71
post 13.04.2018, 12:18:25
Post #5





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 22.08.2009

Ostrzeżenie: (0%)
-----


tak też nie działa :/
  1. $stmt = $db->prepare("DELETE FROM car_fuel WHERE Car_ID=':aid'");
  2. $stmt->bindParam(':aid',$id);
  3. $stmt->execute();
  4.  
  5. if (isset($_POST["Fuel_ID"] )) {
  6. for ($i=0;$i<count($_POST["Fuel_ID"]);$i++) {
  7. $Fuel_ID = $_POST["Fuel_ID"][$i];
  8. $stmt = $db->prepare('INSERT INTO car_fuel SET Fuel_ID=:aFuel_ID, Car_ID=:aCar_ID ');
  9. $stmt->bindParam(':aFuel_ID',$Fuel_ID);
  10. $stmt->bindParam(':aCar_ID',$Car_ID);
  11. $stmt->execute();
  12.  
  13. }
  14. }
Go to the top of the page
+Quote Post
Lukeup
post 13.04.2018, 18:04:53
Post #6





Grupa: Zarejestrowani
Postów: 21
Pomógł: 5
Dołączył: 13.04.2018

Ostrzeżenie: (0%)
-----


A dla jakiego isset wykonuje się akcja usunięcia? Bo może z _POST'a nic nie ściągasz.
Go to the top of the page
+Quote Post
matius71
post 14.04.2018, 00:19:11
Post #7





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 22.08.2009

Ostrzeżenie: (0%)
-----


Nie no pod _POST'em jest bo jak usunę

  1. $stmt = $db->prepare("DELETE FROM car_fuel WHERE Car_ID=':aid'");
  2. $stmt->bindParam(':aid',$id);
  3. $stmt->execute();


To usuwanie działa. Ogólnie I usuwanie i dodawanie rekordów działa ale nie jak jest jednocześnie w kodzie. Działa tylko jak jest albo jedno albo drugie.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 01:32