[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Профи, думаю это для вас!
Miha
После присваевания переменной значения другой переменной, и её удаления, значения первой переменной тоже удаляется???
Если я правельно пониямаю, то каким образо оставить значение в первой переменной?
Например.
--------------
Вытаскиваем из БД какое-нить поле...
$p = $f[name];
mysql_query("DELETE FROM Ludi WHERE name="...) - Удалили из БД запись которую положили в $p
echo $p - (Ни-на нет, а нужно)
--------------
Подскажите пожалуста, ведь полюбэ завсегдаки знают.



Спустя 9 минут, 4 секунды (30.09.2008 - 21:51) sergeiss написал(а):
Весь код в студию, плз, который между первой и последней строчками!

И для начала поставь name в кавычки: $p=$f['name'];

И не повредит сделать вывод переменной сразу же после присвоения ей значения.

Спустя 4 минуты, 5 секунд (30.09.2008 - 21:55) vasa_c написал(а):
хм. У вас удаляется переменная $p после удаления записи из базы? smile.gif

Спустя 42 минуты, 48 секунд (30.09.2008 - 22:38) Miha написал(а):
Суть такова:
-Когда пользователь удаляет запись из БД, то после удаления емю должно выдоваться сообщение что он удаляет.

if (isset($_POST["delgroupbut"]))
{
$id=$_REQUEST['deletegroupsel']; - Берём значение id из селекта
$q=mysql_query("SELECT name FROM groups WHERE id=".$id); - находим по id имя
$f=mysql_fetch_array($q);
$text=$f[name]; - Присваеваем имя в переменную $text
mysql_query("DELETE FROM groups WHERE id=".$id); - удаляем запись из БД
$result="Группа ".$text." успешно удалена!<br> - формируем сообщение
<meta http-equiv='Refresh' content='1; URL=index.php?go=0&p=groupform'>";
}
В итоге мне выводит "Группа успешно удалена!", а должен "Группа (имя группы) успешно удалена!"
Я поразному пробовал,
если напримр закоментировать строку "mysql_query("DELETE FROM groups WHERE id=".$id);"
то работает правельно, но мне нужно чтоб запись удалялась.

Спустя 16 минут, 49 секунд (30.09.2008 - 22:54) Ghost написал(а):
Код
$text=$f[name];
print 'text="'.$text.'"<br>';
mysql_query("DELETE FROM groups WHERE id=".$id);
print 'text="'.$text.'"<br>';

замени соотв кусок вот на это и выложи результат

Спустя 1 минута, 11 секунд (30.09.2008 - 22:56) zash написал(а):
в принципе ошибку почему переменная не выводится я не увидел, разве что ты смотриш результат уже после refresh-а. Или еще одна причина - может в этой переменной и не было ничего, то есть попробуй вывести переменную сразу после присваивания и убрать refresh.
Должно получиться что-то такое:
Цитата(Miha @ 30.9.2008, 22:38) [snapback]49785[/snapback]
if (isset($_POST["delgroupbut"])){
$id=(int)$_REQUEST['deletegroupsel'];
$q=mysql_query("SELECT name FROM groups WHERE id=".$id);
$f=mysql_fetch_array($q);
print_r($f);
$text=$f['name'];
die($text);
mysql_query("DELETE FROM groups WHERE id=".$id); - удаляем запись из БД
$result="Группа ".$text." успешно удалена!<br>
<meta http-equiv='Refresh' content='1; URL=index.php?go=0&p=groupform'>";
}

Так в принципе... Если die() выводит правильно - дело в refreshe.

Спустя 46 минут, 49 секунд (30.09.2008 - 23:42) Miha написал(а):
Вообщем в переменной $text всё есть, только вот когда помещаю в $result, там всё кроме $text.
Короче вот ещё больше кусок кода:
Код
//------MESSAGE PROGRAM
function Run($go,$p)
{
if (isset($go))
    {
    switch($p)
        {
        default:
        return "Main";
        break;    
                
        case "groupform":
        return AP_GroupsForm("groups");
        break;
        }
    }
//---------ADD GROUP    
if (isset($_POST["addgroupbut"]))
{
    $text=$_REQUEST['addgrouptext'];
    if($text=="")
     {
        $result="Ошибка!<br>Незаполнено поле Группа ";
     }
    else
     {
         mysql_query("INSERT INTO groups (name) values('".$text."')");
        unset($_REQUEST['addgrouptext']);
     }
    $id=mysql_insert_id();
    $q=mysql_query("SELECT * FROM groups WHERE id=".$id);
    $f=mysql_fetch_array($q);
    $result="Группа ".$f[name]." успешно добавлена!<br>
    <meta http-equiv='Refresh' content='1; URL=index.php?go=0&p=groupform'>";
}
//---------DELETE GROUP    
if (isset($_POST["delgroupbut"]))
{
    $id=$_REQUEST['deletegroupsel'];
    $q=mysql_query("SELECT * FROM groups WHERE id=".$id);
    $f=mysql_fetch_array($q);
    $text=$f['name'];
    mysql_query("DELETE FROM groups WHERE id=".$id);
  //die($text); - Если это раскоментировать, то он выведет правельный результат. ЧТО ПРОИСХОДИТ НЕПОЙМУ!?
  //echo $text; - тоже работает, а вот если ложим в $result, то нет.
    $result=$text;
    /*$result="Группа ".$text." успешно удалена!<br>
    <meta http-equiv='Refresh' content='1; URL=index.php?go=0&p=groupform'>";*/
}
return $result;
}


Спустя 10 минут, 59 секунд (30.09.2008 - 23:53) Miha написал(а):
Ничё непомогает я и рефреш убрал!

Спустя 8 часов, 52 минуты, 55 секунд (1.10.2008 - 08:46) sergeiss написал(а):
Ты так и не сделал то, что я уже говорил "И для начала поставь name в кавычки: $p=$f['name'];"
Ты этого так и не сделал. А проблема тут сидит. Или "религия не позволяет" это сделать? smile.gif

Спустя 54 минуты, 11 секунд (1.10.2008 - 09:40) Miha написал(а):
Всмысле незделал???
-Ковычки ставил
-Переменную выводил в разных местах (результат показывает, но как только я переменную ложу в $result, то в $result её нет, т.е. возвращается "Группа успешно удалена", а мне надо шоб "Группа".$text."успешно удалена")
-Код приводил

Если та имеешь ввиду привести весь код, тогда вот:
Файл "Elements.php"
Код
<link href="../lib/styles.css" rel="stylesheet" type="text/css">

<?php
Error_Reporting(E_ALL & ~E_NOTICE);
//-----VERTIKAL MENU START
function VerticalMenu($TGroup,$TPages)
{
include_once("lib/connectSQL.php");
$s = new mysql;
$s->connect();
$q=mysql_query("SELECT * FROM ".$TGroup." ORDER BY id");
$blok[]="<table width=200 border=0 class=VerticalGroupMenu cellpadding=0 cellspacing=0>";
for ($i=0; $i<mysql_num_rows($q); $i++)
    {
    $f=mysql_fetch_array($q);
    $blok[]="<tr><td align=center height=25 class=VerticalGroupMenuHeader>".$f[name]."</td></tr>
    <tr><td><table width=100% border=0 cellpadding=2 cellspacing=0>".ReadMenu($f[id],$TPages)."</table><br>"
    ."</td></tr>";
    }
$blok[]="</table>";

foreach($blok as $k)
    {
    $result .= $k;
    }
return $result;    
}
function ReadMenu($num,$table)
{
$wq=mysql_query("SELECT * FROM ".$table." WHERE idgroup=".$num." ORDER BY id");
for ($i=0; $i<mysql_num_rows($wq); $i++)
    {
    $wf=mysql_fetch_array($wq);
    $res .="<tr><td align=left height=20 class=VerticalElemMenu><a href=#>".$wf[Name]."</a></tr></td>";
    }
return $res;    
}
//-----VERTIKAL MENU END
//-----NEWS START
function NewsBlok($TNews,$col=3)
{
$q=mysql_query("SELECT * FROM ".$TNews." ORDER BY id LIMIT ".$col);
$blok[]="<table width=200 border=0 class=VerticalGroupMenu cellpadding=0 cellspacing=0>
<tr><td align=center height=25 class=VerticalGroupMenuHeader>НОВОСТИ</td></tr>";
for ($i=0; $i<mysql_num_rows($q); $i++)
    {
    $f=mysql_fetch_array($q);
    $blok[]="<tr><td><table width=100% class=RightPanel border=0 cellpadding=2 cellspacing=2><tr><td>".$f[title]."<hr></td></tr></table></tr></td>";
    }
$blok[]="<tr><td height=20 class=RightPanelBottom> </td></tr></table>";    
foreach($blok as $k)
    {
    $result .= $k;
    }
return $result;
}
//-----NEWS END
//-----ADMIN PANEL
function AdminPanel()
{
echo "<p><table width=100% bgcolor=#999999 cellpadding=1 cellspacing=1>
<tr><td>

<ul id=nav>
  <li><a href=index.php>Меню</a>
  <ul>
     <li><a href=index.php?go=0&p=groupform>Группы</a></li>
     <li><a href=#null>Страницы</a></li>
  </ul>
  </li>
</ul>

</td></tr></table></p>";
}

//------MESSAGE PROGRAM
function Run($go,$p)
{
if (isset($go))
    {
    switch($p)
        {
        default:
        return "Main";
        break;    
                
        case "groupform":
        return AP_GroupsForm("groups");
        break;
        }
    }
//---------ADD GROUP    
if (isset($_POST["addgroupbut"]))
{
    $text=$_REQUEST['addgrouptext'];
    if($text=="")
     {
        $result="Ошибка!<br>Незаполнено поле Группа ";
     }
    else
     {
         mysql_query("INSERT INTO groups (name) values('".$text."')");
        unset($_REQUEST['addgrouptext']);
     }
    $id=mysql_insert_id();
    $q=mysql_query("SELECT * FROM groups WHERE id=".$id);
    $f=mysql_fetch_array($q);
    $result="Группа ".$f[name]." успешно добавлена!<br>
    <meta http-equiv='Refresh' content='1; URL=index.php?go=0&p=groupform'>";
}
//---------DELETE GROUP    
if (isset($_POST["delgroupbut"]))
{
    
    $id=$_REQUEST['deletegroupsel'];
    $q=mysql_query("SELECT * FROM groups WHERE id=".$id);
    $f=mysql_fetch_array($q);
    $text=$f['name'];
    mysql_query("DELETE FROM groups WHERE id=".$id);
    $result="Группа ".$text." успешно удалена!";
/*    $result="Группа ".$text." успешно удалена!<br>
    <script>location.href='index.php?go=0&p=groupform'</script>";*/
}
return $result;
}

//---GROUP FORM [Admin panel]
function AP_GroupsForm($TGroups)
{
$q=mysql_query("SELECT * FROM ".$TGroups." ORDER BY id");
for ($i=0; $i<mysql_num_rows($q); $i++)
    {
    $f=mysql_fetch_array($q);
    $groups.="<option value=$f[id] selected>".$f[name]."</option>";
    }
$form="<table width=100% align=left valign=top border=0>
<tr>
<td align=left class=PA_HEADER>
Панель администрирования -> Группы
</td>
</tr>
<tr>
<td class=PA_MAIN>
<form name=AddGroupForm method=post action=index.php><br>
<p> Добавить группу:<input name=addgrouptext type=text size=40 /> <input name=addgroupbut type=submit value=Добавить /></p>
<p> Удалить группу:  <select name=deletegroupsel>".$groups."</select> <input name=delgroupbut type=submit value=Удалить /></p>
</form>
</td>
</tr>
</table>";
return $form;
}
?>


В файле index.php все эти функции вызываются и подстовляются за место тегов содержащихся в файле template.html.
Вообщем соего рода шаблонизатор.

Спустя 7 минут, 57 секунд (1.10.2008 - 09:48) sergeiss написал(а):
ОК,

Во-первых, у тебя далеко не везде name заключено в кавычки (там, где оно как индекс массива идет).

А во-вторых, сразу же после строки

$q=mysql_query("SELECT * FROM groups WHERE id=".$id);

введи контрольную распечатку

echo "Row num ".mysql_num_rows( $q )."<br>";

Возможно, что у тебя просто нету данных, а ты "типа успешно" удалил.

Кстати, и после удаления не повредит проверить, было ли что-то на самом деле удалено (mysql_affected_rows), или это были только твои благие намерения smile.gif

Спустя 48 минут, 8 секунд (1.10.2008 - 10:37) Miha написал(а):
sergeiss
У меня name в кавычках там где нужно(там где трабл), а больше мне и ненадо, т.к. проблем нигде кроме как здесь нет.
>введи контрольную распечатку
она ненужна, т.к. в таблице записи существуют(это видно на странице)
После удаления записи удаляется выбранная группа меню, все остальные группы меню остаются.

>Кстати, и после удаления не повредит проверить, было ли что-то на самом деле удалено (mysql_affected_rows), или это были только твои благие намерения

Данные удаляются из база, я это и в phpmyadmin и на странице вижу.

Вся проблема здесь:

if (isset($_POST["delgroupbut"]))
{

$id=$_REQUEST['deletegroupsel'];
$q=mysql_query("SELECT * FROM groups WHERE id=".$id);
$f=mysql_fetch_array($q);
$text=$f['name'];
mysql_query("DELETE FROM groups WHERE id=".$id);
$result="Группа ".$text." успешно удалена!";
}

Если вместо " $result="Группа ".$text." успешно удалена!";" подставить просто "echo $text;", то он мне выведет имя удаляемой группы, но мне надо всё это в $result пихать, чтоб потом возвротить это $result.


Да и кстати если же вообще удалить запрос на удаление "mysql_query("DELETE FROM groups WHERE id=".$id);", то тогда $text помещается в $result, и $result все выводит.
Я ВООООБЩЕ НИХ-НЕ непоиму, раньше у меня трудностей таких с PHP небыло!

Спустя 1 час, 27 минут, 43 секунды (1.10.2008 - 12:04) sergeiss написал(а):
Я вот что не понял: почему ты считаешь, что контрольная распечатка не нужна??? Ежели проблемы возникли, то контрольные распечатки как раз очень хорошо помогаю протрассировать, определить, на каком этапе происходит сбой.
И что бы ты там не видел через phpmyadmin, проблема происходит именно во время работы скрипта, а не по его окончании.
И ты НЕ можешь сейчас сказать:
- сколько строк было выбрано через Select,
- что там содержится, и
- сколько было затем строк удалено.

Ну так сделай эти самые контрльные распечатки!!! Убедись, что всё идет, как должно идти. А может, у тебя какая-то "левая" строка есть в БД, содержащая пустую строку в name?

Кстати, когда вводишь name в БД, то там тоже надо бы поставить его в кавычки. Только не в простые, а в "обратные": `name` (находятся на той же кнопке, что и буква Ё, но в английской раскладке). Возможно, что у тебя тут тоже "засада".

Спустя 3 часа, 54 минуты, 54 секунды (1.10.2008 - 15:59) Miha написал(а):
Цитата
Я вот что не понял: почему ты считаешь, что контрольная распечатка не нужна??? Ежели проблемы возникли, то контрольные распечатки как раз очень хорошо помогаю протрассировать, определить, на каком этапе происходит сбой.

Яже контролирую эту переменную, контролирую средством echo и die(). И результат положительный.
То что я делаю в скрипте - это стандартная, отработанная процедура. Я всегда и везде придерживаюсь своего формирования синтаксиса, и это не проблема, т.к. код либо работает так как нужно либо нет.
Запросы у меня работают, и работают правельно. (даже так как ты сказал)
Проблема в другом.
В переменной $text есть значение, даже после завершения запроса БД
Но присвоить переменной $result значение $text неполучается.

Переменная $result это возвращая переменная функции Run. И в зависимости от условий выполняющихся в это функции в переменную $result ложится значения.

P.S. Что у меня в конкретном случае неполучается.

Спустя 4 часа, 38 минут, 3 секунды (1.10.2008 - 20:37) CaXaP написал(а):
Если уж подозреваете, что в ошибках вашего кода виноваты гномики, и даже нашли ключевую строку - попробуйте разбить её на несколько, переменные разбейте на несколько и соедините их конкатенацией, перенесите присвоение в другое место, переприсвойте переменные где-нибудь. В общем попробуйте всякие варианты танцев с бубном - это поможет выявить ошибку - потом всё лишнее удалите (резервные копии 4ever).

Спустя 1 день, 4 часа, 50 минут, 24 секунды (3.10.2008 - 01:28) bret написал(а):
Miha
Встречный вопрос - а группы добавляются нормально7

Спустя 12 часов, 19 минут, 30 секунд (3.10.2008 - 13:47) Miha написал(а):
Всё и добовляется и удаляется нормально, просто нужно вывести сообщение о том что удалилось, да и интересно с чем этот баг связан.

Спустя 1 час, 20 минут, 13 секунд (3.10.2008 - 15:07) twin написал(а):
Сдается мне, что Вы пытаетесь получить значение $id из массива $_REQUEST внутри тела функции. А это вряд ли возможно. Попробуйте сделать так:

Код
$id=$_REQUEST['deletegroupsel'];

function Run($go,$p)
{
global $id;
.
.
.
и должно быть щастье... Впрочем это касается и других переменных.

Спустя 5 часов, 41 минута, 33 секунды (3.10.2008 - 20:49) Sylex написал(а):
twin, $_REQUEST - глобальный массив, и виден везде.

Miha, попробуйте использовать вместо $result - $res например...

но вообще по идее - вывод везде нужных переменных - очень важно... Я сомневаюсь, что конструкция:

Код
...
mysql_query("DELETE FROM groups WHERE id=".$id); - удаляем запись из БД
echo $text . "<br>";
$result="Группа ".$text." успешно удалена!<br>";
die($result);


не поможет вам в этом разобраться:)

Спустя 14 минут, 3 секунды (3.10.2008 - 21:03) Miha написал(а):
ёпть.
Код
function Run($go,$p)
{
...
...
//---------DELETE GROUP    
if (isset($_POST["delgroupbut"]))
{
    $id=$_REQUEST['deletegroupsel'];
    $q=mysql_query("SELECT * FROM groups WHERE id=".$id);
    $f=mysql_fetch_array($q);
    $text=$f['name'];
    mysql_query("DELETE FROM groups WHERE id=".$id);
    $res="Группа ".$text." успешно удалена!";
    //die($res);    
}
return $res;
}

В переменной $res всё есть, т.е. если удаляем группу Тест, то через die($res) выведет "Группа Тест успешно удалена!", но если возвращать в функции - "return $res", то выводит "Группа успешно удалена!", как будто переменную $text невидно.

Спустя 6 минут, 3 секунды (3.10.2008 - 21:09) Sylex написал(а):
проведите эксперимент с выводом переменной $res !

Спустя 35 минут, 10 секунд (3.10.2008 - 21:44) twin написал(а):
Вот зря Вы меня не слушаете. С REQUEST я конечно поторопился, но ноги оттуда ростут. Дело не в том, что переменная не записывается, а в том, что запрос не выполняется. Ошибка вот тут:

$q=mysql_query("SELECT * FROM groups WHERE id=".$id);

Для того, что бы так не мучаться, используйте такую штуку (при отладке)

$q=mysql_query("SELECT * FROM groups WHERE id=".$id) or die ('Error: 1' . mysql_error());
и все будет ясно.

Вот так попробуйте:
$q=mysql_query("SELECT * FROM groups WHERE id=".$id."");

Я специально проверил - все работает.

Спустя 6 секунд (3.10.2008 - 21:44) Miha написал(а):
Балин!!!
Да работает запрос, и результат есть. В переменную $res всё ложится, только не возращается.
как-то функция Run сама коряво работает, результ не тот возвращает.
Цитата
Вот так попробуйте:
$q=mysql_query("SELECT * FROM groups WHERE id=".$id."");
Я специально проверил - все работает.

А ты мой вариант проверял. Он тоже работать будет.
Цитата
проведите эксперимент с выводом переменной $res !

Так и сделал сразу! Без изменений. Я и глобальными и $res и $text делал, всё равно неработает.
Die всё выводит, а return неработает.
------------------------
Можно на ты.

Спустя 12 минут, 8 секунд (3.10.2008 - 21:56) twin написал(а):
Я твой вариант проверил - шиш. Я же не просто написал.

A вот это сам попробуй:
Код
function Run(){
  $id = $_REQUEST['id'];

    $q=mysql_query("SELECT * FROM groups WHERE id=".$id."") or die ('Error: 1' . mysql_error());
    $f=mysql_fetch_array($q);
    $text=$f['name'];
    mysql_query("DELETE FROM groups WHERE id='".$id."") or die ('Error: 2' . mysql_error());
    $result="Группа ".$text." успешно удалена!";

return $result;
}
echo Run();

?>
<a href="?id=1">hhhhhh</a>


ЗЫ исправил, у меня таблица другая.

Спустя 39 минут, 51 секунда (3.10.2008 - 22:36) Miha написал(а):
Сделал как ты написал. Неработает.
Есть разница между твоим кодом и мойм.

У меня функция Run выполняется в файле index.php, но её описание в файле elements.php,
Структура такова:
function Run(p1,p2)
{
Swith()
{
условие
$res

условие
$res

условие
$res

...
}
if(условие){$res=...}
if(условие){$res=...}
if(условие){$res=...}

return $res;
}
Короче $res одна переменная на все условия... мож я чёт непонимаю.

Спустя 16 минут, 50 секунд (3.10.2008 - 22:53) twin написал(а):
Трудно судить по обрывкам. А вот в этом месте:

$res

...
}

она не перезаписывается? И не совсем понятно, зачем ее вообще из свича вытаскивать, значит есть что-то еще там?

Спустя 8 часов, 12 минут, 58 секунд (4.10.2008 - 07:06) Sylex написал(а):
покажи как и где ты вызываешь эту функцию

Спустя 10 часов, 28 минут, 51 секунда (4.10.2008 - 17:35) Miha написал(а):
Код
<?php
include_once("lib/elements.php");
AdminPanel();
$content=fopen("lib/template.html", "rt");
while (!feof ($content))
{
$text=fgets($content, 255);
$text=str_replace(":VERTMENU:",VerticalMenu("groups","pages"),$text);
$text=str_replace(":NEWS:",NewsBlok("news"),$text);
[b]$text=str_replace(":CONTENT:",Run($_GET["go"],$_GET["p"]),$text);[/b]
echo $text;
}
?>

Спустя 3 дня, 13 часов, 40 минут, 5 секунд (8.10.2008 - 07:15) Sylex написал(а):
не пойму... зачем вызывать функцию в цикле, с теми же параметрами? Один и тот же результат она вернет.. Сделай сначала так:

Код
$res_run = Run($_GET["go"], $_GET["p"]);
while (!feof ($content))
{
$text=fgets($content, 255);
$text=str_replace(":VERTMENU:",VerticalMenu("groups","pages"),$text);
$text=str_replace(":NEWS:",NewsBlok("news"),$text);
$text=str_replace(":CONTENT:", $res_run, $text);
echo $text;
}


С другими - возможно аналогично.
распечатай $res перед return в функции, а затем die($res_run);

равны?


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.