• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

вопрос по функциям

  • Автор темы Kauperwood
  • Дата начала
K

Kauperwood

Вообщем не пролема, а фокус))
есть код который у меня сам по себе работает
PHP:
<? 
session_start();
include ('config.php'); 
include ('functions.php');

$sql = mysql_query('SELECT * FROM content');
// выводим поля
while($record = mysql_fetch_array($sql))
{
print '<tr><td>'.$record['pageid'].': '.$record['pagetittle'].'</td>
<td>

<a href="editor.php?pageid='.$record['pageid'].'">Редактировать</a>
<a href="editor.php?pagedel='.$record['pageid'].'&delete=y">Удалить</a></td><br>';
}
$pagecontent = $_GET['pageid']; 
if(isset($pagecontent)) {

$sql = mysql_query("select * FROM content WHERE pageid='".$pagecontent."';"); //вставка контента в текстовую форму

while($record = mysql_fetch_array($sql)) {
$content = $record['pagecontent'];
}
}
else {
$content="";
}
if($_POST['save'])
$sql= mysql_query ("UPDATE content SET pagecontent = '".$_POST['mess']."' WHERE pageid='".$_SESSION['id']."';"); 

if($_GET['pagedel'])
{
$sql = mysql_query ("DELETE FROM content WHERE pageid='".$_SESSION['id']."';"); 
header('Refresh:1; URL=editor.php'); 
}
$_SESSION['id'] = $pagecontent; // id записи = ид сессии
?>

я в с функциями только начал знакомится, вообщем когда я этот код оборачиваю в функциию и вставляю в подключаемый файл с функциями,
<?php print $content ?> не работает, работа продолжается но не выполняются задачи этого кода так сказать. в чем тут может быть проблема?
 
1

1ive

В файл с функциями:
PHP:
function printcontent($pagecontent, $save, $pagedel, $mess) {
$sql = mysql_query('SELECT * FROM content');
// выводим поля
while($record = mysql_fetch_array($sql))
{
print '<tr><td>'.$record['pageid'].': '.$record['pagetittle'].'</td>
<td>

<a href="editor.php?pageid='.$record['pageid'].'">Редактировать</a>
<a href="editor.php?pagedel='.$record['pageid'].'&delete=y">Удалить</a></td><br>';
}

if(isset($pagecontent)) {

$sql = mysql_query("select * FROM content WHERE pageid='".$pagecontent."';"); //вставка контента в текстовую форму

while($record = mysql_fetch_array($sql)) {
$content = $record['pagecontent'];
}
}
else {
$content="";
}
if(isset($save))
$sql= mysql_query ("UPDATE content SET pagecontent = '".$mess."' WHERE pageid='".$_SESSION['id']."';"); 

if(isset($pagedel))
{
$sql = mysql_query ("DELETE FROM content WHERE pageid='".$_SESSION['id']."';"); 
header('Refresh:1; URL=editor.php'); 
}
$_SESSION['id'] = $pagecontent; // id записи = ид сессии

return $content;
}

В файл где должно быть "<?php print $content ?>":

PHP:
$pagecontent = $_GET['pageid']; 
if($_POST['save']) {$save = 1; $mess = $_POST['mess'];}
if($_GET['pagedel']) {$pagedel = 1;}
echo printcontent($pagecontent, $save, $pagedel, $mess);

Вроде должно работать. Не проверял. Сильно ничего не измнял, просто сделал так, чтобы до функции доходили переменные POST и GET
Может и есть что-то лишнее, пересмотрите, у меня не выдалось возможности
 
K

Kauperwood

работает
правда кидает предупреждения

Notice: Undefined index: save in /var/www/g/editor.php on line 42
Notice: Undefined index: pagedel in /var/www/g/editor.php on line 43
Notice: Undefined variable: save in /var/www/g/editor.php on line 44
Notice: Undefined variable: pagedel in /var/www/g/editor.php on line 44
Notice: Undefined variable: mess in /var/www/g/editor.php on line 44

тут
Код:
36 if(isset($pagecontent)) {
37
38	$sql = mysql_query("select * FROM content WHERE pageid='".$pagecontent."';"); //вставка контента в текстовую форму
39
40	while($record = mysql_fetch_array($sql)) {
41	$content = $record['pagecontent'];
42	}
43 }
44 else {
45	$content="";
46 }
 
1

1ive

Заменить на


PHP:
function printcontent($pagecontent, $save, $pagedel, $mess) {
$sql = mysql_query('SELECT * FROM content');

while($record = mysql_fetch_array($sql))
{
print '<tr><td>'.$record['pageid'].': '.$record['pagetittle'].'</td><td>
<a href="editor.php?pageid='.$record['pageid'].'">Редактировать</a>
<a href="editor.php?pagedel='.$record['pageid'].'&delete=y">Удалить</a></td><br>';
}

if(isset($pagecontent)) 
{
$sql = mysql_query("select * FROM content WHERE pageid='".$pagecontent."';"); //вставка контента в текстовую форму
while($record = mysql_fetch_array($sql)) 
{
$content = $record['pagecontent'];
}
}else{$content="";} 

if($save==1)
{
$sql= mysql_query ("UPDATE content SET pagecontent = '".$mess."' WHERE pageid='".$_SESSION['id']."';"); 
}

if($pagedel==1)
{
$sql = mysql_query ("DELETE FROM content WHERE pageid='".$_SESSION['id']."';"); 
header('Refresh:1; URL=editor.php'); 
}

$_SESSION['id'] = $pagecontent; // id записи = ид сессии
return $content;
}


PHP:
$pagecontent = $_GET['pageid']; 

if($_POST['save']) {$save = 1; $mess = $_POST['mess'];}else{$save = 0; $mess = 0;}
if($_GET['pagedel']) {$pagedel = 1;}else{$pagedel = 0;}

echo printcontent($pagecontent, $save, $pagedel, $mess);
 
K

Kauperwood

помогло, с Undefined variable
а с Undefined index 41 42 43 осталось, в зависимости того что выполняю пропадает, например если редактировать то пропадает по pageid
я так понял что это не критично
и еще, такие надстройки надо делать каждый раз когда GET и POST?
 
1

1ive

Просто нужно условия так расставить, чтобы и говнокод не вышел, и чтобы все переменные имели значение.
Всё дело в:

PHP:
$pagecontent = $_GET['pageid']; 
if($_POST['save']) {$save = 1; $mess = $_POST['mess'];}else{$save = 0; $mess = 0;}
if($_GET['pagedel']) {$pagedel = 1;}else{$pagedel = 0;}

echo printcontent($pagecontent, $save, $pagedel, $mess);
 
K

Kauperwood

это я уже понял, а какое отношение тут имеет Undefined index?
 
1

1ive

Вот еще немного поправил. 100% должно заработать без ошибок

PHP:
function printcontent($pagecontent, $save, $pagedel, $mess) {
$sql = mysql_query('SELECT * FROM content');

while($record = mysql_fetch_array($sql))
{
print '<tr><td>'.$record['pageid'].': '.$record['pagetittle'].'</td><td>
<a href="editor.php?pageid='.$record['pageid'].'">Редактировать</a>
<a href="editor.php?pagedel='.$record['pageid'].'&delete=y">Удалить</a></td><br>';
}

if($pagecontent==1) 
{
$sql = mysql_query("select * FROM content WHERE pageid='".$pagecontent."';"); //вставка контента в текстовую форму
while($record = mysql_fetch_array($sql)) 
{
$content = $record['pagecontent'];
}
}else{$content="";} 

if($save==1)
{
$sql= mysql_query ("UPDATE content SET pagecontent = '".$mess."' WHERE pageid='".$_SESSION['id']."';"); 
}

if($pagedel==1)
{
$sql = mysql_query ("DELETE FROM content WHERE pageid='".$_SESSION['id']."';"); 
header('Refresh:1; URL=editor.php'); 
}

$_SESSION['id'] = $pagecontent; // id записи = ид сессии
return $content;
}


PHP:
$save=0; $pagedel=0; $mess=0; $pagecontent=0;

if($_POST['save']) {$save = 1; $mess = $_POST['mess'];}
if($_GET['pagedel']) {$pagedel = 1;}
if($_GET['pageid']) {$pagecontent = $_GET['pageid']; }

echo printcontent($pagecontent, $save, $pagedel, $mess);


Добавлено:
это я уже понял, а какое отношение тут имеет Undefined index?

просто в
printcontent($pagecontent, $save, $pagedel, $mess);
все переменные должны иметь значение, а у нас до этого условиями некоторые переменные совсем не задавались.
 
K

Kauperwood

это да, но реально на эти три предупреждения Undefined index это не повлияло и они остались. То есть они продолжают отображаться пока переменная равна 0 получается?
 
1

1ive

Они продолжают появляться пока значение переменной совсем не определено. Если она равна нулю, предупреждение не появится
 
K

Kauperwood

вообщем пришлось все переделать, надо юзать isset и ничего не надо дописывать, разве что по необходимости дать задавать любое значение через else

вот так 200% пашет
PHP:
function get(){

if(isset($_GET['pageid'])) {
$sql = mysql_query("select * FROM content WHERE pageid='".$_GET['pageid']."';"); //вставка контента в текстовую форму
while($record = mysql_fetch_array($sql)) {
$content = $record['pagecontent'];
}
}
else {
$content="";
$_GET['pageid']=0; // определяем переменную
}
if(isset($_POST['save'])) {

if($_POST['save']) { 
$sql= mysql_query ("UPDATE content SET pagecontent = '".$_POST['mess']."' WHERE pageid='".$_SESSION['id']."';");
} 
}

if(isset($_GET['pagedel']))
{
$sql = mysql_query ("DELETE FROM content WHERE pageid='".$_SESSION['id']."';"); 
header('Refresh:1; URL=editor.php'); 
}

$_SESSION['id'] = $_GET['pageid']; // id записи = ид сессии
if(isset($content) // не помешает))
return $content;
}
?>

PHP:
print get();

правда пришлось потом разбить на кучу "маленьких" функций)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!