2011-10-03 1 views
-1

은 내가 성가신 너희들이야 경우 정말 미안 해요 꽤 URL을 .htacess하지만이 트릭퍼머는

내가 워드 프레스 스타일의 필요를 .htacess에 관해서 내 마지막 질문입니다 '꽤 영구 링크'

그러나 그것은 나에게 너무 혼란 스럽다.

내가 필요,이 URL http://test.com/?page=test&ID=1

어떻게 http://test.com/test/NAMEFROMDATABASE 할 수? 나는 $_GET['ID']을 사용하여 ID=1을 얻는 방법을 알고 있습니다. 그러나 어떻게 URL에서 데이터베이스의 값을 넣고 읽습니까?

+0

'http : // test.com/test/1/NAMEFROMDATABASE'하지 마시고 URL에 ID가 있으므로 SO와 같이 입력하십시오. 이렇게하면 다음 두 가지 작업을 수행하는 데 도움이됩니다. 1. 필요한 경우 URL을 짧게 만듭니다. 2. 특정 레코드의 조회를 쉽고 _fast_하게 만듭니다. – Shef

+0

나는 현재 그 일을 해요 : test.com/djs?djID=1 기존 이메일의 URL를 test.com?page=djs&djID=1 입니다하지만 freindly SEO 아니에요, 그것은 같은 DJ가 여러 결과를 야기 페이지, 플러스 나는 사용자가 임의의 숫자가 아니라 dj 이름이 아닌 dj의 이름을 입력하기를 원합니다. –

+0

해당 URL을'test.com/djs/1'로 쉽게 변경할 수 있습니다. – Shef

답변

5

http://test.com/test/NAMEFROMDATABASE에서 직접 $ _GET [ 'ID']에 의해 ID 값을 가져올 수 없습니다.

아래의 논리에 따라 ID를 얻을 수 있습니다.

  1. 링크를 카테고리 이름으로 생성하십시오. 예를 들어 카테고리 노트북을 사용중인 경우 http://test.com/category/CATNAME

  2. htaccess에 다시 쓰 기 코드를 작성하십시오. RewriteRule ^category/(.*)$ categories\.php?CNAME=$2&%{QUERY_STRING} [L]

  3. PHP 코드의 카테고리 이름에서 카테고리 ID를 가져옵니다. $catName=$_GET['CNAME']

또는

  1. 카테고리 이름과 카테고리 ID로 링크를 만들 수 있습니다. 예를 들어 카테고리 노트북을 사용하는 경우 http://test.com/category/CATNAME-ID-CATID
  2. 과 같은 링크를 작성하십시오. htaccess에 다시 쓰 기 코드를 작성하십시오. RewriteRule ^category/(.*)-ID-([0-9]+)$ categories\.php?ID=$2&%{QUERY_STRING} [L]
  3. PHP 코드에서 직접 카테고리 ID를 가져옵니다. $catID= $_GET['ID']
+0

나를 위해 RewriteRule^djs /(.*)$ 인덱스 \ .php? page = djs & djID = $ 1 & % {QUERY_STRING} [L]은 test.com을 변환합니다. /index.php?page=djs&djID=username to test.com/djs/username, $ _GET [ 'djID']는 아무런 문제없이 'username'을 반환합니다. –

+0

정말 고마워요, 저에게 효과가없는 것은 $ 2 뿐이므로, $ 1로 바꾸면 완벽하게 작동합니다. –

1

어떻게? 나는 $ _GET [ 'ID']를 사용하여 ID = 1을 얻는 방법을 알고 있지만, URL의 데이터베이스 값을 어떻게 읽어야합니까?

은 당신과 같이 데이터베이스에서 값을 얻을 :

$id = mysql_real_escape_string($_GET['id']); 
$sql = "SELECT folder, urlname FROM urls WHERE id = '$id' "; 
// don't forget to single quote '$id'  ^^or you'll get errors 
// and even worse mysql_real_escape_string() will not protect you. 
if ($result = mysql_query($sql)) { 
    $row = mysql_fetch_row($result); 
    $pagename = $row['urlname']; 
    $folder = $row['folder']; 
} 

당신이 id 알고있는 경우는 모든 값과 intval을 위해 작동하기 때문에 나는 항상 mysql_real_escape_string()를 사용하는 것이 좋습니다 $id = intval($_GET['id']);
당신은 또한 사용할 수있는 정수 정수에서만 작동합니다.
SQL에서는 숫자를 인용하는 것이 결코 문제가되지 않으므로 항상 모든 것을 인용하는 습관을들이십시오.
그런 식으로 실수 할 수 없습니다. 그는 SQL 인젝션 보안 구멍이기 때문에

당신은 결코

$sql = "SELECT urlname FROM urls WHERE id = '{$_GET['id']}' "; 

할 수 없다.

참조 :
How does the SQL injection from the "Bobby Tables" XKCD comic work?
http://php.net/manual/en/function.mysql-query.php
http://php.net/manual/en/function.mysql-fetch-row.php
http://php.net/manual/en/function.mysql-connect.php
http://php.net/manual/en/function.mysql-close.php

+0

고마워요,하지만 당신은 아마도 충분히 명확하지 않았습니다. URL에서 값을 가져 와서 데이터베이스에서 쿼리하는 방법을 알고 있습니다. 예를 들어, id = 1은 '임의의 이름'이됩니다. 테스트/임의 번호가 테스트/ID = 1이되도록 클라이언트 측만이 필요합니다. –

1

당신은 htaccess로, 당신은 ID를 수신 그래서 대신 스크립트를 조정해야합니다 것을 할 수 없다 = 1 받게됩니다 이름 = xxx. 이 데이터베이스의 이름을보고 당신이 당신의 PHP 스크립트에서이

RewriteRule ^something/(.+)\.htm$ something/file.php?djname=$1 

뭔가를해야 htaccess로에서, 그래서

좋아 ID를 계산하는 것보다 당신은 할 수 있습니다

$name = mysql_real_escape_string($_GET['djname']); 

$sql = "SELECT * FROM djtable where name='" . $name . "' LIMIT 1"; 

OBS : 1. 적절한 이스케이프 처리를 사용하십시오. 2. 데이터베이스에서 dj 이름이 고유한지 확인하십시오.

+0

감사합니다. 너, 그게 내가 알아야 할 전부 야. 이제는 page = test & name = myname을 test/myname으로 어떻게 변경합니까? 나는 데이터베이스에서 질의를 할 것인가? –

+1

일부 기본 SQL을 배우고 자신의 엔지니어링을 수행하십시오. – gd1

+0

SQL이 아닙니다! .htaccess입니다. 지금 코드를 작성하겠습니다.하지만 URL을 다시 작성하여 test.com? page = x 및 ID = y를 test.com/x/y로 변환하십시오. –