|
Was kann die Demo - und was tut sie nicht?
Unser letztes AJAX-Beispiel hat schon sehr viel mit einer "Wapplication" zu tun. Hier soll gezeigt werden, dass der Weg zu Online-Applikationen offen ist und mit zunehmender Transfergeschwindigkeit immer wahrscheinlicher wird. Stellen Sie sich einmal vor, ein Administrator hätte weltweit für seinen Konzern nur noch eine einzige Applikation zu pflegen, dieses System unabhängig und ohne all zu hohe Ansprüche an permanente technische Innovationen anzupassen. Möglich ist das, wenn Sie das folgende Beispiel eingehend studiert haben, werden Sie das auch glauben. Module: Module die zur Vollständigkeit fehlen: Natürlich könnten die fehlenden Funktionen ergänzt werden. Dies würde allerdings den Umfang des Tutorials (und unseren Zeitrahmen sprengen - sorry).
Zunächst zur Steuerlogik: Eine gute Steuerlogik soll dafür sorgen, dass die Anwender möglichst wenig Fehler machen können, weshalb beim Aufruf der Maske zunächst nur die Möglichkeit "[Neuer Datensatz]" angeboten wird. Die beiden anderen Buttons sind nicht zu sehen und können deshalb auch nicht versehentlich gedrückt werden. Beim Klick auf "[Neuer Datensatz]" werden die Inhalte der Maske (des Formulars - nicht! der Datenbank-Tabelle) gelöscht und der Eingabefokus in das erste Formularfeld gesetzt. Die Eigenschaft: "disabled" (true oder false) hat ihre Tücken. Prinzipiell arbeiten wir hier zwar mit einer Klasse class="dis". Allerdings verwenden wir wir nicht "disabled" sondern arbeiten mit der Eigenschaft "visibility" (hidden oder visible), was der Eingabemaske zwar eine gewisse "Härte" verleiht, dafür aber um so zuverlässiger arbeitet. ![]() Beim Klick auf "[Neuer Datensatz]" wird der Button "Datensatz speichern" aktiviert und der Button "Neuer Datensatz" inaktiv gestellt (ausgeblendet). Zugleich werden die Formularfelder geleert und ein Ersatzbild bereitgestellt:
function new_data() {
for (i=0; i<document.forms["individuals"].length -4 ; i++ ) {
document.forms["individuals"].elements[i].value="";
}
document.forms["individuals"].elements[0].focus();
document.forms["individuals"].elements[10].checked = false;
document.forms["individuals"].elements[11].checked = false;
document.getElementById("save").className="show";
document.getElementById("save").style.visibility="visible";
document.getElementById("new").className="dis";
document.getElementById("new").style.visibility="hidden";
document.getElementById("kill").className="dis";
document.getElementById("kill").style.visibility="hidden";
document.images[0].src="images/phantom.jpg";
return
}
Der Button "[Datensatz löschen]" wird erst bei einem Klick auf die Liste aktiviert und der augenblicklich angewählte Datensatz wird abgebildet: Klick auf die Liste: <tr onClick=requesT_A(this.id) id='" . $row['id'] ."' class='a' onmouseover=this.className='c' onmouseout=this.className='a'>
function requesT_A(id){
document.getElementById("new").className="dis";
document.getElementById("new").style.visibility="hidden";
document.getElementById("save").className="dis";
document.getElementById("save").style.visibility="hidden";
document.getElementById("kill").className="show";
document.getElementById("kill").style.visibility="visible";
document.forms["individuals"].elements['selected'].value=id;
rqo.open('get', 'show.php?id='+ id);
rqo.onreadystatechange = receivE_A;
rqo.send(null);
}
Für den Fall, dass tatsächlich gelöscht werden soll, wurde die ID des ausgewählten Datensatzes bereits beim Aufruf in die Tabelle geschrieben und kann nun an die Datei "show.php" adressiert werden, welche (mit der AJAX-Methode - also - dem XMLHttpRequest()) den Datensatz aus der Tabelle ausliest und einen String zurück gibt, der nachfolgend zerlegt und in das Eingabeformular geschrieben wird (auch in dieser Funktion wird die ID des ausgewählten Satzes in ein verstecktes Feld "selected" geschrieben):
function receivE_A(){
if(rqo.readyState == 4){
my_string=rqo.responseText;
suche = my_string.indexOf(";");
vorname = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['vorname'].value = vorname;
suche = my_string.indexOf(";");
name = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['name'].value = name;
suche = my_string.indexOf(";");
ausweisnummer = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['ausweisnummer'].value = ausweisnummer;
suche = my_string.indexOf(";");
geburtsdatum = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['geburtsdatum'].value = geburtsdatum;
suche = my_string.indexOf(";");
strasse = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['strasse'].value = strasse;
suche = my_string.indexOf(";");
plz = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['plz'].value = plz;
suche = my_string.indexOf(";");
ort = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['ort'].value = ort;
suche = my_string.indexOf(";");
telefon = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['telefon'].value = telefon;
suche = my_string.indexOf(";");
telefax = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['telefax'].value = telefax;
suche = my_string.indexOf(";");
email = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['email'].value = email;
suche = my_string.indexOf(";");
geschlecht = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
if(geschlecht==1) {
document.forms["individuals"].elements[10].checked = false;
document.forms["individuals"].elements[11].checked = true;
} else {
document.forms["individuals"].elements[10].checked = true;
document.forms["individuals"].elements[11].checked = false;
}
suche = my_string.indexOf(";");
passbild = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.images[0].src=passbild;
suche = my_string.indexOf(";");
bemerkung = my_string.substring(0, suche);
document.forms["individuals"].elements['bemerkung'].value = bemerkung;
}
return
}
![]() Nun bleibt nur noch die "Rückstellung", falls die Taste "[Datensatz löschen]" irrtümlich gedrückt wurde oder tatsächlich gelöscht werden soll - diese "Rückstellung" wird in jedem Falle durchgeführt. "[Datensatz löschen]" ruft:
onclick=requesT_C(document.forms["individuals"].
elements["selected"].value)
und in dieser Funktion werden die Tasten "[Neuer Datensatz]", "[Datensatz speichern]" und "[Datensatz löschen]" frisch eingestellt:
function requesT_C(id){
document.getElementById("new").className="show";
document.getElementById("new").style.visibility="visible";
document.getElementById("kill").className="dis";
document.getElementById("kill").style.visibility="hidden";
ob_kill=confirm('Datensatz wirklich loeschen?');
if(ob_kill==true){
rqo.open('get', 'delete.php?id='+ id);
rqp.open('get', 'table.php');
rqp.onreadystatechange = receivE_C;
rqo.send(null);
rqp.send(null);
}else{
return
}
}
function receivE_C(){
if(rqp.readyState == 4){
alert('Datemsatz wurde geloescht.')
document.getElementById("liste").innerHTML = rqp.responseText;
for (i=0; i<13 ; i++ ) {
document.forms["individuals"].elements[i].value='';
}
document.forms["individuals"].elements[10].checked = false;
document.forms["individuals"].elements[11].checked = false;
document.images[0].src="images/phantom.jpg";
document.getElementById("save").className="show";
document.getElementById("save").style.visibility="visible";
}
return
}
und ganz gleich, wie der Anwender / die Anwenderin entscheidet, die Ausgangslage: nur noch "[Neuer Datensatz]" aktiv wird wieder hergestellt. Die Organisation der Steuerlogik in Anwendermodulen hilft allerdings nicht nur den Anwendern, sondern auch den Entwicklern, weil so die voraussehbaren Möglichkeiten und eventuellen Fehlerquellen besser einzuschränken sind. Der Start: Im Aufruf der Datei "ajax-start.php" sind zwei PHP-Blöcke integriert, um zum einen: Das Formular mit Inhalten des ersten Datensatzes zu füllen (leere Masken zum Start frustrieren die Anwender):
<?php
$i = 0;
$con = mysql_connect("systemconsulting.de","username","passwort");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("datenbank", $con);
mysql_query("SET NAMES 'utf8'");
$result = mysql_query("SELECT * FROM einwohner limit 1");
$row = mysql_fetch_array($result);
$vorname = $row['vorname'];
$name = $row['name'];
$geburtsdatum = $row['geburtsdatum'];
$strasse = $row['strasse'];
$plz = $row['plz'];
$ort = $row['ort'];
$telefon = $row['telefon'];
$telefax = $row['telefax'];
$email = $row['email'];
$ausweisnummer = $row['ausweisnummer'];
$passbild = $row['passbild'];
$geschlecht = $row['geschlecht'];
$bemerkung = $row['bemerkung'];
mysql_close($con);
?>
Die Variablen werden dann beim Einlesen der Maske direkt in die Formularfelder geschrieben:<?php echo $vorname; ?> usw. und füllen damit bereits die Maske mit Inhalten auf. Der zweite PHP-Block generiert die Liste, welche ebenfalls beim ersten Aufruf angezeigt wird:
<?php
$i = 0;
$con = mysql_connect("systemconsulting.de","username","passwort");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("datenbank", $con);
$result = mysql_query("SELECT id, vorname, name, strasse,plz, ort
FROM einwohner order by name");
echo "<table align='center' width='100%'>";
echo "<tr style='background:#9EB7BC;font-weight:bold;'>";
echo "<td>Vorname</td>";
echo "<td>Name</td>";
echo "<td>Staße</td>";
echo "<td>PLZ</td>";
echo "<td>Ort</td>";
echo "</tr>";
while($row = mysql_fetch_array($result))
{
$i++;
if(round($i/2) == $i/2){
echo "<tr onClick=requesT(this.id) id='" . $row['id'] ."' class='a'
onmouseover=this.className='c' onmouseout=this.className='a'><td>"
. $row['vorname'] . "</td><td>" . $row['name']
. "</td><td>" .$row['strasse'] . "</td><td>"
. $row['plz'] . "</td><td>" . $row['ort'] . "</td></tr>";
}else{
echo "<tr onClick=requesT(this.id) id='" . $row['id'] ."' class='b'
onmouseover=this.className='c' onmouseout=this.className='b'><td>"
. $row['vorname'] . "</td><td>" . $row['name']
. "</td><td>" .$row['strasse'] . "</td><td>"
. $row['plz'] . "</td><td>" . $row['ort'] . "</td></tr>";
}
}
echo "</table>";
mysql_close($con);
?>
Schema der abgefragten Tabelle: ![]() Inhalte der abgefragten Tabelle: ![]() Hier würde die Implementierung von AJAX-Methoden weniger Sinn machen, weil ohnehin eine neue Seite aufgerufen werden muss. Mit dem Aufruf werden auch die oben bereits erwähnten Eigenschaften "visibility (visible / hidden)" für die Steuerelemente und deren Klasseneigenschaften bereits geregelt. Die Funktion "Neuer Datensatz": Einschränkung - es findet keine Eingabeüberprüfung statt!!! (dazu am Ende noch ein kurzer Kommentar) Selbstverständlich würde man in einer "realen" Anwendung die Eingaben überprüfen. Auf diese Prüfung wird im Tutorial verzichtet, weil andere Inhalte zu klären sind. Bei korrekter Formulareingabe wird über den Aktion-Button "Datensatz speichern" die Funktion requesT_B()() (onclick) gerufen:
function requesT_B(){
document.getElementById("save").style.visibility="hidden";
document.getElementById("save").className="dis";
document.getElementById("new").style.visibility="visible";
document.getElementById("new").className="show";
sentstring="?";
sentstring=sentstring+"vorname=
"+document.forms["individuals"].elements["vorname"].value;
sentstring=sentstring+"&name=
"+document.forms["individuals"].elements["name"].value;
sentstring=sentstring+"&geburtsdatum=
"+document.forms["individuals"].elements["geburtsdatum"].value;
sentstring=sentstring+"&strasse=
"+document.forms["individuals"].elements["strasse"].value;
sentstring=sentstring+"&plz="+document.forms["individuals"].elements["plz"].value;
sentstring=sentstring+"&ort="+document.forms["individuals"].elements["ort"].value;
sentstring=sentstring+"&telefon=
"+document.forms["individuals"].elements["telefon"].value;
sentstring=sentstring+"&telefax=
"+document.forms["individuals"].elements["telefax"].value;
sentstring=sentstring+"&email="+document.forms["individuals"].elements["email"].value;
sentstring=sentstring+"&ausweisnummer=
"+document.forms["individuals"].elements["ausweisnummer"].value;
sentstring=sentstring+"&passbild=images/phantom.jpg";
sentstring=sentstring+"&bemerkung=
"+document.forms["individuals"].elements["bemerkung"].value;
if(document.forms["individuals"].elements[10].checked==true) {
geschlecht=0;
} else {
geschlecht=1;
}
sentstring=sentstring+"&geschlecht="+geschlecht;
rqo.open('get', 'enter.php'+ sentstring);
rqp.open('get', 'table.php');
rqp.onreadystatechange = receivE_B;
rqo.send(null);
rqp.send(null);
}
function receivE_B(){
if(rqp.readyState == 4){
document.getElementById("liste").innerHTML = rqp.responseText;
document.getElementById("save").className = "dis";
document.getElementById("save").style.visibility = "hidden";
document.getElementById("new").style.visibility = "visible";
alert('Datensatz wurde gespeichert');
}
return
}
Zunächst wird die Steuerlogik geklärt. Der Button "[Datensatz speichern]" wird auf visible und der Button "[Neuer Datensatz]" auf hidden gesetzt Danach wird aus den Formularinhalten ein String zusammengebaut, der über rqo.open an die Datei "enter.php" im Hintergrund weitergeleitet wird und zum Abschluss wird eine zweite PHP-Datei aufgerufen rqp (rqp ist dabei ein zweites XMLHttpRequest Objekt), die via "document.getElementById("liste").innerHTML = rqp.responseText;" die aktualisierte Liste in das Formular ausgibt.
enter.php:
<?php
$vorname = $_REQUEST["vorname"];
$name = $_REQUEST["name"];
$geburtsdatum = $_REQUEST["geburtsdatum"];
$strasse = $_REQUEST["strasse"];
$plz = $_REQUEST["plz"];
$ort = $_REQUEST["ort"];
$telefon = $_REQUEST["telefon"];
$telefax = $_REQUEST["telefax"];
$email = $_REQUEST["email"];
$ausweisnummer= $_REQUEST["ausweisnummer"];
$passbild = $_REQUEST["passbild"];
$bemerkung = $_REQUEST["bemerkung"];
$geschlecht = $_REQUEST["geschlecht"];
$con = mysql_connect("host","username","passwort");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("datenbank", $con);
$q_string ="INSERT INTO einwohner (vorname, name,geburtsdatum, strasse,
plz, ort, telefon, telefax, email, ausweisnummer, passbild, bemerkung,
geschlecht)VALUES(" . "'" . $vorname ."', " . "'" . $name ."', " . "'"
. $geburtsdatum ."', " . "'" . $strasse ."', " . "'" . $plz ."', " . "'"
. $ort ."', " . "'" . $telefon ."', " . "'" . $telefax ."', " . "'" . $email
."', " . "'" . $ausweisnummer ."', " . "'" . $passbild ."', " . "'"
. $bemerkung ."', " . "'" . $geschlecht ."' )";
echo $q_string;
mysql_query($q_string);
mysql_close($con);
?>
Nachdem der neue Datensatz über "INSERT" (eine Überarbeitung eines bestehenden Satzes hätte "UPDATE where id=" zur Verwendung) in die Tabelle geschrieben ist, soll dieser auch in der Liste angezeigt werden. Im Beispiel wurde ein zweites XMLHttpRequest Objekt verwendet rqp, was nicht unbedingt erforderlich wäre. Immerhin wird gezeigt, dass auch mehrere Objekte gleichzeitig zu handeln sind. Die zweite Datei "table.php" wird mit einem "sleep(1)" ausgebremst, damit auch tatsächlich der neue Datensatz in der Liste angezeigt wird. table.php:
<?php
sleep(1);
$i = 0;
$con = mysql_connect("systemconsulting.de","username","passwort");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("datenbank", $con);
$result = mysql_query("SELECT id, vorname, name, strasse,plz, ort FROM einwohner order by name");
echo "<table align='center' width='100%'>";
echo "<tr style='background:#9EB7BC;font-weight:bold;'>";
echo "<td>Vorname</td>";
echo "<td>Name</td>";
echo "<td>Staße</td>";
echo "<td>PLZ</td>";
echo "<td>Ort</td>";
echo "</tr>";
while($row = mysql_fetch_array($result))
{
$i++;
if(round($i/2) == $i/2){
echo "<tr onClick=requesT_A(this.id) id='" . $row['id'] ."' class='a'
onmouseover=this.className='c' onmouseout=this.className='a'><td>"
. $row['vorname'] . "</td><td>" . $row['name']
. "</td><td>" .$row['strasse'] . "</td><td>"
. $row['plz'] . "</td><td>"
. $row['ort'] . "</td></tr>";
}else{
echo "<tr onClick=requesT_A(this.id) id='" . $row['id'] ."' class='b'
onmouseover=this.className='c' onmouseout=this.className='b'><td>"
. $row['vorname'] . "</td><td>" . $row['name']
. "</td><td>" .$row['strasse'] . "</td><td>"
. $row['plz'] . "</td><td>"
. $row['ort'] . "</td></tr>";
}
}
echo "</table>";
mysql_close($con);
?>
Die Funktion "Datensatz löschen": Generell wird beim Anklicken der Liste der ausgewählte Datensatz mit seinen Inhalten im Formular abgebildet, wie oben bereits ausgeführt. <tr onClick=requesT_A(this.id) id='" . $row['id'] ."'> requesT_A(this.id):
function requesT_A(id){
document.getElementById("new").className="dis";
document.getElementById("new").style.visibility="hidden";
document.getElementById("save").className="dis";
document.getElementById("save").style.visibility="hidden";
document.getElementById("kill").className="show";
document.getElementById("kill").style.visibility="visible";
document.forms["individuals"].elements['selected'].value=id;
rqo.open('get', 'show.php?id='+ id);
rqo.onreadystatechange = receivE_A;
rqo.send(null);
}
function receivE_A(){
if(rqo.readyState == 4){
my_string=rqo.responseText;
suche = my_string.indexOf(";");
vorname = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['vorname'].value = vorname;
suche = my_string.indexOf(";");
name = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['name'].value = name;
suche = my_string.indexOf(";");
ausweisnummer = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['ausweisnummer'].value = ausweisnummer;
suche = my_string.indexOf(";");
geburtsdatum = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['geburtsdatum'].value = geburtsdatum;
suche = my_string.indexOf(";");
strasse = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['strasse'].value = strasse;
suche = my_string.indexOf(";");
plz = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['plz'].value = plz;
suche = my_string.indexOf(";");
ort = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['ort'].value = ort;
suche = my_string.indexOf(";");
telefon = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['telefon'].value = telefon;
suche = my_string.indexOf(";");
telefax = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['telefax'].value = telefax;
suche = my_string.indexOf(";");
email = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.forms["individuals"].elements['email'].value = email;
suche = my_string.indexOf(";");
geschlecht = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
if(geschlecht==1) {
document.forms["individuals"].elements[10].checked = false;
document.forms["individuals"].elements[11].checked = true;
} else {
document.forms["individuals"].elements[10].checked = true;
document.forms["individuals"].elements[11].checked = false;
}
suche = my_string.indexOf(";");
passbild = my_string.substring(0, suche);
my_string = my_string.substring(suche+1,1000);
document.images[0].src=passbild;
suche = my_string.indexOf(";");
bemerkung = my_string.substring(0, suche);
document.forms["individuals"].elements['bemerkung'].value = bemerkung;
}
return
}
Sieht zwar mächtig aus, ist aber ganz harmlos. Die PHP-Datei "show.php" gibt einfach einen String zurück, der dann schrittweise zerlegt wird, um die entsprechenden Formularinhalte verfügbar zu machen (viele Wege führen nach Rom - dieser ist mir als erster eingefallen und funktioniert ja. Man könnte die Zerlegung ebenso gut in der PHP-Datei handeln). Nachdem die Formularinhalte ausgegeben sind, werden die Steuerelemente entsprechend gehandelt. Hier wird der Aktion-Button "[Datensatz löschen" aktiviert und "[Datensatz speichern]", "[Neuer Datensatz]" auf unsichtbar gesetzt. Den Anwendern steht nun frei, den ausgewählten Datensatz zu löschen oder nicht. Um weiter zu kommen muss er zumindest auf den Button "[Datensatz löschen]" klicken (die Aktion kann er abbrechen und von vorne beginnen. Datensatz löschen: Der Aktion-Button "[Datensatz löschen]" ruft die Funktion "requesT_C()" mit der "id" des ausgewählten Datensatzes auf. <input id="kill" onclick=requesT_C(document.forms["individuals"].elements["selected"].value)>: Die Anwender werden gefragt, ob sie tatsächlich löschen wollen, und wenn ja, wird zunächst die PHP-Datei "delete.php" im Hintergrund gerufen, um den Staz zu löschen. Danach wird mit "table.php" (siehe oben) die Liste aktualisiert.
function requesT_C(id){
document.getElementById("new").className="show";
document.getElementById("new").style.visibility="visible";
document.getElementById("kill").className="dis";
document.getElementById("kill").style.visibility="hidden";
ob_kill=confirm('Datensatz wirklich loeschen?');
if(ob_kill==true){
rqo.open('get', 'delete.php?id='+ id);
rqp.open('get', 'table.php');
rqp.onreadystatechange = receivE_C;
rqo.send(null);
rqp.send(null);
}else{
return
}
}
function receivE_C(){
if(rqp.readyState == 4){
alert('Datemsatz wurde geloescht.')
document.getElementById("liste").innerHTML = rqp.responseText;
for (i=0; i<13 ; i++ ) {
document.forms["individuals"].elements[i].value='';
}
document.forms["individuals"].elements[10].checked = false;
document.forms["individuals"].elements[11].checked = false;
document.images[0].src="images/phantom.jpg";
document.getElementById("save").className="show";
document.getElementById("save").style.visibility="visible";
}
return
}
Nachdem die aktualisierte Liste ausgegeben ist, werden die Steuerelemente gemäß der Steuerlogik aktualisiert. Zum Abschluss noch die Datei: delete.php:
<?php
$id = $_REQUEST['id'];
$con = mysql_connect("systemconsulting.de","username","passwort");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("datenbank", $con);
$d_string = "delete FROM einwohner WHERE id=" . $id;
mysql_query($d_string);
mysql_close($con);
?>
Zugehörende Dateien: ajax-start.php table.php enter.php show.php delete.php dump.txt style.css |
|||