Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z dodaniem do bazy
Forum PHP.pl > Forum > PHP
majestiq
Mam taki skrypcik do tworzenia nowych kategorii w bazie danych:
Schemat tabeli 'kategorie':

cat_id int AUTO_INCREMENT not null,
cat_name text,
cat_parent int,
primary key (cat_id)

  1. <?php
  2. // (...)
  3.  
  4.    $cat_name = $_POST['cat_name'];
  5.    $cat_parent = $_POST['cat_parent'];
  6.  
  7.  
  8. if ($cat_name)
  9.  
  10.  
  11.   {
  12.   $qrry = "INSERT INTO kategorie (cat_name, cat_parent) VALUES ('$cat_name', '$cat_parent');";
  13.    $ans = mysql_query($qrry, $conn);
  14.   if (!$ans) print mysql_error($conn);
  15. }
  16.  
  17.  
  18. $wypisz = "SELECT * FROM kategorie WHERE 1 ";
  19. $answ = mysql_query($wypisz, $conn);
  20. #echo mysql_errno() . ": " . mysql_error(). "\n";
  21. // wyświetlany wyniki zapytania
  22.    
  23. ?>
  24.  
  25.  
  26.  
  27. <FORM method="post">
  28. <p style="font-size:10px; color:#000; font-family:arial;">Nowa kategoria:</p><BR><INPUT name="cat_name" type="text" size="55"><BR>
  29. <p style="font-size:10px; color:#000; font-family:arial;">Kategoria nadrzędna:</p><BR>
  30. <select name="sortby" style="vertical-align:middle">
  31.  
  32.  
  33.  
  34. <?php
  35.        while($rek = mysql_fetch_array($answ)) {
  36.           echo  '      <option value="" onclick=""><$rek[cat_name]></option>
  37.           ';
  38.      }
  39. ?>    
  40.  
  41.  
  42. </select><BR>    
  43. <INPUT name="submit" type="submit" value="Dodaj">
  44. </FORM>


Za pomocą formularza wybieramy sobie nazwe kategori i mozemy ją spokojnie dodać.
Jednak każda kategoria może mieć kategorie nadrzędną (cat_parent), która można by wybrać z rozwijanej listy.
Na tej liście powinny być wszystkie dodane wcześniej kategorie.
Jeśli przy dodawaniu nowej kategorii klikniemy dodatkowo kategorie nadrzędna z listy i klikniemy dodaj, to do bazy powinno się zapisać id tej kategorii
w polu cat_parent (no i cała reszta dla dodanej kategorii).

Próbowałem coś pokombinować, ale mi nie wychodzi.
Jak powinna wyglądać ta część kodu, żeby było ok:

  1. <?php
  2.        while($rek = mysql_fetch_array($answ)) {
  3.           echo  '      <option value="" onclick=""><$rek[cat_name]></option>
  4.           ';
  5.      }
  6. ?
  7. ?>


questionmark.gif
erix
Wartość przekazywana do skryptu znajduje się w atrybucie value. tongue.gif
majestiq
Value powinno się incrementować automatycznie, zaleznie od ilości kategori (i++ winksmiley.jpg
Może mógłbyś choć raz napisać mi poprawny kod tongue.gifP
mike
Cytat(majestiq @ 23.12.2008, 12:08:18 ) *
Value powinno się incrementować automatycznie, zaleznie od ilości kategori (i++ winksmiley.jpg
Samo to się nic nie robi. Musisz w każdym obrocie pętli wstawić coś do value.
  1. <?php
  2. $i = 1;
  3. while($rek = mysql_fetch_array($answ)) {
  4.    echo  ' <option value="' . $i++ . '" onclick=""><$rek[cat_name]></option>';
  5. }
  6. ?>


Cytat(majestiq @ 23.12.2008, 12:08:18 ) *
Może mógłbyś choć raz napisać mi poprawny kod tongue.gifP
A może choć raz zrobić to samemu? tongue.gif

W powyższym kodzie specjalnie zostawiłem Ci błąd. Zapraszam do podstaw: stringi. Dowiesz sie jak umieszczać zmienne w stringach.
majestiq
No staram się sam, ale jak nie daje rady to proszę o pomoc smile.gif
Poprawiłem ten kod:

  1. <?php
  2. $i = 1;
  3. while($rek = mysql_fetch_array($answ)) {
  4.   echo  "<option value=' $i++'  onclick=''><$rek[cat_name]></option>";
  5. }
  6. ?>


Wynik:

  1. <FORM method="post">
  2. <p style="font-size:10px; color:#000; font-family:arial;">Nowa kategoria:</p><BR><INPUT name="cat_name" type="text" size="55"><BR>
  3. <p style="font-size:10px; color:#000; font-family:arial;">Kategoria nadrzędna:</p><BR>
  4. <select name="sortby" style="vertical-align:middle">
  5.  
  6.  
  7. </select><BR>
  8. <INPUT name="submit" type="submit" value="Dodaj">
  9. </FORM>


Czyli chyba coś nie tak z warunkeim, że nic nie wyświetla w selekcie ?
mike
Kurde, błedy i niedopatrzenia początkującego. Ile juz na tym forum piszesz? I za każdym razem to samo.
Brak debugowania. Przeczytaj to: Najczęstsze błędy, Zanim zapytasz, to sprawdź.
1. Są wyniki zapytania?
2. podpowiedź nr. 2 (Problemy z zapytaniem SQL)
majestiq
Pisze trochę ponad rok, to niedługo...
Błąd leży gdzie indziej, sam żle przepisałeś kod, bo nawet po usunięciu wiersza
w którym wprowadziłeś błąd i zmodyfikowaniu go w ten sposób:

  1. <?php
  2. $i = 1;
  3. while($rek = mysql_fetch_array($answ)) {
  4. echo "bzz";
  5. }
  6. ?>


Nie wyświetla mi się nic.
mike
Pomyśl trochę. Skoro pętla zalezy od ilości wyników a nie wyświetla nic to co może być nie tak?
majestiq
Pomyślałem :]
Już jest dużo lepiej,
Zmienne nie były widoczne w tym miejscu (myślałem, że mają większy zasięg)

  1. <?php
  2. $wypisz = "SELECT * FROM kategorie WHERE 1 ";
  3. $answ = mysql_query($wypisz, $conn);
  4. $i = 1;
  5. while($rek = mysql_fetch_array($answ)) {
  6.   echo  "<option value='" . $i++ . "'onclick=''>" . $rek[cat_name] . "</option>";
  7.   var_dump ($rek);
  8. }  
  9. ?>


  1. <FORM method="post">
  2. <p style="font-size:10px; color:#000; font-family:arial;">Nowa kategoria:</p><BR><INPUT name="cat_name" type="text" size="55"><BR>
  3.  
  4. <p style="font-size:10px; color:#000; font-family:arial;">Kategoria nadrzędna:</p><BR>
  5. <select name="sortby" style="vertical-align:middle">
  6.  
  7. <option value='1'onclick=''>Biuro</option>array(6) {
  8. [0]=>
  9. string(1) "1"
  10. ["cat_id"]=>
  11. string(1) "1"
  12. [1]=>
  13. string(5) "Biuro"
  14. ["cat_name"]=>
  15. string(5) "Biuro"
  16. [2]=>
  17. string(1) "0"
  18. ["cat_parent"]=>
  19. string(1) "0"
  20. }
  21. <option value='2'onclick=''>Grafika</option>array(6) {
  22. [0]=>
  23. string(1) "2"
  24. ["cat_id"]=>
  25. string(1) "2"
  26. [1]=>
  27. string(7) "Grafika"
  28. ["cat_name"]=>
  29. string(7) "Grafika"
  30. [2]=>
  31. string(1) "0"
  32. ["cat_parent"]=>
  33. string(1) "0"
  34. }
  35. </select><BR>
  36. <INPUT name="submit" type="submit" value="Dodaj">
  37. </FORM>


Teraz tylko trzeba przekazać cat_id jakoś jeszcze, bo narazie mi się nie dodaje.
Chyba teraz trzeba wykorzystac onclick lub inne polecenie JS ?
erix
Cytat
Teraz tylko trzeba przekazać cat_id jakoś jeszcze, bo narazie mi się nie dodaje.

<input type="hidden" /> albo podajesz w zmiennej GET dla action formularza.
majestiq
Próbuje na różne sposoby z tym <input type="hidden" /> ale gdzie to trzeba dać?
Chyba nie mogę tego wrzucić między <selcet></select> ?

  1. <?php
  2. $wypisz = "SELECT * FROM kategorie WHERE 1 ";
  3. $answ = mysql_query($wypisz, $conn);
  4. $i = 1;
  5. while($rek = mysql_fetch_array($answ)) {
  6.   echo  "<input type='hidden' name='cat_parent' />";
  7.   echo  "<option value='" . $i++ . "'onclick=''>" . $rek[cat_name] . "</option>";
  8.  
  9.  #var_dump ($rek);
  10. }  
  11. ?>


Tutaj się robi jakiś dziwny mish mash :/
erix
Cytat
Próbuje na różne sposoby z tym <input type="hidden" /> ale gdzie to trzeba dać?

W formularz tongue.gif Podstawy HTML się kłaniają.
majestiq
Nie no jasne, ze jest w formularzu.
Zasugerowałeś się fragmentem tongue.gif

  1. <FORM method="post">
  2. <p style="font-size:10px; color:#000; font-family:arial;">Nowa kategoria:</p><BR><INPUT name="cat_name" type="text" size="55"><BR>
  3. <p style="font-size:10px; color:#000; font-family:arial;">Kategoria nadrzędna:</p><BR>
  4. <select name="sortby" style="vertical-align:middle">
  5.  
  6.  
  7. <?php
  8. $wypisz = "SELECT * FROM kategorie WHERE 1 ";
  9. $answ = mysql_query($wypisz, $conn);
  10. $i = 1;
  11. while($rek = mysql_fetch_array($answ)) {
  12.   echo  "<input type='hidden' name='cat_parent' />";
  13.   echo  "<option value='" . $i++ . "'onclick=''>" . $rek[cat_name] . "</option>";
  14.  
  15.  #var_dump ($rek);
  16. }  
  17. ?>
  18.  
  19.  
  20. </select><BR>    
  21. <INPUT name="submit" type="submit" value="Dodaj">
  22. </FORM>
majestiq
No to skoro tam nie może być ten input to gdzie go umieścić ?
mike
Poza tagiem <select> ale nadal wewnątrz <form>.
shark121
to nie ważne gdzie on będzie przecież... i tak go nie widać
majestiq
No ale jak on ma mi przekazac niby to id questionmark.gif

  1. <?php
  2. $wypisz = "SELECT * FROM kategorie WHERE 1 ";
  3. $answ = mysql_query($wypisz, $conn);
  4. $i = 1;
  5. while($rek = mysql_fetch_array($answ)) {
  6.  
  7.   echo  "<option value='" . $i++ . "'onclick=''>" . $rek[cat_name] . "</option>";
  8.  
  9.  #var_dump ($rek);
  10. }  
  11. ?>
  12. </select>
  13. <input type='hidden' name='cat_parent' value='<?php  ?>'/>
  14. <BR>    
  15. <INPUT name="submit" type="submit" value="Dodaj">
  16. </FORM>



Chyba w VALUE trzeba coś wpisać ?
Kurde, już nie mam siły do tego.
shark121
sciana.gif tak jak już ktoś wcześniej napisał, podstawy html się kłaniają
majestiq
  1. <?php
  2. $nazwa = $_POST['sortby'];
  3.  
  4. $wypisz = "SELECT * FROM kategorie WHERE 1 ";
  5. $answ = mysql_query($wypisz, $conn);
  6. $i = 1;
  7. while($rek = mysql_fetch_array($answ)) {
  8.  
  9.   echo  "<option value='" . $i++ . "'onclick=''>" . $rek[cat_name] . "</option>";
  10.  
  11. #print_r ($rek);
  12. }  
  13. ?>
  14. </select>
  15. <input type='hidden' name='cat_parent' value="<?php $nazwa ?>" />
  16. <BR>    
  17. <INPUT name="submit" type="submit" value="Dodaj">
  18. </FORM>


Byłoby już ok, tylko nie wiem czemu nie widzi mi zmiennej w tym inpucie:

  1. <input type='hidden' name='cat_parent' value="<?php $nazwa ?>" />

Jak dam print_r ($nazwa) to widzi w tej lokalizacji tą zmienną, ale nie wiem czemu jej nie chce wstawić do value questionmark.gif
erix
Albo ja jestem jakiś niekumaty, albo ja nie rozumiem czegoś: na co Ci licznik, skoro potrzebujesz samego ID kategorii? Wstaw identyfikator w wartość dla <select /> i będzie git.
majestiq
Niby działa, ale id które dodaje wcale nie koniecznnie są takie jak zaznaczone selectem exclamation.gif
Zaznaczam sobie np. kategorie o id 1 a on mi dodaje id 2
Albo za 1 razem dodaje dobrze, a potem przy takich samych danych dodaje inne id.
O co chodzi?

  1. <FORM method="post">
  2. <p style="font-size:10px; color:#000; font-family:arial;">Nowa kategoria:</p><BR><INPUT name="cat_name" type="text" size="55"><BR>
  3. <p style="font-size:10px; color:#000; font-family:arial;">Kategoria nadrzędna:</p><BR>
  4. <select name="sortby" style="vertical-align:middle">
  5.  
  6. <option value='1' ></option>
  7.  
  8. <?php
  9. $nazwa = $_POST['sortby'];
  10.  
  11. $wypisz = "SELECT * FROM kategorie WHERE 1 ";
  12. $answ = mysql_query($wypisz, $conn);
  13. $i = 2;
  14. while($rek = mysql_fetch_array($answ)) {
  15.  
  16.   echo  "<option value='" . $i++ . "'onclick=''>" . $rek[cat_name] . "</option>";
  17.  
  18. #print_r ($rek);
  19. }  
  20. ?>
  21. </select>
  22. <input type='hidden' name='cat_parent' value="<?php echo $nazwa; ?>" />
  23. <BR>    
  24. <INPUT name="submit" type="submit" value="Dodaj">
  25. </FORM>
M4T3U5Z
dalej masz błędy htmlowe

zastanów się jak powinno być
type='hidden'
type="hidden"
i analogicznie popraw sobie wszędzie


czy nie powinieneś czasem zamiast $i++ dać $rek[id]
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.