Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> przekazywanie checkbxow
szymono
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 9.02.2004

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


mam taki problem
na jednej stroie tworzy sie lista osob jest to robione petla i wyciagane z bazy danych sql
wyglada to tak
[php:1:9af2f9b989]<?php
$link_id=db_connect();
if(!$link_id) die(sql_error());
$query = "select * from student";
$result = mysql_query($query) or die ("invalid query: " . mysql_error());

echo " <form method="post" action="usunstudenta.php"";


while ($query_data = mysql_fetch_array($result)){
$imie=$query_data['stud_imie'];
$studid = $query_data['studid'];
echo "<tr><td width="2%"><input name="del[]" value="i" type="checkbox" ></td>";
"<input type="hidden">".$studid." ";
echo "<td width="12%">".$studid."</td>";
echo "<td width="10 %">".$query_data['stud_nazwisko']."</td>";
echo "<td width="10 %">".$query_data['nr_indeksu']."</td>";
echo "<td width="10 %">".$query_data['rok_studiow']."</td>";
echo "<td width="10 %">".$query_data['semestr']."</td>";
echo "<td width="5%"><a href="index.php?file=listastudentow.php&action=edytuj&studid=$studid "> wyswietl</a></td></tr>";
}

?>[/php:1:9af2f9b989]

i teraz na dole strony znajduje sie link ktory ma przekazac do tej samej strony tylko te pola przy ktorych zaznaczono checkboxa
link wyglada tak
Kod
<a href="index.php?file=listastudentow.php&action=del&studid=<? $del[studid] ?>">Usun zaznaczonych</a></td>

przy czym del to funkcja ktora ma wyswietlic ta tabelke z osobami przy ktorych zaznaczono checkboxy.
i wszystko sie dzieje na jednej stronie tej listastudentow
ale to nie chce dzialac? czy zle skonstruowalem linka questionmark.gif czy cos innego ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
kossa
post
Post #2





Grupa: Zarejestrowani
Postów: 1 165
Pomógł: 9
Dołączył: 9.04.2002
Skąd: Toruń

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


Tego nie mozesz zrobic linkiem tylko to musi byc formularz.
Zamknij wszystko w znaczniki <form action...>...</form> i zamiast linku musisz umiescic button submit wowczas zadziala

a tam gdzie poprowadzi akcja z formularza kod

checkboxy - name np "del[]" a value to np id usuwanego studenta.
teraz po przeslaniu dalej formularza bedziesz mial dostep do tablicy $_POST['del'] a kolejne elementy to wartosci z zaznaczonych checkboxow winksmiley.jpg

[list] as $usuwany_student){
//twoja akcja
echo "Chcesz usunac newsa: ";
echo $usuwany_news;
}[list]

pokombinuj smile.gif

Kossa

----------------------------------------------------------

albo jeszcze tak smile.gif

robisz checkboxy z nazwa np. multi_field[] czyli tablicowe, a value dajesz jakies id studenta potem petla:


[php:1:7892b1fe17]<?php
for($i=0;$i<=count($multi_field);$i++)
{
if(isset($multi_field[$i]))
{
// tu masz zaznaczone id
}
}
?>[/php:1:7892b1fe17]


w ifie będziesz mial te ktore sa zaznaczone a wartosc multi_field[$] to id zaznaczonego studenta, teraz mozesz zrobic juz co chcesz...

jeszcze raz Kossa smile.gif
Go to the top of the page
+Quote Post
szymono
post
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 9.02.2004

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


Kossa dzieki za odpowiedz ale chyba nadal robie cos nie tak.

[php:1:0c36f1bfa6]<?php
function pokaz_rekordy(){
global $php_self;
global $default_dbname;
?>
<!--DWLayoutTable-->
<form method="post" onSubmit="index.php?file=listastudentow.php&action=del">
<tr>
<td height="21" colspan="7" valign="top" id="log">Lista studentow</td>
</tr>
<tr>
<td width="2%" height="26" id="kolor2">zaznacz</td>
<td width="10%" height="26" id="kolor2">imie</td>
<td width="10%" height="26" id="kolor2">nazwisko</td>
<td width="8%" height="26" id="kolor2">nr indeksu</td>
<td width="5%" height="26" id="kolor2">rok studiow</td>
<td width="5%" height="26" id="kolor2">semestr</td>
<td width="5%" height="26" id="kolor2">edytuj</td>
</tr>
<br>
<?
html_header();
$link_id=db_connect();
if(!$link_id) die(sql_error());
$query = "select * from student";
$result = mysql_query($query) or die ("invalid query: " . mysql_error());

echo " <form method="post" action="usunstudenta.php"";

while ($query_data = mysql_fetch_array($result)){
$imie=$query_data['stud_imie'];
$studid = $query_data['studid'];
echo "<tr><td width="2%"><input name="multi_field[]" value=".$studid." type="checkbox" ></td>";
echo "<td width="12%">".$studid."</td>";
echo "<td width="10 %">".$query_data['stud_nazwisko']."</td>";
echo "<td width="10 %">".$query_data['nr_indeksu']."</td>";
echo "<td width="10 %">".$query_data['rok_studiow']."</td>";
echo "<td width="10 %">".$query_data['semestr']."</td>";
echo "<td width="5%"><a href="index.php?file=listastudentow.php&action=edytuj&studid=$studid "> wyswietl</a></td></tr>";
}?>
</form>
<table>
<tr>
<td height="26" colspan="2" valign="top"> <input type="submit" name="Submit" value="Wystaw oceny zaznaczonym">
</td>

<td colspan="2" valign="top"><input type="button" value="Nowy" onClick="java script:winopen('nowystudent.php')"></td>
<td width="134" valign="top"><input type="submit" value="usun zaznaczonych"></td>
<td colspan="3" valign="top"><input type="button" name="Submit4" value="Wystaw obecnosci zaznaczonym"></td>
</tr>
</form>
</table><?
footer();
}

?>[/php:1:0c36f1bfa6]

To jest kod funkcji ktora wyswietla to co jest w bazie

[php:1:0c36f1bfa6]<?php
function del() {

?>
<!--DWLayoutTable-->
<form method="post" action="index.php?file=listastudentow.php">
<input type="hidden" name="action" value="do_usuniecia">
<tr>
<td height="21" colspan="7" valign="top" id="log">Lista studentow</td>
</tr>
<tr>
<td width="2%" height="26" id="kolor2">zaznaczony</td>
<td width="10%" height="26" id="kolor2">id</td>
<td width="10%" height="26" id="kolor2">imie</td>
<td width="10%" height="26" id="kolor2">nazwisko</td>
<td width="8%" height="26" id="kolor2">nr indeksu</td>

</tr>



<br>
<?
html_header();
$link_id=db_connect();
if(!$link_id) die(sql_error());

for($i = 0; $i < count($multi_field); $i++)
{
if (isset ($multi_field[$i]))
{
$query = "select * from student where studid = $studid ";
$result = mysql_query($query) or die ("invalid query: " . mysql_error());

while ($query_data = mysql_fetch_array($result)){
$studid=$query_data['studid'];
$imie=$query_data['stud_imie'];
$nazwisko=$query_data['stud_nazwisko'];
$nr_indeksu=$query_data['nr_indeksu'];
echo "<tr><td width="2%"><input name="multi_field[]" type="checkbox" checked></td>";
echo "<td width="12%">".$studid."</td>";
echo "<td width="12%">".$imie."</td>";
echo "<td width="10 %">".$nazwisko."</td>";
echo "<td width="10 %">".$nr_indeksu."</td>";
}
}
}
echo "<input type="submit" value="usun"></form>";
}


?>[/php:1:0c36f1bfa6]

a to tej ktora ma wyswietlic te rekordy przy ktorych jest zaznaczony checkbox ale nie dziala
przelaczane jest wszystko za pomoca case pozniej

przy czym sam mam watpliwosci co do linijki 8 w pierwszej funkcji i 33 w drugiej przy studid=$studid
acha i jeszcze wystaw oceny i wystaw obecnosci jeszcze nie dzialaja bo to chyba bedize tak samo jak usun zaznaczonych

Bede wdzieczny za wskazowke taka dokladnijsza
Go to the top of the page
+Quote Post
kossa
post
Post #4





Grupa: Zarejestrowani
Postów: 1 165
Pomógł: 9
Dołączył: 9.04.2002
Skąd: Toruń

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


cos mieszasz i utrudniasz sobie zycie smile.gif

dlaczego masz zagniezdzone formularze? wydaje mi sie to niepotrzebne

jaki blad wyskakuje albo co sie dzieje po kliku usun? uruchamia skrypt ?
Go to the top of the page
+Quote Post
szymono
post
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 9.02.2004

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


w tym momencie jak w pierwszej funkcji w form action jest:

index.php?file=listastudentow.php&action=del

i klikne usun zaznaczonych nic sie nie dzieje natomiast samo usun z drugiej funkcji wogole nie dziala

bo jak moge jeszcze inaczej uruchomic ta funkcje del?? uzywajac submita ? przy linku bylo to w ten sposob <a href="index.php?file=listastudentow.php&action=del">usun</a>


a zagniezdzone formularze bo kazdy rekord ma pole edytuj i wna tej samej stronie wyswietla sie rekord do edytowania, od tego jest inna funkcja, wiec jest osobnym formularzem i to mi dziala, nie wiem czy to ok ale tak wykombinowalem
Go to the top of the page
+Quote Post
kossa
post
Post #6





Grupa: Zarejestrowani
Postów: 1 165
Pomógł: 9
Dołączył: 9.04.2002
Skąd: Toruń

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


ten pierwszy form jest na 100% niepotrzebny, w drugim jest tylko zrob np.: tak: action=index.php?file=listastudentow.php

i w skrypcie pobieraj wartosc submit - czy usun, czy edytuj

i wtedy wykonuj odpowiednia akcje

Kossa

ten pierwszy form jest na 100% niepotrzebny, w drugim jest tylko zrob np.: tak: action=index.php?file=listastudentow.php

i w skrypcie pobieraj wartosc submit - czy usun, czy edytuj

i wtedy wykonuj odpowiednia akcje

Kossa


-----------------------------------------------------------------

rozumiem ze ta funkcja to potwierdzenie usuwania bo jesli nie to naknociles smile.gif

[quote="szymono"]
//-----------------------------------
to chyba tu nie potrzebne jest:
html_header();
$link_id=db_connect();

//-------------------------------------
for($i = 0; $i < count($multi_field); $i++)
{
if (isset ($multi_field[$i]))
{
$query = "select * from student where studid = $studid ";
$result = mysql_query($query) or die ("invalid query: " . mysql_error());

while ($query_data = mysql_fetch_array($result)){
$studid=$query_data['studid'];
$imie=$query_data['stud_imie'];
$nazwisko=$query_data['stud_nazwisko'];
$nr_indeksu=$query_data['nr_indeksu'];
echo "<tr><td width="2%"><input name="multi_field[]" type="checkbox" checked></td>";
echo "<td width="12%">".$studid."</td>";
echo "<td width="12%">".$imie."</td>";
echo "<td width="10 %">".$nazwisko."</td>";
echo "<td width="10 %">".$nr_indeksu."</td>";
}
}
}
echo "<input type="submit" value="usun"></form>";
}


?>[/php]

majac teraz zanazczone wszystkie pola i wyswietlone tylko te wczesniej zaznaczone powinienesz jeszcze raz zrobic taka petle for i usunac wybrane rekordy

namieszales z tymi formami

powalcz z tym!

Kossa

-----------------------------------------------------------------

[php:1:e56c5d184d]<?php
$res=mysql_query("select * from $table ");
echo "<form method="post" action="index.php?section=newsletter&action=delete">
<input TYPE="submit" value="usuń zaznaczonych">";
while($row = mysql_fetch_array($res))
{
$adres_id = $row["id"];
$e_mail = $row["adres"];
echo "<input type="checkbox" value='$adres_id' name="del[]">$e_mail<br>";
}
echo "</form>

if (action=="delete")
{
for ($x=0;$x<count($del);$x++)
{
$usun_id = $del[$x];
$Query = "DELETE FROM $table WHERE id=$usun_id";
$res = ExecSQL($Query);
}
}
?>[/php:1:e56c5d184d]

mysle ze jest wszystko jasne smile.gif
ExecSQL - to funkcja wykonujaca zapytanie SQL qale to wiesz jak zrobic smile.gif

kod dziala - szybko sobie newslettera przerobilem na jednym ze starych serwisow

najpierw wyciagasz z bazy studentow i jest jeden form
potem jesli akcja == delete to jest wykonywany kod usuwajacy
to wszystko smile.gif

mozesz sie pobawic z submit dodajac mu name i akcje wykonywac w zaleznosci od name



powodzenia!
Kossa


----------------------------------------------------------------
@kossa:
NABIJANIU POSTOW MOWIMY STANOWCZO NIE ! angrysmiley.gif

(Za lamanie regulaminu jest ban !)

Seth
Go to the top of the page
+Quote Post
kossa
post
Post #7





Grupa: Zarejestrowani
Postów: 1 165
Pomógł: 9
Dołączył: 9.04.2002
Skąd: Toruń

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


nie zrobilem tego w celu nabijania postow - sorki - zapedzilem sie z przemysleniami

Kossa
Go to the top of the page
+Quote Post
szymono
post
Post #8





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 9.02.2004

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


Kossa chyba jednak cos nie tak robie albo moze pole chcekbox musi byc w tabeli questionmark.gif

teraz wyglada to tak:
[php:1:a5fe3192be]<?php
function pokaz_rekordy(){
global $php_self;
global $default_dbname;
?> <!--$szerokosc, $ramka, $odleglosc1=1, $odleglosc2=1-->

<!--DWLayoutTable-->

<tr>
<td height="21" colspan="7" valign="top" id="log">Lista studentow</td>
</tr>
<tr>
<td width="2%" height="26" id="kolor2">zaznacz</td>
<td width="10%" height="26" id="kolor2">imie</td>
<td width="10%" height="26" id="kolor2">nazwisko</td>
<td width="8%" height="26" id="kolor2">nr indeksu</td>
<td width="5%" height="26" id="kolor2">rok studiow</td>
<td width="5%" height="26" id="kolor2">semestr</td>
<td width="5%" height="26" id="kolor2">edytuj</td>
</tr>
<br>
<?
html_header();
$link_id=db_connect();
if(!$link_id) die(sql_error());
$query = "select * from student";
$result = mysql_query($query) or die ("invalid query: " . mysql_error());
echo " <form method="post" action="index.php?file=listastudentow.php&action=delete">";
echo " <input type="submit" value = "usun zaznaczonych">";

while ($query_data = mysql_fetch_array($result)){
$studid = $query_data["studid"];
$imie=$query_data['stud_imie'];
$nazwisko=$query_data['stud_nazwisko'];
$indeks=$query_data['nr_indeksu'];
$rok=$query_data['rok_studiow'];
$semestr=$query_data['semestr'];
echo "<tr><td width="2%"><input type="checkbox" value='$studid' name="del[]"></td>";
echo "<td width="12%">".$imie."</td>";
echo "<td width="10 %">".$nazwisko."</td>";
echo "<td width="10 %">".$indeks."</td>";
echo "<td width="10 %">".$rok."</td>";
echo "<td width="10 %">".$semestr."</td>";
echo "<td width="5%"><a href="index.php?file=listastudentow.php&action=edytuj&studid=$studid "> wyswietl</a></td></tr></form>";
}
if (action=="delete")
{
for ($i=0; $i<count($del); $i++)
{
$usun_id = $del[$i];
$query = "delete from student where studid = $usun_id";
$result = mysql_query ($query);

}
}

?>

<table>
<tr>
<td height="26" colspan="2" valign="top"> <input type="submit" name="Submit" value="Wystaw oceny zaznaczonym">
</td>

<td colspan="2" valign="top"><input type="button" value="Nowy" onClick="java script:winopen('nowystudent.php')"></td>
<td width="134" valign="top"><input type="submit" value="usun zaznaczonych"></td>
<td colspan="3" valign="top"><input type="button" name="Submit4" value="Wystaw obecnosci zaznaczonym"></td>
</tr>

</table>

<?

footer();
}
?>[/php:1:a5fe3192be]

it o jest ta funkcja pierwsza ktora pokazuje rekordy z tabeli
wciskam submit (dodalem sobie jeszcze jeden na gorze ) i nic sie nie dzieje. Gdzie mam blad juz kombinuje troche czasu i nic. Natomiast ta druga funkcje wywalilem
Go to the top of the page
+Quote Post
kossa
post
Post #9





Grupa: Zarejestrowani
Postów: 1 165
Pomógł: 9
Dołączył: 9.04.2002
Skąd: Toruń

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


co robi ta funkcja?

Kod
html_header();


zaraz przeanalizuje kod
masz balagan w kodzie - niedomknieta tabela, oj brzydko, brzydko...

Kossa

mam juz, poza balaganem w kodzie bo brzydko piszesz, form zamknales zaraz po pierwszym studencie! przy if ($action...) nie bylo $!, pomiedzy </tr> a nastepnym <tr> wstawiasz <br> ?! i takie tam bledy...

tu masz kod dzialajacy, dostosuj go do swoich potrzeb:

Kod
<table>

<tr><td height="21"  colspan="7" valign="top" id="log">Lista studentow</td></tr>

<tr><td height="21"  colspan="7" valign="top" id="log"><form method="post"  action="index.php?file=istastudentow.php&action=delete"></td></tr>

<tr><td height="21"  colspan="7" valign="top" id="log"><input type="submit" value = "usun zaznaczonych"></td></tr>

</tr>

    <tr>

      <td width="2%" height="26" id="kolor2">zaznacz</td>

      <td width="10%" height="26"  id="kolor2">imie</td>

      <td width="10%" height="26"  id="kolor2">nazwisko</td>

      <td width="8%" height="26"  id="kolor2">nr indeksu</td>

      <td width="5%" height="26"  id="kolor2">rok studiow</td>

      <td width="5%" height="26"  id="kolor2">semestr</td>

      <td width="5%" height="26"  id="kolor2">edytuj</td>    

    </tr>

<?php

global $action;



function PokazStudentow()

{

global $action;

$table = "student";

$query = "select * from $table";

$result = mysql_query($query) or die ("invalid query: " . mysql_error());

    

while ($query_data = mysql_fetch_array($result))

{

    $studid = $query_data["studid"];

    $imie=$query_data['stud_imie'];

    $nazwisko=$query_data['stud_nazwisko'];

    $indeks=$query_data['nr_indeksu'];

    $rok=$query_data['rok_studiow'];

    $semestr=$query_data['semestr'];

echo "<tr><td width="2%"><input type="checkbox" value="$studid" name="del[]"></td>";

echo "<td width="12%">".$imie."</td>";

echo "<td width="10 %">".$nazwisko."</td>";

echo "<td width="10 %">".$indeks."</td>";

echo "<td width="10 %">".$rok."</td>";

echo "<td width="10 %">".$semestr."</td>";

echo "<td width="5%">

<a href="index.php?file=listastudentow.php&action=edytuj&studid=$studid">wyswietl</a></td></tr>";

}



echo "</form></TABLE>";



};



if ($action=="delete")

{

  for ($i=0; $i<count($del); $i++)

  {

    $usun_id = $del[$i];

    $query = "delete from student where id = $usun_id";

    $result = mysql_query ($query);

  }

}



PokazStudentow();



?>


Kossa
Go to the top of the page
+Quote Post
slaug
post
Post #10





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 2.05.2003
Skąd: Gdańsk

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


Szkoda, że osoby nie bedące autorami wątków nie mogą klikać pomógł.

Niemniej jednak wielkie dzięki Kossa. Twoje rady okazały się bardzo pomocne dla mnie. THX


--------------------
Never underestimate the power of human stupidity!
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 Aktualny czas: 19.08.2025 - 18:12