Anzeige
Tutorialbeschreibung

Schreiben mit PHP Teil 2

Schreiben mit PHP Teil 2

Natürlich besteht ‚Schreiben mit PHP’ nicht nur aus dem Schreiben in andere files, sondern auch in Tabellen der Datenbank – sicher keine Hexerei. Aber man sollte sich einmal das Wesentliche vor Augen halten!


Also zunächst sollten wir drei Dinge tun:
  1. Eine Tabelle anlegen, 
  2. ein Script erzeugen, das eine Verbindung zur Datenbank (der Vollständigkeit halber) herstellt und
  3. uns Fragen, wie heißen denn ALLE Schreibcodes in PHP für MysQl-Datenbank-Tabellen? 

    Fangen wir mit Punkt 3. an, zäumen wir also das Pferd von hinten auf: Es sind grundsätzlich nur drei Befehle:  
  • INSERT (schafft eine neue Zeile in der Tabelle und füllt [quasi in einem Schritt] diese neu geschaffenen Zeile mit Inhalt)  
  • UPDATE (bearbeitet den bisherigen Inhalt einer Zeile/Spalte und füllt ihn [auch gleichzeitig mit diesem Befehl] mit neuem Inhalt!
  • DELETE (löscht einen Datensatz aus einer Tabelle!)

Aufmerksame Leser werden jetzt vielleicht sagen, na ja das sind ja weit nicht alle Befehle, die in eine Datenbank schreiben können. Damit haben diese Leser sicher recht, natürlich müsste man auch CREATE, DELETE (einer ganzen Tabelle) bedenken, würde unser Thema nicht ‚Schreiben in eine Tabelle einer Datenbank’ heißen! 

Zurück zum Tutorial: 

Punkt 2.

… eine Verbindungsdatei zur Datenbank schaffen, wir nennen sie connect.php

<?php 

$mysqlhost = 'localhost'; 

$mysqluser = 'webmastersworld'; 

$mysqlpassword = 'Passwort'; 

$mysqldb = 'Datenbankname'; 

$con= @mysql_connect($mysqlhost,$mysqluser,$mysqlpassword); 

$mysqldb1 = @mysql_select_db($mysqldb,$con); ?> 

 

In Erinnerung an das ‚Performace-Tutorial’, halten wir nur fest, wir verwenden Quotes, bei TextStrings, KEINE Doppelquotes… ansonsten ist der Code klar! 

Punkt 3.

Wir nennen die Tabelle (phantasielos) ‚testtabelle’, die folgendermaßen aufgebaut ist: 

name

adress 

mail 

Bruno Mustermann1

Mustergasse 1 

bruno@mustermann1.de 

Bruno Mustermann2 

Mustergasse 2 

bruno@mustermann2.de  

 

Zum ersten Befehl: INSERT INTO

Nun wollen wir auch Bruno Mustermann3 eintragen! Die Zeile existiert noch nicht und muss angelegt werden und unser ‚neuer’ soll (mit der Schaffung der neuen Zeile) in diese neue Zeile eingetragen werden. 

Oben haben wir gelesen, dass diese beiden Aufgaben nur INSERT leistet! Wie sieht aber der entsprechende Code aus?

Nennen wir sie insert.php

<?include 'connect.php'; 

$sqleintrag="INSERT INTO testtabelle (`name`, `adress`, `mail`) VALUES ('".$name."', '".$adress."', '".$mail."');"; 

if(mysql_query($sqleintrag)) 

    { 

echo 'Insert in die Tabelle testabelle > OK<br>';     

    else 

echo 'Konnte Insert in die Tabelle testtabelle nicht anlegen. Grund: '.mysql_error().'<br>'); 

} ?

 

Nun ‚zerlegen’ wir einmal diesen Code: 

  • Die SQL-Query ist klar (Randbemerkung: hier sollten ausnahmsweise Doppelquotes [aus Übersichtsgründen, die Variablen sollten aber trotzdem in einem String geschrieben werden, um wenigstens so, die Rechenleistung des Parsers zu minimieren und die Performance zu erhöhen] verwendet werden), aber was sind das für ‚exotische’ 
  • QUOTES? > so genannte BACKQUOTES, sie müssen immer beim Spaltennamen stehen, manchmal lässt der Parser auch Codes ‚durch’ ohne Backquotes, es wäre aber falsch, deswegen zu meinen, man könne sie schon deshalb generell weglassen!  …  wie wird ein solcher Backquote auf dem Keyboard realisiert?
    Einfach: rechts neben der Taste für das ‚ß’ ist eine Taste dafür, die Backquotes, die wir benötigen, ist die SHIFT + unsere Taste + das nächste Zeichen (zumindest ein Leerzeichen, sonst zeigt sich eine Backquote nicht!). 
  • mysql_error() <- eine interessante PHP-Funktion! Jeder der mit mysql-Datenbanken arbeitet, sollte diese Funktion kennen und sie verwenden! Wenn Sie irgendwas in der mysql-query falsch gemacht haben (deswegen wurde auch oben eine Kontrollstruktur bei dieser Insert-Query verwendet), gibt diese Fuktion einen String aus, der den Fehler der Query näher beschreibt!      http://www.php-center.de/de-html-manual/function.mysql-error.html <- ein interessanter weiterführender Beitrag! 
    Wenn wir jetzt z.B.: in einem Formular … 

<form method="POST" action="insert.php"> 

  Name: <input type="text" name="name" size="20"><br> 

  Adresse: <input type="text" name="adress" size="20"><br> 

  E-Mail: <input type="text" name="mail" size="20"><br> 

  <input type="submit" value="Neu eintragen"><br> 

  <input type="reset" value="Löschen"></p></form> 

 

… unsere Variablen, name, adress und mail an insert.php übergeben, wird in unserer Tabelle (testtabelle), gleichzeitig eine neue Zeile (für diesen Neueintrag) geschaffen und sofort die Werte eingetragen. 

Wir haben also einen neuen Wert in eine Datenbanktabelle geschrieben! 

Exkurs: 

Manche werden sich fragen, in insert.php wurden als Variable $name … verwendet? Was ist dann mit $_POST[’name’] … das verwenden ja auch manche, ist da ein Unterschied? NEIN, das würde den selben Effekt erzielen, wieso also diese Unterscheidung? 

Manche Server sind in den so genannten GLOBALS (php.ini) auf ‚OFF’ gestellt, dann weiß der Server nicht, was z.B.: $name heißt! Er gibt dann sinngemäß folgenden Parserror aus: … Undefined T_Variable … 

Aber wie heißt die Lösung für dieses Problem? 

·         Man könnte natürlich die Globals aktivieren, also in der php.ini auf ON stellen, aber nicht immer hat man Zugriff auf die php.ini, z.B.: beim gemieteten Online-Server, wo nur der Serveradmin Zugriff hat und der würde es wahrscheinlich nicht gestatten, dass dort was geändert wird (zumeist hat er etwas aus irgendeinem Grund deaktiviert) … es gibt aber noch eine weitere Lösung:

·         Die Variable einfach definieren, das macht man bei der Variablenübergabe (wenn die form action POST ist) mit $_POST[’Variablenname=input type text name’]; 

Also wenn unser Server – beim obigen Script – die beschriebenen Probleme macht, dann modifizieren wir es einfach: 

2 Möglichkeiten: 

1. Wenn uns die Performance egal sein kann, weil z.B.: das Programm klein ist, dann modifizieren wir so: 

<?include 'connect.php'; 

$name=$_POST[’name’]; 

$adress=$_POST[‘adress’]; 

$mail=$_POST[’mail’]; 

$sqleintrag="INSERT INTO testtabelle (`name`, `adress`, `mail`) VALUES ('".$name."', '".$adress."', '".$mail."');"; 

if(mysql_query($sqleintrag)) 

    { 

echo 'Insert in die Tabelle testabelle > OK<br>';     

    } 

    else 

    { 

echo 'Konnte Insert in die Tabelle testtabelle nicht anlegen. Grund: '.mysql_error().'<br>');

    ?> 

 

2. Sollte aber die Performance doch eine Rolle spielen und wir nur die Variablendefinition (nolens volens) verkraften müssen, dann sollten wir folgendes schreiben: 

<?include 'connect.php'; 

$sqleintrag="INSERT INTO testtabelle (`name`, `adress`, `mail`) VALUES ('".$_POST[’name’]."', '".$_POST[‘adress’]."', '".$_POST[’mail’]."');"; 

if(mysql_query($sqleintrag)) 

    { 

echo 'Insert in die Tabelle testabelle > OK<br>';     

    } 

    else 

    { 

echo 'Konnte Insert in die Tabelle testtabelle nicht anlegen. Grund: '.mysql_error().'<br>');

    }?> 

 

Das ist zwar jetzt ein Performance-feindlicher Tipp (gerade von mir), aber wenn man ein Programm schreibt, das ‚Cross-Server’ funktionieren soll, ist es besser die Variablen immer zu definieren, hier könnte die sprichwörtliche ‚Sparsamkeit teuer’ werden, weil andernfalls das mühevoll geschriebene Programm auf diesem oder jenem Server überhaupt nicht läuft! 

Schreiben Sie nur ein Programm für einen bestimmten Server, ist es gut eine Testfile-Serie parat zu haben (Form + z.B.: andere file mit Schreibcode für *.txt > fertig), um schnell zu erfahren, wie diesbezüglich die php.ini eingestellt ist, ohne deswegen extra den Admin behelligen zu müssen. 

Nun zur zweiten Möglichkeit in Tabellen zu schreiben: Zu UPDATE

Die Aufgabenstellung ist klar: einen Datensatz bearbeiten, also verändern, bzw. durch einen neuen ersetzen! 

Gut, zumal wir jetzt den Code schon durchschauen, zeige ich ihn nur kurz, um dann die viel wichtigere Frage anzugehen, was mit UPDATE (über das Frontend) machbar ist. 

Zunächst zum Code (wir ändern damit den Namen von z.B.: Bruno Mustermann1): 

Wir nennen diese file update.php

<?$name = $_POST['name']; 

    $submit= $_POST[‘submit’]; 

    if ($submit="submit") 

$query=" 

    UPDATE 

    testtabelle 

    SET 

   `name`  = '".$name."' 

    WHERE 

   `adress` = 'Mustergasse 1'; "; 

    mysql_query($query) OR die ("<hr>".mysql_error()."<hr>".$query."<hr>");?> 

 

Aber wie bei tausenden Datensätzen wissen, wie jener Herr Mustermann heißt (im wirklichen Leben heißt er ‚irgendwie’), den man ändern will (der in der Mustergasse 1 wohnt)? Daher sollte man mit UPDATE immer den Lesebefehl SELECT paaren und eine Form schreiben, die den Datensatz ausliest! 

Also nennen wir alles form1.php

<? $result = mysql_query("SELECT `name` FROM testabelle WHERE `adress`='Mustergasse 1'"); 

  if (mysql_num_rows($result))

  { 

  while($row=mysql_fetch_array($result))

  { 

  $row['name'];  }} 

echo ’ <form method="POST" action="update.php"> 

  Name: <input type="text" name="name" size="20"      value=”<?=$row['name'];?>”><br>   <input type="submit" value="Ändern"><br> 

  <input type="reset" value="Löschen"></p></form>’;?> 

 

Sie sehen die verkürzte ‚echo-Form’ im value von form1.php <?=$row['name']?> è bessere Performance: 3 bytes gespart pro echo! … das kann sich in einem Programm (auf lange Sicht!) auszahlen. 

Last but not least, der letzte Schreibbefehl: DELETE! 

Mit ihm löschen wir einen Datensatz (Zeile) aus der Tabelle: 

<?$sqldelete=mysql_query("DELETE FROM testtabelle WHERE `adress`='Mustergasse 1'”); 

if (mysql_error($sqldelete)) 

echo "MySQL-Error ".mysql_errno().": ".mysql_error()."n"; 

else 

echo 'Datensatz gelöscht!'; 

}

?> 

 

 

DVD-Werbung
Kommentare
Achtung: Du kannst den Inhalt erst nach dem Login kommentieren.
Portrait von Malhadra
  • 02.06.2011 - 10:59

sehr schönes Tutorial...danke

Portrait von mastergeiger
  • 24.09.2010 - 18:53

Nice Codesnipptest, vorallem von man kein Bock hatt i-was anchzuschauen ^^

Portrait von Destruction929
  • 28.12.2009 - 21:06

Naja... sowas kann man schnell im Handbuch lesen. ;) ;)

Portrait von Luriel
  • 06.05.2007 - 11:22

Sehr lieb gedacht leider sehr schwer nachzuvollziehen aber dennoch eine hilfe

Portrait von cproducts
  • 07.08.2006 - 13:22

nicht schlecht musste es jedoch 2 mal durchlesen ;) tja.. aber hab es begriffen..
mfg xers

Portrait von dogger
  • 23.07.2006 - 15:18

Sehr hilfreich, wenn man längere Zeit nicht mit PHP gearbeitet hat und nicht der Profi ist

Portrait von lomion
  • 06.06.2006 - 09:21

etwas wirr geschrieben und manche stellen nicht gerade leicht verständlich erklärt...aber ansonsten top..ideal wenn man sich einen überblick verschaffen möchte um in die materie einszusteigen...

x
×
×