Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]checkbox i edytowanie rekordów w sql
Forum PHP.pl > Forum > Przedszkole
matius71
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
wxm
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
matius71
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ć?
leonpro778
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 ().
matius71
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. }
Lukeup
A dla jakiego isset wykonuje się akcja usunięcia? Bo może z _POST'a nic nie ściągasz.
matius71
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.
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.