Php kullanarak dizenin ilk karakterini büyük harfle yaz. Sonra XMLWriter ile çıktı.

Bu muhtemelen çok basit, ama bunu yapmanın en iyi yolunu bilmiyorum. Bir xml belgesi oluşturmak için PHP ile bir mysqli veritabanından veri çekiyorum. Aşağıdaki kodum çalışır, ancak Başlık alanındaki veriler tüm kapaklardır. Sadece ilk karakter büyük harfle, geri kalan küçük harfe ihtiyacım var. Biliyorum ucwords işlevine ihtiyacım var, ama henüz zar yok. Başlık alanı, tüm başlıklarda birden fazla kelimeye sahiptir.

XML alanına girmeden önce ucwords tarafından biçimlendirilmiş verilere ihtiyacım var. Bunu db'deki verileri güncellemek yerine php'de yapmayı tercih ederim. Yardım için teşekkürler!

<?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
Bir şeyleri anladın mı?
katma yazar hafichuk, kaynak
ucwords (strtolower ($ str))?
katma yazar galchen, kaynak
ucwords ve strtolower değiştirilmiş bir dize döndürür. Orijinal değeri değiştirmeyecekler. $ Title = ucwords (strtolower ($ Title)) yaparsanız; sonra bu noktadan itibaren, $ Başlık değiştirilmiş versiyon olacak. İstediğiniz şeyin $ xw-> writeElement ('Title', ucwords (strtolower ($ Title))) olduğunu düşünüyorum;
katma yazar galchen, kaynak
Bir newb gibi geldiğim için üzgünüm, ama bunu bind ifadesinden sonra mı söylüyorum? Önemi var? ucwords (strtolower ($ Title)) ekledim; ve sonra xml çıktısında Başlığım görünmez. Beni bu kadar heyecanlandıran şey bu.
katma yazar Dan M, kaynak
Bingo, teşekkürler galchen! bu şekilde yapmak aklımdan geçmedi. Peki ben böyle öğreniyorum, çok teşekkürler!
katma yazar Dan M, kaynak

1 cevap

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!
?>

Sorgunuz için şunları değiştiririm:

// 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);    

İle:

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

Ardından while döngüsünüzü değiştirin:

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

Açıkçası, veritabanı şemasını bilmediğim için bununla uğraşmanız gerekiyor.

Mysqli maddelerini değiştirmenin temel nedeni, gelecekte veritabanında şema değişiklikleri yaparsanız, veritabanı sütunlarının aynı sıraya sahip olmasını garanti etmemenizdir.

İyi şanslar!

1
katma
np, umarım cevabın senin için çalışır
katma yazar hafichuk, kaynak
teşekkürler Hafichuk, takip ettiğim elkitabı, ama benden sonra xml kısmına çalışmış gibi görünmüyor.
katma yazar Dan M, kaynak
yapacaklar, Hafichuk, saygılar için teşekkürler!
katma yazar Dan M, kaynak