簡體   English   中英

無法獲得正確的想法

[英]Having trouble getting the right idea

好吧,我正在編寫一個php代碼來編輯這些標簽內的標簽和數據,但我在解決問題時遇到了很大的麻煩。

基本上我有一個與此類似的xml文件,但是更大

<users>
 <user1>
  <password></password>
  </user1>
</users>

和我用來嘗試和更改user1標簽的php代碼是這個

function mod_user() {
    // Get global Variables
    global $access_level;

    // Pull the data from the form
    $entered_new_username = $_POST['mod_user_new_username'];
    $entered_pass = $_POST['mod_user_new_password'];
    $entered_confirm_pass = $_POST['mod_user_confirm_new_password'];
    $entered_new_roll = $_POST['mod_user_new_roll'];
    $entered_new_access_level = $_POST['mod_user_new_access_level'];

    // Grab the old username from the last page as well so we know who we are looking for
    $current_username = $_POST['mod_user_old_username'];

    // !!-------- First thing is first. we need to run checks to make sure that this operation can be completed ----------------!!

    //  Check to see if the user exist. we just use the normal phaser since we are only reading and it's much easier to make loop through
    $xml = simplexml_load_file('../users/users.xml');

    // read the xml file find the user to be modified
    foreach ($xml->children() as $xml_user_get)
    {
        $xml_user = ($xml_user_get->getName());

        if ($xml_user == $entered_new_username){
            // Set array to send data back
            //$a = array ("error"=>103, "entered_user"=>$new_user, "entered_roll"=>$new_roll, "entered_access"=>$new_access_level);

            // Add to session to be sent back to other page
            // $_SESSION['add_error'] = $a;
            die("Username Already exist - Pass");
            // header('location: ../admin.php?page=usermanage&task=adduser');
        }
    }

    // Check the passwords and make sure they match
    if ($entered_pass == $entered_confirm_pass) {
        // Encrypt the new password and unset the old password variables so they don't stay in memory un-encrytped
        $new_password = hash('sha512', $entered_pass);

        unset ($entered_pass, $entered_confirm_pass, $_POST['mod_user_new_password'], $_POST['mod_user_confirm_pass']);
    }

    else {

        die("passwords did not match - Pass");
    }

    if ($entered_new_access_level != "") {
        if ($entered_new_access_level < $access_level){
            die("Access level is not sufficiant to grant access - Pass");
        }
    }

    // Now to load up the xml file and commit changes.
    $doc = new DOMDocument;
    $doc->formatOutput = true;
    $doc->perserveWhiteSpace = false;
    $doc->load('../users/users.xml');

    $old_user = $doc->getElementsByTagName('users')->item(0)->getElementsByTagName($current_username)->item(0);

    // For initial debugging - to be deleted
    if ($old_user == $current_username)
        echo    "old username found and matches";

    // Check the variables to see if there is something to change in the data.
    if ($entered_new_username != "") {
        $xml_old_user = $doc->getElementsByTagName('users')->item(0)->getElementsByTagName($current_username)->item(0)->replaceChild($entered_new_username, $old_user);

        echo "Username is now: " . $current_username;
    }

    if ($new_pass != "") {
        $current_password = $doc->getElementsByTagName($current_user)->item(0)->getElementsByTagName('password')->item(0)->nodeValue;

        //$replace_password = $doc
    }
}

當僅使用為更改輸入的用戶名運行時,出現此錯誤

Catchable fatal error: Argument 1 passed to DOMNode::replaceChild() must be an instance of DOMNode, string given, called in E:\xampp\htdocs\CGS-Intranet\admin\html\useraction.php on line 252 and defined in E:\xampp\htdocs\CGS-Intranet\admin\html\useraction.php on line 201

有人可以向我解釋如何執行此操作,或者向我展示他們將如何執行此操作..可能對我來說有點了解如何執行此操作:s

謝謝

$entered_new_username是一個字符串,因此您需要通過$doc->createElement()類的東西將其與DOM對象包裝在一起

    $xml_old_user = $doc->getElementsByTagName('users')->item(0)->getElementsByTagName($current_username)->item(0)->replaceChild($doc->createElement($entered_new_username), $old_user);

這可能不太正確,但希望它能為您指明正確的方向。

好了,它編寫並替換了我想要的節點,但是我遇到了其他必須解決的問題(即:它正在替換整個樹,而不是僅僅更改節點名稱)

無論如何,我使用的代碼是

    // For initial debugging - to be deleted
if ($old_user == $current_username)
    echo    "old username found and matches";

// Check the variables to see if there is something to change in the data.
if ($entered_new_username != "") {
    try {
    $new_node_name = $doc->createElement($entered_new_username);

    $old_user->parentNode->replaceChild($new_node_name, $old_user);
    }
    catch (DOMException $e) {
        echo $e;
    }
    echo "Username is now: " . $current_username;
}

if ($new_pass != "") {
    $current_password = $doc->getElementsByTagName($current_user)->item(0)->getElementsByTagName('password')->item(0)->nodeValue;

    //$replace_password = $doc
}

$doc->save('../users/users.xml');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM