phpを使って文字列の最初の文字を大文字にします。 XMLWriterで出力します。

これはおそらく本当に簡単ですが、私はこれを行うための最善の方法を知らない。私はXML文書を作成するためにphpでmysqliデータベースからデータを取得しています。下のコードは動作しますが、タイトルフィールドのデータはすべて大文字です。最初の文字は大文字で、残りは小文字にする必要があります。私はucwords関数が必要だが、ダイスはまだないことを知っている。タイトルフィールドには、複数の単語がすべて含まれています。

XML領域に入る前に、ucwordsでフォーマットされたデータが必要です。私は、データベース内のデータを更新する代わりにPHPでこれを行うことを好む。助けてくれてありがとう!

<?php

// Connect to the database
global $link;
$link = mysqli_connect("localhost", "root", "pass", "database");

// Verify the connection worked
if (!$link) {
    printf("Connection to database failed: %s\n", mysqli_connect_error());
    exit();
}

// Prepare the database query
   $stmt = mysqli_prepare($link, "SELECT * FROM table"); 

// Run the database query
   mysqli_stmt_execute($stmt);

// Bind the result columns to PHP variables
   mysqli_stmt_bind_result($stmt, $Name, $Title);    

// Create a new xml document in memory

$xw = new xmlWriter();
$xw->openURI('php://output');
$xw->openMemory();
$xw->startDocument('1.0');

// Start the outer data container
$xw->StartElement('rss');
$xw->WriteAttribute('version', '2.0');

// Fetch values
  while (mysqli_stmt_fetch($stmt)) {

{

$xw->startElement('item');

 //Write out the elements
    $xw->writeElement('Name', $Name);
    $xw->writeElement('Title', $Title);
    $xw->endElement();

}

// End container
$xw->endElement();

// End the document
$xw->endDocument();


//header('Content-Type: text/xml');
print $xw->outputMemory(true);

// Close the database statement
mysqli_stmt_close($stmt);

// Close the database connection
mysqli_close($link);
 }
?>
1
あなたは物事を把握しましたか?
追加された 著者 hafichuk,
ucwords(strtolower($ str))?
追加された 著者 galchen,
ucwordsとstrtolowerは変更された文字列を返します。彼らは元の値を変更しません。あなたが$ Title = ucwords(strtolower($ Title))をするならば。この時点から、$ Titleは変更されたバージョンになります。あなたが望むのは$ xw-> writeElement( 'Title'、ucwords(strtolower($ Title)))です。
追加された 著者 galchen,
申し訳ありませんがnewbのように聞こえますが、私はバインドステートメントの後にこれを置くのですか?それは重要ですか?私はucwordsを追加しました(strtolower($ Title)); xmlの出力で私のタイトルは表示されません。これが私を踏みにじっている。
追加された 著者 Dan M,
ビンゴ、ガレン!そのようにすることは私の心を越えていませんでした。まあ、これは私が学ぶ方法です、ありがとう!
追加された 著者 Dan M,

1 答え

The relevant section in http://php.net/manual/en/function.ucwords.php

<?php
$foo = 'hello world!';
$foo = ucwords($foo);            //Hello World!

$bar = 'HELLO WORLD!';
$bar = ucwords($bar);            //HELLO WORLD!
$bar = ucwords(strtolower($bar));//Hello World!
?>

あなたの質問のために、私は次のように置き換えます:

// Prepare the database query
$stmt = mysqli_prepare($link, "SELECT * FROM table"); 

// Run the database query
mysqli_stmt_execute($stmt);

// Bind the result columns to PHP variables
mysqli_stmt_bind_result($stmt, $Name, $Title);    

を使用して:

$results = mysqli_query("SELECT * FROM table");

whileループを次のように変更します。

foreach($results as $row) {
    $xw->startElement('item');
    $xw->writeElement('Name', ucwords(strtolower($row['name']));
    $xw->writeElement('Title', ucwords(strtolower($row['title']));
    $xw->endElement();
}

明らかに、私はあなたのデータベーススキーマを知らないので、これを修正する必要があります。

mysqliを変更する主な理由は、将来データベースのスキーマを変更すると、データベース列の順序が同じであるとは限りません。

がんばろう!

1
追加された
np、答えがあなたのために働くことを願って
追加された 著者 hafichuk,
ありがとうHafichuk、私が従ったマニュアルしかし初心者私は後でXMLの部分を取得することはできません。
追加された 著者 Dan M,
ヒントをお寄せいただきありがとうございますHafichuk、よろしく!
追加された 著者 Dan M,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com