2011-03-02 71 views
0

我有一個包含來自數據庫的內容的表。現在我嘗試實現一種方法來(a)從表中刪除行(b)編輯「即時」行的內容。 (一)工作完美(二)讓我的頭吸菸!有關Mootools Ajax請求和提交表單的問題

下面是完整的Mootools的代碼:

<script type="text/javascript"> 
window.addEvent('domready', function() { 

var eDit = $('edit_hide'); 
eDit.slide('hide'); 

var del = new Request.HTML(
{ 
    url: 'fuss_response.php', 
    encoding: 'utf-8', 
    update: eDit, 
    onComplete: function(response) 
    { 
    eDit.slide('in'); 
    } 
}); 

$$('input.delete').addEvent('click', function(e){ 
     e.stop(); 
    var aID = 'delete_', bID = ''; 
    var deleteID = this.getProperty('id').replace(aID,bID); 
     new MooDialog.Confirm('Soll der Termin gelöscht werden?', function(){ 
     del.send({data : "id=" + deleteID}); 
     }, function(){ 
     new MooDialog.Alert('Schon Konfuzius hat gesagt: Erst denken dann handeln!'); 
     }); 
    }); 

var edit = new Request.HTML(
{ 
    url: 'fuss_response_edit.php', 
    update: eDit, 
    encoding: 'utf-8', 
    onComplete: function(response) 
    { 
    $('sst').addEvent('click', function(e){ 
     e.stop(); 
    safe.send(); 
    }); 
    } 
}); 

var safe = new Request.HTML(
{ 
    url: 'termin_safe.php', 
    encoding: 'utf-8', 
    update: eDit, 
    onComplete: function(response) 
    { 

    } 
}); 

$$('input.edit').addEvent('click', function(e){ 
     e.stop(); 
    var aID = 'edit_', bID = ''; 
    var editID = this.getProperty('id').replace(aID,bID); 
     edit.send({data : "id=" + editID}); 
     $('edit_hide').slide('toggle'); 
    }); 

}); 
</script> 

這裏PHP的一部分,使編輯表單:

<?php 

$cKey = mysql_real_escape_string($_POST['id']); 

$request = mysql_query("SELECT * FROM fusspflege WHERE ID = '".$cKey."'"); 
    while ($row = mysql_fetch_object($request)) 
    { 
    $id = $row->ID; 
    $name = $row->name; 
    $vor = $row->vorname; 
    $ort = $row->ort; 
    $tel = $row->telefon; 
    $mail = $row->email; 
    } 
echo '<form id="termin_edit" method="post" action="">'; 
echo '<div><label>Name:</label><input type="text" id="nns" name="name" value="'.$name.'"></div>'; 
echo '<div><label>Vorname:</label><input type="text" id="nvs" name="vorname" value="'.$vor.'"></div>'; 
echo '<div><label>Ort:</label><input type="text" id="nos" name="ort" value="'.$ort.'"></div>'; 
echo '<div><label>Telefon:</label><input type="text" id="nts" name="telefon" value="'.$tel.'"></div>'; 
echo '<div><label>eMail:</label><input type="text" id="nms" name="email" value="'.$mail.'"></div>'; 
echo '<input name="id" type="hidden" id="ids" value="'.$id.'"/>'; 
echo '<input type="button" id="sst" value="Speichern">'; 
echo '</form>'; 
?> 

和最後的termin_safe.php守則

$id = mysql_real_escape_string($_POST['id']); 
$na = mysql_real_escape_string($_POST['name']); 
$vn = mysql_real_escape_string($_POST['vorname']); 
$ort = mysql_real_escape_string($_POST['ort']); 
$tel = mysql_real_escape_string($_POST['telefon']); 
$em = mysql_real_escape_string($_POST['email']); 
$score = mysql_query("UPDATE fuspflege SET name = '".$na."', vorname = '".$vn."', ort = '".$ort."', telefon = '".$tel."', email = '".$em."' WHERE ID = '".$id."'"); 

據我所見,請求確實有效,但數據不會更新!我想事情發佈錯誤 對於任何建議,我會很樂意開心!

PS一些意見後:我看到在這個部分的問題:

var edit = new Request.HTML(
{ 
    url: 'fuss_response_edit.php', 
    update: eDit, 
    encoding: 'utf-8', 
    onComplete: function(response) 
    { 
    $('sst').addEvent('click', function(e){ 
     e.stop(); 
    safe.send(); 
    }); 
    } 
}); 

「編輯」要求打開與預充式輸入字段表格,然後附加一個單擊事件的提交按鈕,應該調用點擊一個新的請求。 第三個請求我無法傳遞輸入字段的數據。我試圖讓每個字段的這樣的值:

var name = $('nns').getProperty('value'); 

,並通過這種方式

.send({data : "name=" + name}); 

沒有工作至今

PPS: 的要求,使代碼來自主站點的html

<?php $request = mysql_query("SELECT * FROM fusspflege"); 
    echo '<form id="fusspflege" method="post" action="">'; 
    echo '<table class="fuss_admin">'; 
    echo '<tr><th>Name</th><th>Vorname</th><th>Ort</th><th>Telefon</th><th>eMail</th><th>Uhrzeit</th><th>Datum</th><th></th><th></th></tr>'; 
    echo '<tr><td colspan=8 id="upd"></td></tr>'; 
    while ($row = mysql_fetch_object($request)) 
    { 
    $id = $row->ID; 
    $name = $row->name; 
    $vor = $row->vorname; 
    $ort = $row->ort; 
    $tel = $row->telefon; 
    $mail = $row->email; 
    $dat = $row->datum; 
    $uhr = $row->uhrzeit; 

    echo '<tr><td>'.$name.'</td><td>'.$vor.'</td><td>'.$ort.'</td><td>'.$tel.'</td><td>'.$mail.'</td><td>'.$uhr.'</td><td>'.$dat.'</td>'; 
    echo '<td><input id="delete_'.$id.'" class="delete" type="button" value="X"></td>'; 
    echo '<td><input id="edit_'.$id.'" class="edit" type="button" value="?"></td>'; 
    echo '</tr>'; 
    } 
    echo '</table>'; 
    echo '</form>'; 
    echo '<div id="edit_hide"></div>'; 
?> 

更新:

 <form action="" method="post" id="termin_edit"> 
    <div> 
     <label> 
      Name: 
     </label> 
     <input type="text" value="NAME" name="name" id="nns"> 
    </div> 
    <div> 
     <label> 
      Vorname: 
     </label> 
     <input type="text" value="Marianne" name="vorname" id="nvs"> 
    </div> 
    <div> 
     <label> 
      Ort: 
     </label> 
     <input type="text" value="MArkt Wald" name="ort" id="nos"> 
    </div> 
    <div> 
     <label> 
      Telefon: 
     </label> 
     <input type="text" value="" name="telefon" id="nts"> 
    </div> 
    <div> 
     <label> 
      eMail: 
     </label> 
     <input type="text" value="[email protected]" name="email" id="nms"> 
    </div> 
    <input type="hidden" value="115" id="ids" name="id"> 
    <input type="button" value="Speichern" id="sst"> 
</form> 
+0

需要將回聲語句放在while循環中,如果您想要刪除所有$行數據 – kjy112 2011-03-02 14:22:38

+0

並不是真的,因爲它只輸出一個數據集(與發佈的id相匹配的數據集):)這隻會生成預填表單當我點擊主頁面上的編輯按鈕時打開。在第二階段,我希望能夠改變現在的內容,然後將其發送回數據庫。這是我的問題!發送和更新不起作用 – Arwed 2011-03-02 14:29:15

+0

如果只有一行,則不需要一個while循環 – kjy112 2011-03-02 14:31:45

回答

1

更新:

這是基於你給我應該與你的HTML工作表單上的MooTools的腳本:

$('sst').addEvent('click', function(event) { 
    var data; 
    event.stop(); 
    var myInputEl = $$('#termin_edit input'); 
    for(var i=0; i<myInputEl.length; i++){ 
     if(i == 0) 
      data = myInputEl[i].name + "=" + myInputEl[i].value; 
     else 
      data += "&" + myInputEl[i].name + "=" + myInputEl[i].value; 
    } 
    myRequest.send(data); 
}); 

而且你的要求添加調用警報回來了編輯只是爲了測試ajax是否工作:

onSuccess: function(responseText) { 
     alert("done! " + responseText); 
    }, 
    onFailure: function() { 
     alert("failed"); 
    } 

在php方面創建一個新的PHP文件,並把它放在它,並有一個Ajax目標:

<?php 
print_r($_POST); 
?> 

Ajax應該返回警告框中的$ _POST數組。

+0

好吧,我需要指定的數據是明確的 - 我在前2個請求中做到了這一點。但最後一個似乎無法訪問字段中的數據,我不知道爲什麼 – Arwed 2011-03-02 15:17:35

+0

@Arwed首先隔離ajax,然後在調試php端之前測試是否先傳入正確的數據。讓我知道,一旦你得到了Ajax的工作,我會幫你解決PHP方面。 – kjy112 2011-03-02 15:25:40

+0

回顯爲空,因此沒有數據通過。我清理了一下javascript代碼,並在我的出處問題中再次發帖 – Arwed 2011-03-02 15:50:38