2013-07-02 53 views
0

最初,我幾乎沒有PHP編碼技能,所以請原諒,如果我問非常基本的問題。商店友好的網址與PHP在數據庫創建的數據庫字段作爲源

我想創建一個php文件,我可以通過cron作業執行,它在非modx數據庫中創建friendly_URLs。我有一個有3列「ID」,「標題」,「URI」一表「myuri」(URI是默認NULL)

這裏是腳本應該做

  • 連接到數據庫服務器
  • 什麼
  • 選擇DB
  • 更新所有「URI」 -fields是NULL與友好的URL在相應的「頭銜」 - 場

隨着我的非常基本的理解產生 從每個標題我我只是設法將一些代碼剪切的PHP和xPDO混合在一起,這是做某事,但不是我需要的。

我有SOFAR是鏌鋣xPDO的混合和SQL

// [PHP/SQL] db connect 
mysql_connect("hostname", "user", "password"); 
mysql_select_db("database"); 

// [xPDO] path 
define('MODX_CORE_PATH', '/website/domain.tld/core/'); 
define('MODX_CONFIG_KEY','config'); 
require_once MODX_CORE_PATH . 'model/modx/modx.class.php'; 

// [xPDO] Criteria for foreign Database 
$host = 'hostname'; 
$username = 'user'; 
$password = 'password'; 
$dbname = 'database'; 
$port = 3306; 
$charset = 'utf-8'; 

$dsn = "mysql:host=$host;dbname=$dbname;port=$port;charset=$charset"; 
$xpdo = new xPDO($dsn, $username, $password); 

// [PHP/SQL] Function that removes all unfriendly signs from the title example: "Hello! World" to "hello-world" 
function Slug($string) 
{ 
return strtolower(trim(preg_replace('~[^0-9a-z]+~i', '-', html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8')), '-')); 
} 

// [xPDO] Issue queries against the foreign database, for testing limited to a few ids instead of "WHERE id is null" 
$output = ''; 
$sql = "SELECT * FROM myuri WHERE id BETWEEN 564780000 AND 564781000"; 
foreach ($xpdo->query($sql) as $row) { 
$output .= $row['title']; 
} 

// [PHP/SQL] take the xPDO query results and run "function Slug($string)" on it (i guess this needs to go into the "foreach" somehow) 
$user = $output; 
$item = "test-parent-folder/".Slug($user).".html"; 

// [PHP/SQL] Update the column "uri", for testing limited to a few ids instead of "WHERE id is null" (this needs to go into the "foreach" too) 
mysql_query("UPDATE myuri SET uri = '$item' id BETWEEN 564780000 AND 564781000"); 

所以基本上我需要做兩件大事。

1)更換[PHP/SQL]組件的所有[xPDO]組件可以運行它作爲一個cron作業

2)包括的東西到每個功能,這裏是我的人PHP的技能打了極限

3)(可選)從我的一些帖子看過這可能是聰明,有「內爆」爲使其運行速度更快,因爲該表有1,000,000行

運行此

如果有人能夠幫助我,那將會很棒。

回答

0

只是一個快速的音符,

mysql_query("UPDATE myuri SET uri = '$item' id BETWEEN 564780000 AND 564781000"); 

不會做你希望我猜,這個功能將覆蓋,由一個單新的價值5647800000和564781000之間的所有值是什麼。在下面的代碼中,我已經解決了這個問題,就像你想要的那樣(可能這就是URL縮寫的工作方式)

<?php 
define('MODX_CORE_PATH', '/website/domain.tld/core/'); 
define('MODX_CONFIG_KEY','config'); 
require_once MODX_CORE_PATH . 'model/modx/modx.class.php'; 
//FILL THIS IN// 
$host = 'hostname'; 
$username = 'user'; 
$password = 'password'; 
$dbname = 'database'; 
$port = 3306; 
$charset = 'utf-8'; 

//DON'T CHANGE BELOW// 
mysql_connect($host,$username,$password); 
mysql_select_db($dbname); 

// [PHP/SQL] Function that removes all unfriendly signs from the title example: "Hello! World" to "hello-world" 
function Slug($string) 
{ 
return strtolower(trim(preg_replace('~[^0-9a-z]+~i', '-', html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8')), '-')); 
} 

$items = mysql_query("SELECT * FROM myuri WHERE id BETWEEN 564780000 AND 564781000"); 
while($item = mysql_fetch_object($items)) { 
mysql_query("UPDATE myuri SET uri='test-parent-folder/".Slug($item->title).".html' WHERE id='".$item->id."'"); 
} 
+0

首先非常感謝你花時間幫助我。 – VolkaRacho

+0

我得到以下錯誤:......致命錯誤:不能使用stdClass類型的對象作爲第23行上的數組...此行是.. while($ item = mysql_fetch_object($ items)){...因爲我刪除了前3行不再需要。 – VolkaRacho

+0

哦,我的壞,更新的代碼@VolkaRacho –