muaythai075
@muaythai075
Дизайнер

Одинаковые переменные, как использовать?

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

Вот например тут вначале есть $result и потом тоже она встречается только уже для другой функции:
<?php include("blocks/db.php");
if (isset($_GET['cat'])) {$cat = $_GET['cat'];}
if (!isset ($cat)) {$cat = 1;}

$result = mysql_query("SELECT * FROM category WHERE id='$cat'",$db);

if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору info@site.ru. <br>Код ошибки:</p>";
exit(mysql_error());
}

if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);
}

else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей</p>";	
exit();
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="style.css" rel="stylesheet" type="text/css">
<meta name="description" content="<?php echo $myrow["meta_d"] ?>">
<meta name="keywords" content="<?php echo $myrow["meta_k"] ?>">
<title><?php echo "Рубрика - $myrow[title]" ?></title>
</head>

<body>
<table class="main_table" width="690" border="0" align="center">
  <?php include("blocks/header.php"); ?>
  <tr>
    <td valign="top"><table width="100%" border="0">
      <tr>
       <?php include("blocks/leftnav.php"); ?>
        <td valign="top">
        
<?php 
		
echo $myrow["text"];
		
$result = mysql_query("SELECT id,title,`desc`,date,author,mini_img,view FROM data WHERE cat='$cat'", $db);

if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору info@site.ru. <br>Код ошибки:</p>";
exit(mysql_error());
}

if (mysql_num_rows($result) > 0)
{
	$myrow = mysql_fetch_array($result);

	do
	{
	printf ("<table border='0'>
            			<tr>
            				<td>
								<p><img align='left' src='%s'><a href='view_post.php?id=%s'>%s</a></p>
								<p>Дата добавления: %s</p>
								<p>Автор: %s</p>
							</td>
            			</tr>
						
            			<tr>
              				<td>%s<br><p>Просмотров: %s</p></td>
            			</tr>
          			</table><br><br>", $myrow['mini_img'], $myrow['id'], $myrow['title'], $myrow['date'], $myrow['author'], $myrow['desc'], $myrow['view']);
	}
	while ($myrow = mysql_fetch_array($result));
}

else
{
	echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей</p>";	
	exit();
}
		
?>
        
        
        
        </td>
      </tr>
    </table></td>
  </tr>
  <?php include("blocks/footer.php"); ?>
</table>
</body>
</html>


А вот тут пришлось вторую делать $result3 :

<?php include("blocks/db.php");
if (isset($_GET['cat'])) {$cat = $_GET['cat'];}
if (!isset ($cat)) {$cat = 1;}

$result = mysql_query("SELECT * FROM category WHERE id='$cat'",$db);

if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору info@site.ru. <br>Код ошибки:</p>";
exit(mysql_error());
}

if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);
}

else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей</p>";	
exit();
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="style.css" rel="stylesheet" type="text/css">
<meta name="description" content="<?php echo $myrow["meta_d"] ?>">
<meta name="keywords" content="<?php echo $myrow["meta_k"] ?>">
<title><?php echo "Рубрика - $myrow[title]" ?></title>
</head>

<body>
<table class="main_table" width="690" border="0" align="center">
  <?php include("blocks/header.php"); ?>
  <tr>
    <td valign="top"><table width="100%" border="0">
      <tr>
       <?php include("blocks/leftnav.php"); ?>
        <td valign="top">
        
<?php 
		
echo $myrow["text"];
		
$result = mysql_query("SELECT id,title,`desc`,date,author,mini_img,view FROM data WHERE cat='$cat'", $db);

if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору info@site.ru. <br>Код ошибки:</p>";
exit(mysql_error());
}

if (mysql_num_rows($result) > 0)
{
	$myrow = mysql_fetch_array($result);

	do
	{
	printf ("<table border='0'>
            			<tr>
            				<td>
								<p><img align='left' src='%s'><a href='view_post.php?id=%s'>%s</a></p>
								<p>Дата добавления: %s</p>
								<p>Автор: %s</p>
							</td>
            			</tr>
						
            			<tr>
              				<td>%s<br><p>Просмотров: %s</p></td>
            			</tr>
          			</table><br><br>", $myrow['mini_img'], $myrow['id'], $myrow['title'], $myrow['date'], $myrow['author'], $myrow['desc'], $myrow['view']);
	}
	while ($myrow = mysql_fetch_array($result));
}

else
{
	echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей</p>";	
	exit();
}
		
?>
        
        
        
        </td>
      </tr>
    </table></td>
  </tr>
  <?php include("blocks/footer.php"); ?>
</table>
</body>
</html>
  • Вопрос задан
  • 351 просмотр
Решения вопроса 1
@danforth
В вашем случае - просто отпала необходимость в переменной.
Почитайте про области видимости в PHP. Их две: глобальная и локальная. Те, что в контексте функции - локальные. Вне - глобальные. При необходимости сделать переменную в функции глобальной - используйте global.
Также, в начале есть такой код:
if (isset($_GET['cat'])) {$cat = $_GET['cat'];}
if (!isset ($cat)) {$cat = 1;}
Используйте if - else.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Читайте про область видимости (scope).

В некоторых случаях, если вы УВЕРЕНЫ, что переменная больше не понадобится, можно ее повторно использовать для каких-то других целей. Но лучше не злоупотреблять этим, т.к. читать и отлаживать такой код намного сложнее.

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

UPD: Это уже не по теме вашего вопроса, но так делать нельзя
<?php include("blocks/db.php");
if (isset($_GET['cat'])) {$cat = $_GET['cat'];}
if (!isset ($cat)) {$cat = 1;}

$result = mysql_query("SELECT * FROM category WHERE id='$cat'",$db);

Потому что, если кто-то сделает вот такой get запрос
site.ru?cat=0%27%3B+drop+table+category%3B--
То в базу пойдет такй запрос
SELECT * FROM category WHERE id='0';drop table category;--'
Или другой, ворующий пароли, например.

Лучше делать как-то так:
$cat = filter_input(INPUT_GET, "cat", FILTER_SANITIZE_NUMBER_INT);
if (empty($cat)) $cat = 1;

Это будет гарантировать, что из $_GET['cat'] будет извлечено только число или null.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы