Checkbox, php & Mysql въпрос

dminchev

Registered
Здравейте,
Това е първият ми пост, надявам се да има някой, да ми помогне и ако се налага и аз да помогна на някой :)
Въпроса ми е следният:
Имам система с потребители и за да не трия някой потребител реших да админа да има права да дава статус active/disabled. Това мисля да го осъществя чрез Checkbox - като е чекнат е active като е нечекнат disabled. За да не прецакам цялата си база реших да пробвам с тестове първо и си направих една табличка в базата test(id, name, action)
зададох примерни стойности и само на action имам 1 или 0 ( 0 е default стойност или чекирано )
направих си да ми изкарва от базата кои да са чекирани и кои да не са при зареждане на страницата, но сега искам да мога да обновявам профила - тоест ако чекирам някой който е нечекиран и дам update да ми вкарва в базата новата информация, но това да може да става за няколко полета едновременно. Ето кода, който изпълнява цялата операция до изваждането от базата.

if ($_POST[opr]=="add")
{
db_connect(); // towa e funckiq koqto si napravih za da me konektva kam bazata i da moga da promenqm username/pass van6no za vsi4ki failove kadeto se polzva

$upd_test="update test set action='$_POST[upd_act]' where id=";
$upd_test_res=mysql_query($upd_test)
or die(mysql_error());

$display_block.="successfull! please refresh";
echo $display_block;
}
else
{
db_connect();

$get_val="select*from test";
$get_val_res=mysql_query($get_val)
or die(mysql_error());
$display_block.="
<form name=\"upd\" method=\"post\" action=\"$_SERVER[PHP_SELF]\">
<table border=\"1\" cellpadding=\"2\" cellspacing=\"4\">
<tr>
<th>id</th><th>name</th><th>action</th>
</tr>
";
while($values=mysql_fetch_array($get_val_res))
{
$id=$values[id];
$name=$values[name];
$action=$values[action];

$display_block.="
<tr>
<td>$id</td><td width=\"100\" align=\"center\">$name</td>";

if ($action==1)
{
$display_block.="
<td> <input name=\"$id\" type=\"checkbox\" checked=\"checked\" /></td>";
}
else if($action==0)
{
$display_block.="
<td> <input name=\"$id\" type=\"checkbox\" value=\"\" /></td>";
}
$display_block.="</tr>";
}
$display_block.="
</table>
<br><br>
<input type=\"hidden\" name=\"opr\" value=\"add\">
<input name=\"submit\" type=\"submit\" value=\"Update \" />
<input type=\"reset\" name=\"Reset\" value=\"Reset\" />
</form>";

echo $display_block;
}



Дано някой да успее да ме разбере :) ако имате въпроси по кода питайте :)
 
Не мога в момента да ти прочета топика и да го прегледам основно
но това което не ми харесва още от самото начало е новата таблица.

test(id, name, action)

Защо нова таблица?

Не може ли в таблицата на user-те.
Много по лесно ще ти е и при update и при всичко.

Тази нова таблица е грешка и в момента ти дублираш данни (username).

Винаги си е било в таблицата user ( по принцип).
Във всяка логин система има такова поле и както сам каза се
отбелязва с 0 и 1.
 
не аз новата таблица си я правя за да видя само как се държи скрипта/системата, а иначе ще направя така както казваш ти, и то няма да е само за потребителите :)
направих тази тест за да не оклепам другият си код и таблици :) вярно има backup , но ... :wink:
 
несъм сигорен но

<input name=\"name[]\" type=\"checkbox\" value=\"$id\" />
така мисля че ще получиш масив които ще съдържа всички ИД които са чекнати

$_POST['name'];
 
От това може да стане хубаво уроче.
Може да го напишеш като приключиш с тестовете. :)
 
ок мерси за вниманието
след малко се захващам да видя какво ще излезе и ако всичко е наред ще пусна един урок :)
 
dminchev каза:
ок мерси за вниманието
след малко се захващам да видя какво ще излезе и ако всичко е наред ще пусна един урок :)

Ако не се справиш ще напиша един тестов скрипт като се освободя.
 
Стигнах до положението да ми update-ва в базата ако е чекирано, но само за един checkbox, но не и ако искам да не е чекирано.
нещо ми куца и немога да го измисля. пробвах с foreach и с for цикли, но без особен резултат...
ако някой му се пише малко код ще съм му страшно благодарен ... и пак продължавам да търся решение из нета :)
 
в $user_id=$_POST['name'];
$ser_id би трябвало да е масив които да съдържа всички user id
брои елементите в масива
$broi=count($user_ud)-1;

...
свързваш се с БД
...

for($k=0;$k<=$broi;$k++){
$sql="UPDATE `table` SET active='1' WHERE id LIKE '$user_id[$k]' ";
mysql_query($sql);
}

mysql_close()

мисля че трябва да стане така
 
Вариант 1:
Таблица box
полета id - user - activ
checkbox.JPG


DEMO:
http://admin.web-tourist.net/demo/checkbox1.php


Код:
<?php
$user="............";
$password="...............";
$database="...............";
$checked='';
mysql_connect(localhost,$user,$password);
mysql_select_db($database) or die( "Unable to select database");

if (!empty($_GET['approve']))
{
$query = "UPDATE box SET activ = '0'";
mysql_query($query);
foreach ($_GET['approve'] as $entry)
{
$query = "UPDATE box SET activ = '1' where id = '$entry'";
mysql_query($query);

}
}

$query="SELECT* FROM box";
$result=mysql_query($query);
echo '

<form action="" method="GET">
<table>
';
while($query_data = mysql_fetch_array($result))
{ 
$id = $query_data["id"];
if($query_data["activ"]==1) { $checked="CHECKED";}else{$checked="";}

echo "
<tr>
<td>".$query_data["user"]."</td>
<td><input type=\"checkbox\" name=\"approve[]\" value=\"$id\" $checked></td>
</tr>";
}

echo "
</table>
<input type=\"submit\" value=\"check\">
</form>";




Втори вариант:

<?php
$user="............";
$password="...............";
$database="...............";

mysql_connect(localhost,$user,$password);
mysql_select_db($database) or die( "Unable to select database");

$query="SELECT* FROM box";
$result=mysql_query($query);
echo '

<form action="" method="GET">
<table>
';
while($query_data = mysql_fetch_array($result))
{
$id = $query_data["id"];
echo "
<tr>
<td>".$query_data["user"]."</td>
<td><input type=\"checkbox\" name=\"approve[]\" value=\"$id\"></td>
</tr>";
}

echo "
</table>
<input type=\"submit\" value=\"check\">
</form>";


$n=count($masiv);

if (!empty($_GET['approve']))
{

foreach ($_GET['approve'] as $entry)
{

$query = "UPDATE box SET activ = '1' where id = '$entry'";
mysql_query($query);
}
}
 
мерси много :D изключително полезно и ефективно
остава въпроса, след като ти (admin) го направи изцяло, аз ли да напиша урока или ще е нахално от моя страна да "трупам лаври" на чужд гръб :wink:
за мен няма значение от кой ще се напише, но мисля че ще е добре да го има, защото ще е доста полезно и за другите :)
 
dminchev каза:
мерси много :D изключително полезно и ефективно
остава въпроса, след като ти (admin) го направи изцяло, аз ли да напиша урока или ще е нахално от моя страна да "трупам лаври" на чужд гръб :wink:
за мен няма значение от кой ще се напише, но мисля че ще е добре да го има, защото ще е доста полезно и за другите :)

Не знам.

Ако погледна реално тези скриптове не ми харесват.
Първия работи но трябва всички useи да ги листнеш в една страница.
Проблема може да дойде от това, че в скрипта първо трие всички записи в полето activ и после записва какво си накликал.
Това не е добър подход но нямам време да се занимавам сериозно.

Другия скрипт пък може да прави потребителите активни но не може да ги прави не активни.

Той е добър само ако искаш с този скрипт само да активираш нещо.

Просто се опитах да ти дам малко бонус но работата може да се окаже
недовършена.
 
Няма значение кой пише уроците.
Въпроса е да се пише (но да не се преписва от БГ сайтове). :)
 
ее да разбира се :)
единственият недостатък на първият е че трие и после наново слага стойностите и ако базата е голяма може да се забави изпълнението.
относно визуализацията аз го промених, в смисал на друга страница да вади само тези които са активни ( имат тикче ). там може да се играe и върти не е толкова проблем :)
важното е че всичко работи, за което пак ти благодаря :wink:
ще помисля какво може да се промени ( ако въобще измисля нещо ) и ще пусна урока 8)
 

Back
Горе