Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] lista rozwijania
Forum PHP.pl > Forum > Przedszkole
ten_typ
Oto część kodu odpowiedzialnego za edycję:

  1. <?php
  2. if ($_POST['x'] == 'popraw') {
  3. if ($_POST['nazwa_kursu'] && $_POST['id_poziomu']) {
  4.  
  5. $zapytanie = "UPDATE kurs SET nazwa_kursu='".$_POST['nazwa_kursu']."'
  6.    WHERE id_kursu='".$_POST['id_kursu']."'";
  7. $zapytanie1 = "UPDATE poziom_kursu SET id_kursu='".$_POST['id_kursu']."', id_poziomu='".$_POST['id_poziomu']."'
  8.    WHERE id_kursu='".$_POST['id_kursu']."'";
  9. $wynik = mysql_query ($zapytanie, $zapytanie1);
  10. }
  11. echo     "<h3>Poprawnie edytowano kurs</h3><br><br>
  12.        <a href='pwk.php'>Odśwież</a>";
  13. } elseif ($_GET['x'] == 'edytuj') {
  14. $zapytanie = "SELECT * FROM kurs inner join poziom_kursu using (id_kursu) inner join poziom using (id_poziomu) where id_kursu='".$_GET['id_kursu']."'";
  15. $wynik = mysql_query ($zapytanie);
  16. $rekord = mysql_fetch_assoc ($wynik);
  17. $id_kursu = $rekord['id_kursu']; $nazwa_kursu = $rekord['nazwa_kursu']; $id_poziomu = $rekord['id_poziomu'];
  18. echo   '<form method="post"><h3>Edycja<h3><input type="hidden" name="x" value="popraw">
  19.        <input type="hidden" name="id_kursu" value="'.$id_kursu.'">
  20.        <table width=90% align=center>
  21.        <tr><td>Nazwa kursu:</td><td><input type="text" name="nazwa_grupy" value="'.$nazwa_kursu.'"></td></tr>
  22.        <tr><td>Poziom:</td><td><input type="text" name="id_poziomu" value="'.$id_poziomu.'"></td></tr>
  23.        <tr><td></td><td><input type="submit" value="Edytuj"></td></tr></table>
  24.        </form>';
  25. ?>


Problem polega na tym, że wpisując nowe wartości i klikając edytuj wyskakuje, że poprawnie edytowano, ale tak nie jest. Jest tak samo jak przed edycją.
2 problem - wybór Poziomu odbywa się za pomocą listy wybierania, jak wprowadzić do edycji <select> aby pokazywało mi obecny wybór? No i oczywiście, żeby zmiana też odbywała się za pomocą listy?

Proszę o pomoc.
nospor
Cytat
Problem polega na tym, że wpisując nowe wartości i klikając edytuj wyskakuje, że poprawnie edytowano, ale tak nie jest

Moze nie omine troche problem, ale...

wiesz czemu wali tekstem ze edytowalo a nie edytowalo? Bo na edycje dales warunek, a na tekst "edytowane" nie dales nic. Walisz nie zaleznie od tego czy warunek na edycje sie sprawdzil czy nie.
Dodatkowo w zaden sposob nie sprawdzasz czy edycja sie powiodla czy nie.

I dlatego wlasnie komunikat leci, mimo ze faktycznie nic sie nie edytowalo smile.gif
ten_typ
No racja, a zapytanie jest dobre ?
Pilsener
A skąd mamy to wiedzieć? Nie wiemy, co tam masz w bazie - wklej zapytanie do jakiegoś programu typu front, navicat (czy czego tam używasz do pracy z bazami danych). W PHP możesz to zrobić używając funkcji:
mysql_query" title="Zobacz w manualu PHP" target="_manual
mysql_error" title="Zobacz w manualu PHP" target="_manual
xmik
Zapytanie z SELECT napewno dobre nie jest winksmiley.jpg
ten_typ
Cytat(xmik @ 3.01.2009, 19:38:00 ) *
Zapytanie z SELECT napewno dobre nie jest winksmiley.jpg


Jest dobre bo działa.

Pilsener: sprawdzałem w programie co pracuje na bazach - zapytania działają. Natomiast wkleiłem przykład z errno z manuala i wynik jaki pokazuje to 0:0 . Nie wiem co źle robię.
  1. <?php
  2. $zapytanie = @mysql_query("UPDATE kurs SET nazwa_kursu='".$_POST['nazwa_kursu']."' WHERE id_kursu='".$_POST['id_kursu']."'");
  3. echo mysql_errno() . ": " . mysql_error() . "\n";
  4. $zapytanie1 = @mysql_query("UPDATE poziom_kursu SET id_poziomu='".$_POST['id_poziomu']."' WHERE id_kursu='".$_POST['id_kursu']."'");
  5. echo mysql_errno() . ": " . mysql_error() . "\n";
  6. ?>
nospor
wyswietl sobie zapytanie co wykonujesz i sprawdz czy wyglada tak jak ma wygladac. Moze warunek nie jest spelniony, bo np. nie poszlo postem to co myslisz ze poszlo
ten_typ
nospor nakierowałeś mnie - w formularzu wysłania name miało inna nazwe :rotfl:

A teraz ta 2 rzecz:
  1. <?php
  2. $id_kursu = $rekord['id_kursu']; $nazwa_kursu = $rekord['nazwa_kursu']; $id_poziomu = $rekord['id_poziomu'];
  3. echo   '<form method="post"><h3>Edycja<h3><input type="hidden" name="x" value="popraw">
  4.         <input type="hidden" name="id_kursu" value="'.$id_kursu.'">
  5.         <table width=90% align=center>
  6.         <tr><td>Nazwa kursu:</td><td><input type="text" name="nazwa_kursu" value="'.$nazwa_kursu.'"></td></tr>
  7.         <tr><td>Poziom:</td><td>
  8.         <select name="id_poziomu">
  9.         <option value="">Wybierz poziom</option>
  10.         <option value="1">A1</option>
  11.         <option value="3">A2</option>
  12.         <option value="4">B1</option>
  13.         <option value="5">B2</option>
  14.         <option value="6">C1</option>
  15.         <option value="7">C2</option>
  16.         </select> </td></tr>
  17.         <tr><td></td><td><input type="submit" value="Edytuj"></td></tr></table>
  18.         </form>';
  19. ?>



aby przy edytowaniu była wybrana opcja która jest aktualnie ?
outsider
Aktualna opcje - ja drukowal bym za pomoca for, przyklad:

Kod
$id_poziomu_array = array('A1'...'C2');

for($i = 0; $i <= 7; $i++) {              // 7 - czyli liczba poziomow

  if($id_poziomu == $i) {

     print '<option value="'.$i.'" selected="selected">'.$id_poziomu_array[$i].'</option>';

  } else { 

     print '<option value="'.$i.'">'.$id_poziomu_array[$i].'</option>';

  }

}




Edit: Poprawilem jeden blad smile.gif

Mozna zamiast 7 wpisac count($id_poziomu_array); - wydaje sie to lepsze.
ten_typ
Coś nie działa, nie pokazuje się lista wyboru, tylko ciąg "A1A2B1B2C1C2" snitch.gif
nospor
no coż... nie uwazasz ze select powinien wygladac tak:
  1. <option... <option... <option... </select>


a nie tak jak u was:
  1. <option... <option... <option...
outsider
Cytat
no coż... nie uwazasz ze select powinien wygladac tak:


Warto czasem troche pomyslec i dojsc do tego ze chodzilo mi zeby ten kod wcisnac pomiedzy <select> </select> smile.gif
nospor
Cytat
Warto czasem troche pomyslec i dojsc do tego ze chodzilo mi zeby ten kod wcisnac pomiedzy <select> </select>
Moje wczesniejsze slowa kierowalem glownie do ten_typ.

Ale i ty na przyszlosc moglbys nie zapominac w kodzie o takich "drobnostkach" winksmiley.jpg
outsider
W sumie tak, zapomnialem napisac zeby to wcisnac pomiedzy te znaczniki smile.gif dzieki za zwrocenie uwagi winksmiley.jpg
ten_typ
Pewnie coś źle zrobiłem, ale wkleiłem miedzy znaczniki i nie działa. Nawet się nie pokolorowało, jak mam to wkleić ?;x
outsider
smile.gif Dodalem jedna linijke ktora zmienia $i kiedy jest rowna 2, bo w OPTION nie masz value 2 odrazu masz 3 smile.gif chyba rozumiesz
Kod
<?php
$id_kursu = $rekord['id_kursu']; $nazwa_kursu = $rekord['nazwa_kursu']; $id_poziomu = $rekord['id_poziomu'];
echo   '<form method="post"><h3>Edycja<h3><input type="hidden" name="x" value="popraw">
        <input type="hidden" name="id_kursu" value="'.$id_kursu.'">
        <table width=90% align=center>
        <tr><td>Nazwa kursu:</td><td><input type="text" name="nazwa_kursu" value="'.$nazwa_kursu.'"></td></tr>
        <tr><td>Poziom:</td><td>
        <select name="id_poziomu">
        <option value="">Wybierz poziom</option>';

$id_poziomu_array = array('', 'A1', '', 'A2', 'B1', 'B2', 'C1', 'C2');

for($i = 1; $i <= count($id_poziomu_array); $i++) {

  if($i == 2) {
    $i++;
}
  if($id_poziomu == $i) {

     print '<option value="'.$i.'" selected="selected">'.$id_poziomu_array[$i].'</option>';

  } else {

     print '<option value="'.$i.'">'.$id_poziomu_array[$i].'</option>';

  }

}
print '</select> </td></tr>
        <tr><td></td><td><input type="submit" value="Edytuj"></td></tr></table>
        </form>';
?>


Edit. Mala zmiana sprobuj teraz
ten_typ
Super działa, wielkie dzięki - jeszcze tylko małe pytanko - w liście wyboru na samym dole jest opcja z pustym polem - idzie to jakoś wyeliminować ?
outsider
Tak, zamien:
Kod
for($i = 1; $i <= count($id_poziomu_array); $i++) {

na
Kod
for($i = 1; $i = count($id_poziomu_array); $i++) {

Raczej powinno zadzialac tongue.gif

Znowu Edit tongue.gif
ten_typ
Ten poprzedni kod z -1 działał a ten nie - ma same puste opcje i jest ich dużo ;>
outsider
jaki ze mnie glupek... zamiast znak rownosci to znak mniejszosci skasowalem, haha biggrin.gif

Przepraszam biggrin.gif poprawne:
Kod
for($i = 1; $i < count($id_poziomu_array); $i++) {
ten_typ
Teraz wszystko ładnie gra, wielkie dzięki za pomoc.

Jeszcze jedno pytanie: może się zdarzyć, że dodam lub usunę jakiś poziom - jak zrobić aby do listy były pobierane aktualne dane z bazy?
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.