Jump to content
  • 0

Изменить значение по нажатию на ссылку


necro
 Share

Question

Есть тема, таблица themes поле status равно открыта.

Есть ссылка, по нажатию на которую, нужно чтобы статус этот менялся на закрыта.

echo "<a href='messages.php?uid=".$myrow['id_themes']."&close=1'>Закрыть тему</a>";

if($_GET['close'] == 1) {
$result=mysql_query("SELECT * FROM themes WHERE id_themes='".$theme_id."'");
$myrow=mysql_fetch_assoc($result);
$myrow['status']=='закрыта';
}

Намудрил чего-то и не работает, подскажите как это реализовать правильно.

Link to comment
Share on other sites

23 answers to this question

Recommended Posts

  • 0

1) в таблице mysql должно быть поле типа: `hide` enum('show','hide') NOT NULL DEFAULT 'show'

2) в ссылку гетом передаете нужный параметр show или hide

3) проверяете, если гетом пришло show, то делаете sql запрос в бд и меняете через ф-цию UPDATE значение в таблице на show, а если пришло hide - то соответственно меняете на hide.

4) на странице где нужно вывести блок с show в запросе просто указываете WHERE `tbl` = 'show' - будет выводить только те, которые не скрыты.

Link to comment
Share on other sites

  • 0

Как мне передать ид темы, когда я создаю сообщение? К сообщениям темы перехожу вот тут:

<a href="messages.php?uid='.$myrow['id_themes'].'">'.$myrow['name_themes'].'</a>

Там поле отправить сообщение, пишу так:

$theme_id = $_GET['uid'];
$sql = "INSERT INTO `messages` (`theme_id`, `author_id`, `message`)
VALUES('$theme_id','$id','$message');";
$result = mysql_query($sql);

Передает 0.

upd for rus:

Я заметил, что вы, как мой одногруппник, он всегда делал правильно, но не так, как все. Искал постоянно обходные пути и делал намного сложнее, чем можно было сделать)

Вот, как была решена предыдущая задача.

Ссылки:


if($myrow['status']=='открыта') {
echo "<a href='themes.php?close=$theme_id'>Закрыть тему</a>";
}
else {
echo "<a href='themes.php?open=$theme_id'>Открыть тему</a>";
}


if(abs(intval($_GET['close'])) > 0) {
mysql_query("UPDATE themes SET status = 'закрыта' WHERE id_themes=" . abs(intval($_GET['close'])));
}
if(abs(intval($_GET['open'])) > 0) {
mysql_query("UPDATE themes SET status = 'открыта' WHERE id_themes=" . abs(intval($_GET['open'])));
}

Edited by necro
Link to comment
Share on other sites

  • 0

necro, да, есть такое дело, сам не раз замечал за собою подобное :D

не знаю, просто приучил себя как можно меньше допускать в коде присутствие в запросах цифер, это касается вопроса безопасности, а что касается вашего вопроса, на первый взгляд вроде все ровно и правильно... попробуй вместо INTO с помощью SET записать в бд:


$theme_id = mysql_real_escape_string($_GET['uid']);
$sql = mysql_query ("INSERT `messages` SET
`theme_id` = intval($theme_id),
`author_id` = intval($id),
`message` = '$message'");

свои закорючки дописал для защиты ;)

UPD: в обоих случаях у вас:

if(abs(intval($_GET['close'])) > 0)

if(abs(intval($_GET['open'])) > 0)

значения больше нуля, понятно что переменные разные open и close, но я считаю это не правильным, проще и наверное правильно в одной переменной передавать разные значения, если пришло hide - скрываем данные обновляя таблицу, show - показываем данные обновляя таблицу бд.

Link to comment
Share on other sites

  • 0

Дело в том, что он вообще ничего из этой переменной не передает, ставлю var dump и передает null. Вот весь код страницы, может так проще будет понять.


<?session_start();
require_once('connect.php');
mysql_query('SET NAMES UTF8');
$login = $_SESSION['login'];
$id=$_SESSION['id'];
$theme_id = $_SESSION['themes_id'];
$img = "<img src='image/noavatar.png'>";
$valid=true;
$create=false;
$result=false;
if(isset($_POST['try']))
{
if (($_POST['message']==""))
{
$valid=false;
}
else
{
$message =($_POST['message']);
$create=true;
$valid=true;
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Тема</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title></title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<link rel="stylesheet" href="styles/messages.css" type="text/css" media="screen, projection" />
</head>
<body>
<?
if (isset($_SESSION['id'])|| $_SESSION['type']== 'admin')
{
$date_today = date("d.m.y");
$today = date("H:i");
echo("<div class='date'>Здравствуйте, $login.<br/> Сегодня: $date_today - $today<br/>
<a href='index.php?exit=1'>выход</a>
</div>");
if (!$valid) {?><center><h3>Вы не заполнили все необходимые поля</h3></center><?}
if ($create)
{
$theme_id = $_GET['uid'];
var_dump($theme_id);
$sql = "INSERT INTO `marchandby_test1`.`messages` (`theme_id`, `author_id`, `message`)
VALUES('$theme_id','$id','$message');";
$result = mysql_query($sql);
if ($result == 'true')
{
echo "<center><h3>Сообщение успешно добавлено<p><font color=red><a href=themes.php>Нажмите</a> для перехода к списку тем.</p></font></h3></center>";
}
else
{
echo "<center><h3>Ошибка при добавлении в базу данных</h3></center>";
}
}
if (!$result) {
if(isset($_GET['uid']))
{
$theme_id = (int)$_GET['uid'];
$result=mysql_query("SELECT * FROM themes WHERE id_themes='".$theme_id."'");
if($myrow=mysql_fetch_assoc($result))
{
echo "<div class='wrapper'>
<div class='topic'>
<span><a href='themes.php'>Список тем > </a>".$myrow['name_themes']."</span>
</div>";

$result=mysql_query("SELECT m.*, u.login
FROM messages m
left join user u on m.author_id=u.id WHERE theme_id='".$theme_id."' and first=1");
if($myrow=mysql_fetch_assoc($result)) {
$first_message = $myrow['message'];
$author = $myrow['login'];
echo "<div class='author_info'>".$img."<p>".$author."</p></div>";
echo "<div class='razd'></div>";
echo '<div class="message"><div class="time">Отправлено '.$myrow['time_create'].'</div><hr/><span class="text-message">'.$first_message.'</span></div>';
}


$result=mysql_query("SELECT m.*, u.login
FROM messages m
left join user u on m.author_id=u.id
WHERE theme_id='".$theme_id."' and first=0 order by time_create");
while ($myrow=mysql_fetch_assoc($result)) {
echo "<div class='author_info'>".$img."<p>".$author."</p></div>";
echo "<div class='razd'></div>";
echo '<div class="message"><div class="time">Отправлено '.$myrow['time_create'].'</div><hr/><span class="text-message">'.$myrow['message'].'</span></div>';
}
$result=mysql_query("SELECT * From themes Where id_themes ='".$theme_id."'");
$myrow=mysql_fetch_assoc($result);
if ($myrow['status']=='открыта') {
echo "<div class='reply'><h3 class='maintitle'>Ответить в тему</h3>
<div class='replybox'>
<form action='messages.php' method='post'>
<input type='hidden' name='try' value='1'/>
<textarea name='message' rows='10' cols='147' tabindex='0' style='height: 120px;cursor:text;'></textarea>
<input type='submit' name='submit' value='Отправить' class='submit'>
</form>
</div>
</div>";
}
if($myrow['status']=='открыта') {
echo "<a href='http://test.maxdamage.ru/themes.php?close=$theme_id'>Закрыть тему</a>";
}
else {
echo "<a href='http://test.maxdamage.ru/themes.php?open=$theme_id'>Открыть тему</a>";
}
echo "</div>";

}
}
}
}
?>
</body>
</html>

Link to comment
Share on other sites

  • 0

$id=$_SESSION['id'];

$theme_id = $_SESSION['themes_id'];

понятно что дальше в коде вы переопределяете переменные, но нужно ли это?

не лучше ли всегда стараться называть переменные разными именами?

$theme_id = (int)$_GET['uid']; - а почему именно int(); а не intval();?

это все конечно риторика, но так то трудновато телепатически решать подобные задачки... и да, а почему var_dump($theme_id); а не echo $theme_id; ?

для отладки лучше пробуйте выводить query запрос, что он возвращает.

Link to comment
Share on other sites

  • 0

rus, выводил запрос, заносятся все данные кроме ида темы, он 0 всегда. И ещё с ходу такой вопрос, мне нужно к сообщению прикреплять файл, мб знаете, где можно почитать, как это сделать, смысл такой, я по идее должен загружать файл на сервер и записывать путь в базе, а потом при выводе, естественно считывать этот путь, чтобы файл выводился и можно было его скачать. Но вот только нигде не нашел этого, как отправить на мыла только нашел.

Link to comment
Share on other sites

  • 0

Я это читал, ну загружу я файл на сервер, а как мне записать в базу место, где он хранится, чтоб потом его выводить.

по примеру что дал Лунатик:


<?php
// В PHP 4.1.0 и более ранних версиях следует использовать $HTTP_POST_FILES
// вместо $_FILES.

$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "Файл корректен и был успешно загружен.\n";
} else {
echo "Возможная атака с помощью файловой загрузки!\n";
}

echo 'Некоторая отладочная информация:';
print_r($_FILES);

print "</pre>";

?>

$uploadfile - хранится путь вместе с картинкой.

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) - условие, если загружена картинка удачно, то далее записываем данные в бд:


$file = mysql_query ("INSERT `upload` SET
`files` = '$uploadfile'");

  • Like 1
Link to comment
Share on other sites

  • 0

Спасибо, буду пробывать) если что, я знаю куда идти и ещё мелочь одна, тут правда пхп, но мб кто знает и скрипты. confirm же как я понял должен передавать истину если жмешь ок и ложь если жмешь отмена. Сделал так:

echo "<a href='themes.php?close=$theme_id' onclick = confirm('Уверены?')>Закрыть тему</a>";

В итоге он в любом случае её закрывает.

Edited by necro
Link to comment
Share on other sites

  • 0

confirm же как я понял должен передавать истину если жмешь ок и ложь если жмешь отмена. Сделал так:

echo "<a href='themes.php?close=$theme_id' onclick = confirm('Уверены?')>Закрыть тему</a>";

В итоге он в любом случае её закрывает.

echo '<a href="themes.php?close=$theme_id" onclick="return confirm('Вы уверены?');">Закрыть тему</a>?';

Edited by NeoXidizer
Link to comment
Share on other sites

  • 0

тут правда пхп, но мб кто знает и скрипты.

порадовал, чесслово :rofl:


<script type = "text/javascript">
function showMessage() {
if (confirm("Вы уверены что хотите закрыть эту тему?")) {
alert("Тема закрыта!");
} else {
parent.location='http://site.ru/admin/';
alert("Тема не закрыта!");
}
}
</script>
echo '<a href="themes.php?close=$theme_id" nclick="return showMessage();">Закрыть тему</a>?';

Link to comment
Share on other sites

  • 0

if($myrow['status']=='открыта')	{
echo "<a href='themes.php?close=$theme_id' onclick='return showMessage();'>Закрыть тему</a>?";}
else{
echo "<a href='themes.php?open=$theme_id'>Открыть тему</a>";
}

А в вашем варианте вообще не хочет никак, ошибки синтаксиса выдает.

Link to comment
Share on other sites

  • 0

Неа, не работает) первый вариант вообще, второй опять же закрывает в любом случае, чтобы я не нажал.

так а на php проверку делаете?

в теге <form> передаете параметры на удаление, а в обработчике их ловите и делаете проверку, если условие удовлетворяет, то удаляете фоном, если нет, то перенаправляете на нужный урл.

к примеру как я реализовывал удаление:

форма


<form action="http://'.$_SERVER['HTTP_HOST'].'/admin/all_drop_photo/" method="post">
<input name="cat_id['.$category_view['cat_id'].']" type="checkbox" value="'.$category_view['cat_id'].'">
<input name="submit" type="submit" value="Удалить отмеченные подкатегории?" onclick="return showMessage()" />
</form>

htaccess для урл формы


RewriteRule ^admin/all_drop_photo/?$ admin/index.php?op=all_drop_photo

обработчик


///////////////////////////////////////////////
/// в самом вверху надо включить ob_start(); ///
///////////////////////////////////////////////
if(@$_GET['op'] == "all_drop_photo") {
$cat_id = $_POST['cat_id'];
if(isset($cat_id)) {
$query="DELETE FROM `category` WHERE `cat_id` = $cat_id";
$result = mysql_query($query);
if($result) {
ob_clean();
header('Location: http://'.$_SERVER['HTTP_HOST'].'/admin/all_photo/');
}
}
}

ну и js для переадресации в случае не удовлетворяющего требования


<script type = "text/javascript">
function showMessage() {
if (confirm("Вы уверены что хотите закрыть эту тему?")) {
alert("Тема закрыта!");
} else {
parent.location='http://site.ru/admin/';
alert("Тема не закрыта!");
}
}
</script>

  • Like 1
Link to comment
Share on other sites

  • 0

И все таки вернусь к старому вопросу, люди помогите пожалуйста, начинается рабочая комиссия, нужно чтобы все работало, а тут этот косяк и все вроде все готово, думал сделаю, но по итогу так и не работает ничего. Я насчет добавления сообщения в тему. Вот почему, когда я вывожу все сообщения по иду темы, он берет правельный ид, когда закрываю открываю тему его по прежнему видит и правильно все, когда удаляю тему, то тоже все нормально удаляется, а когда хочу добавить сообщения, то 0 выдает и хоть ты убей.

Код на первой странице, может все таки кто-нибудь увидит в чем там дело, ну очень горит http://forum.htmlbook.ru/index.php?showtopic=35188&view=findpost&p=261886

upd:отбой, проблема решена.

Edited by necro
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy