Page 1 of 1

foreach проблем

Posted: Sun May 30, 2010 1:26 pm
by PHP_Masters
Та проблема ми е следния:

записвам категорията на някоя новина( примерно ) с catid в полето за самата новина, и после като си изкарвам новината ( пак примерно ) искам да покажа в коя категория е та направих си един foreach така

Code: Select all

foreach($row as $v)
{
	$rs=mysql_query('SELECT * FROM cats WHERE id='.$v['catid']);
	$row2=mysql_fetch_assoc($rs);
	echo '<br/>'.$row2&#91;'name'&#93;;
&#125;
като $row e $row=mysql_fetch_assoc($rs); а $rs е

Code: Select all

$rs=mysql_query&#40;'SELECT * FROM sites WHERE id='.$id&#41;;
като $id=$_GET['id'];

и то ми показва

Code: Select all

Тестова категория




Тестова категория
с няколко празни полета и после я повтаря, как да го оправя

ето целия код

Code: Select all

<?php
session_start&#40;&#41;;
include 'conf.php';
$id=$_GET&#91;'id'&#93;;
$rs=mysql_query&#40;'SELECT * FROM sites WHERE id='.$id&#41;;
$row=mysql_fetch_assoc&#40;$rs&#41;;
echo $row&#91;'name'&#93;;
foreach&#40;$row as $v&#41;
&#123;
	$rs=mysql_query&#40;'SELECT * FROM cats WHERE id='.$v&#91;'catid'&#93;&#41;;
	$row2=mysql_fetch_assoc&#40;$rs&#41;;
	echo '<br/>'.$row2&#91;'name'&#93;;
&#125;

Posted: Sun May 30, 2010 1:45 pm
by F1r3Fl3x

Code: Select all

<?php
session_start&#40;&#41;;
include 'conf.php';
$id = $_GET&#91;'id'&#93;;
$rs = mysql_query&#40;'SELECT * FROM sites WHERE id='.$id&#41;;

while&#40; $row=mysql_fetch_assoc&#40;$rs&#41;; &#41;&#123;

   echo $row&#91;'name'&#93;;
   $rs=mysql_query&#40;'SELECT * FROM cats WHERE id='.$row&#91;'catid'&#93;&#41;;
   $row2=mysql_fetch_assoc&#40;$rs&#41;;
   echo '<br/>'.$row2&#91;'name'&#93;;
&#125;
	
Пробвай така и си защити малко заявката, така и идиот като мен може да ти хакне бд-то :)
Ако ползваш PHP5, прегледай http://php.net/pdo :)

Posted: Sun May 30, 2010 1:50 pm
by PHP_Masters
така работи, но и все пак търся решение на проблема

btw, аз старата заявка не виждам как ще се хакне

Posted: Sun May 30, 2010 2:02 pm
by Slavei
Ако се следва твоята логика:

Code: Select all

<?php 
session_start&#40;&#41;; 
include 'conf.php'; 
$id=$_GET&#91;'id'&#93;; 
$rs=mysql_query&#40;'SELECT * FROM sites WHERE id='.$id&#41;; 
while&#40;$row=mysql_fetch_assoc&#40;$rs&#41;&#41;&#123;
   $rs=mysql_query&#40;'SELECT * FROM cats WHERE id='.$row&#91;'catid'&#93;&#41;; 
   $row2=mysql_fetch_assoc&#40;$rs&#41;; 
   echo $row&#91;'name'&#93;.' - '.$row2&#91;'name'&#93;.'<br/>'; 
&#125;
Но не е добра идея да се пускат заявки към базата в цикъл. Можеш да го избегнеш с left join

Code: Select all

session_start&#40;&#41;; 
include &#40;'./conf.php'&#41;; 
$id = &#40;int&#41; &#40;isset&#40;$_GET&#91;'id'&#93;&#41; ? $_GET&#91;'id'&#93; &#58; 0&#41;;
$rs=mysql_query&#40;'
SELECT 
	`sites`.`name` as `nameSite`, 
	`cats`.`name` as `nameCategory`
FROM 
	`sites`
	left join `cats` on &#40;`catid` = `cats`.`id`&#41;
WHERE 
	`sites`.`id` = '.$id
&#41;; 
while&#40;$row=mysql_fetch_assoc&#40;$rs&#41;&#41;&#123;
   echo $row&#91;'nameSite'&#93;.' - '.$row&#91;'nameCategory'&#93;.'<br/>'; 
&#125;
Обърни внимание как взимам ИД-то на сайта от ГЕТ масива.