SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

PHP 5.3 & MySQL 5.1

PHP 5.3 & MySQL 5.1 zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQL/MySQLi

MySQL/MySQLi Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQL/MySQLi diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 09.12.2006, 14:46:01
linux23 linux23 ist offline
Anfänger
 
Registriert seit: Dec 2006
Beiträge: 1
Auslesen und beschreiben einer MySQL Datenbank

Hi,

ich will für meine Web Seite eine MySQL Datenbank erstellen mit folgenden Funktionen:

1. Es soll eine Spalte für User geben, eine für Passwörter und eine für E-Mail Adressen.

(a) Wie würde die Datenbank aussehen?

2. Wie kann man dann aus der Datenbank bestimmte Felder auslesen? Wenn man zum Beispiel das Passwort von "user1" auslesen will, was muss man da machen?

3. Wie kann man eine Datenbank bearbeiten? Wenn man Zum Beispiel die E-Mail Adresse von "user1" bearbeiten will?

4. Wie kann man bestimmte Zellen oder Spalten aus der Datenbank entfernen? Wenn man zum Beispiel "user1" löschen will, was muss man da machen?

Es wäre toll, wenn mir jemand helfen kann! Vielen Dank schon mal jetzt für die Hilfe.

VG linux23
Mit Zitat antworten
  #2  
Alt 09.12.2006, 14:58:48
BenniG. BenniG. ist offline
Member
 
Registriert seit: Oct 2006
Beiträge: 610
AW: Auslesen und beschreiben einer MySQL Datenbank

Am besten liest du dir erstmal was zum thema durch, das hier von null auf zu erklären ist recht langwierig und foren sind ja für konkrete probleme...
http://ffm.junetz.de/members/reeg/DSP/
Mit Zitat antworten
  #3  
Alt 09.12.2006, 15:01:40
Damir Damir ist offline
Administrator
 
Registriert seit: Jan 2002
Ort: Köln
Alter: 49
Beiträge: 1.276
AW: Auslesen und beschreiben einer MySQL Datenbank

Da hat BenniG. recht... Schau dir erst einmal die Grundlagen an. Danach brauchst du für deine Ansprüche die Befehle SELECT, INSERT, UPDATE und DELETE.

Ist einfacher als du denkest, wirklich....

Damir
Mit Zitat antworten
  #4  
Alt 09.12.2006, 15:33:03
marc26 marc26 ist offline
Anfänger
 
Registriert seit: Apr 2006
Beiträge: 50
AW: Auslesen und beschreiben einer MySQL Datenbank

Die beiden haben natürlich recht..., aber hier vielleicht eine kleine Einstiegshilfe:

Die Datenbank: (mySQL / Name: users)

user_id (auto-increment, primary key)
user_name (text)
user_password (text)
user_email (text)

Die Datenbank-Connection: (mySQL / Name: users)
Normalerweise lagert man die Datenbank-Connection in eine externe PHP Datei aus (z.B. conn.php) und verlinkt auf jeder Seite, auf der man Datenbankverbindungen benötigt vorher auf die conn.php.

conn.php kann so aussehen (in diesem Fall lokal auf deinem Rechner):

PHP-Code:
<?php
$hostname_connDB 
"localhost";
$database_connDB "users";
$username_connDB "root";
$password_connDB "1234";
$connDB mysql_connect($hostname_connDB$username_connDB$password_connDB) or trigger_error(mysql_error(),E_USER_ERROR); 
?>
Auf der Seite, auf der du eine Datenbankverbindung (wie die folgenden erstellen willst), verlinkst du gleich zu Beginn auf die conn.php Connection Seite):

PHP-Code:
<?php
// db connection
require_once('conn.php');
?>
Das Einfügen: (mySQL)
Die user_id wird nicht von dir eingefügt, sondern das erledigt die Datenbank durch die Einstellung 'auto-increment' alleine. Das ist wichtig, damit jedem Datensatz eine unverwechselbare ID (user_id) zugewiesen wird, anhand derer du z.B. in der Select Anweisung durch deine Datensätze navigieren kannst. Es kann so (auf der technischen Seite) nie zu Verwechslungen kommen, selbst wenn du es zulassen würdest, dass mehrere User den selben Namen haben.

PHP-Code:
<?php
// get user info
$user_name 'Klaus';
$user_pasword 'xray23';
$user_email 'mailto@muster.de';

// insert user info
$insertSQL "
INSERT INTO users (
user_name,
user_password,
user_email


VALUES (
'"
.$user_name."',
'"
.$user_password."',
'"
.$user_email."'
)"
;    

mysql_select_db($database_connDB$connDB);
$result mysql_query($insertSQL$connDB) or die(mysql_error());
?>
Das Auslesen eines einzelnen Datensatzes: (mySQL)
In diesem Fall wird das Passwort eines einzelnen Users erfragt. Die Anzahl der auszugebenden Datensätze begrenzt man mit 'LIMIT = 1'.

PHP-Code:
<?php
// get user_id
$user_id 1;

// get user password
mysql_select_db($database_connDB$connDB);
$query_rsGetUserPassword "

SELECT * 
FROM users
WHERE users.user_id = '"
.$user_id."'
LIMIT 1
"
;

$rsGetUserPassword mysql_query($query_rsGetUserPassword$connDB) or die(mysql_error());
$row_rsGetUserPassword mysql_fetch_assoc($rsGetUserPassword);
$totalRows_rsGetUserPassword mysql_num_rows($rsGetUserPassword);

// echo result: user_password
echo $row_rsGetUserPassword['user_password'];
?>
oder wenn du die Ausgabe direkt im HTML unterbringen willst:
Code:
<b><?= $row_rsGetUserPassword['user_password'] ?></b>
Das Auslesen mehrerer Datensätze: (mySQL)
In diesem Fall sollen alle User Namen und die dazugehörigen Passwörter erfragt werden. Die Anzahl der auszugebenden Datensätze kann man wiederum mit 'LIMIT = 10' berenzen oder man lässt 'LIMIT' einfach weg dann werden alle Datensätze ausgegeben. Mit 'ORDER BY' lässt sich die Reihenfolge der Datensätze beeinflussen. 'ASC' steht für 'ascending' (aufsteigend: 1,2,3,4 o. a,b,c,d) und DESC steht für 'descending' (absteigend: 4,3,2,1 o. d,c,b,a).

Damit man gegebenenfalls auf das Ergebnis dieser Datenbankabfrage mehrfach zurückgreifen kann, packen wir die gefundenen Datensätze in ein Array ($allUserInfo). Auf den Inhalt dieses Arrays greift man dann zurück, wenn man die User Namen und Passwörter im HTML darstellen will.

Übrigens: Das * hinter dem Select sagt aus, dass diese Abfrage die Daten aus jeder Datenbanktabellenspalte (dh. user_id,user_name,user_password,user_email) abfragt. Da wir für unsere Ausgabe von User Namen und User Passwörtern aber nicht alle brauchen, könnte man das Sternchen auch durch die einzelnen Spalten, die man braucht ersetzen: SELECT users.user_name, users.user_password. Für unser Beispiel ist das jetzt egal, dennoch sollte man sich das angewöhnen, da bei grossen Datenbanken die Menge der überflüssig abgefragten Spalten auf die Performance geht.

PHP-Code:
<?php
// get user info
mysql_select_db($database_connDB$connDB);
$query_rsGetUserInfo "

SELECT * 
FROM users
ORDER BY users.user_name ASC
LIMIT 10
"
;

$rsGetUserInfo mysql_query($query_rsGetUserInfo$connDB) or die(mysql_error());
$row_rsGetUserInfo mysql_fetch_assoc($rsGetUserInfo);
$totalRows_rsGetUserInfo mysql_num_rows($rsGetUserInfo);

// results in array
do { 

    
$allUserInfo[] = $row_rsGetUserInfo

} while (
$row_rsGetUserInfo mysql_fetch_assoc($rsGetUserInfo));
?>
Im HTML sähe die Ausgabe in einer Tabelle dann so aus (du kannst den HTML Code jederzeit durch PHP Code unterbrechen, solange der in <?php ... ?> eingeschlossen ist):
PHP-Code:
<table>
<?php
// loop array
foreach ($allUserInfo as $item => $value) {

    echo 
'

    <tr>
      <td>
          <b><?= $value['
user_name'] ?></b>
      </td>
      <td>
          <?= $value['
user_password'] ?>
      </td>
    </tr>

    '
;

}
?>
</table>
Das Ändern: (mySQL)

PHP-Code:
<?php
// get user_id
$user_id 1;

// get new user_password
$newpassword 'lkwpeter';

// update user_password
mysql_select_db($database_connDB$connDB);
$query "UPDATE users SET user_password = '".$newpassword."' 
WHERE user_id = '"
.$user_id."'";
mysql_query($query);
?>
Das Löschen: (mySQL)

PHP-Code:
<?php
// get user_id
$user_id 1;

// delete user_password
mysql_select_db($database_connDB$connDB);
$query "DELETE FROM users WHERE user_id = '".$user_id."'";
mysql_query($query);
?>

Geändert von marc26 (10.12.2006 um 15:34:08 Uhr)
Mit Zitat antworten
  #5  
Alt 09.12.2006, 15:37:49
Damir Damir ist offline
Administrator
 
Registriert seit: Jan 2002
Ort: Köln
Alter: 49
Beiträge: 1.276
AW: Auslesen und beschreiben einer MySQL Datenbank

@marc26
Danke das du dir die Zeit genommen hast!!!!
Mit Zitat antworten
  #6  
Alt 09.12.2006, 15:43:43
marc26 marc26 ist offline
Anfänger
 
Registriert seit: Apr 2006
Beiträge: 50
AW: Auslesen und beschreiben einer MySQL Datenbank

es sieht wahrlich komplizierter aus als es ist...
Mit Zitat antworten
  #7  
Alt 10.12.2006, 14:27:16
SVEN22 SVEN22 ist offline
Anfänger
 
Registriert seit: Dec 2006
Beiträge: 1
AW: Auslesen und beschreiben einer MySQL Datenbank

hey marc, hat mir sehr weitergeholfen, 2 kleine Probleme hab ich noch a) ich möchte überprüfen, ob das wirklich eine Email Adresse ist und b) ich möchte die Tabellenzeilen abwechselnd mit unterschiedlichen Hintergrundfarben versehen. Vielleicht kannst du das noch ergänzen. Danke
Mit Zitat antworten
  #8  
Alt 10.12.2006, 15:37:43
marc26 marc26 ist offline
Anfänger
 
Registriert seit: Apr 2006
Beiträge: 50
AW: Auslesen und beschreiben einer MySQL Datenbank

Vor dem Einfügen: Validierung
Weil es gefragt wurde, kurz ein paar Worte zur Validierung. Es ist immer gut zu wissen, was man sich so alles in die Datenbank schreibt. Bestenfalls habt ihr z.B. Tausende von Anmeldungen und ein paar Spinner sind immer darunter, die versuchen euch und eurer DB zu schaden. In einem ersten Schritt sollte man die Daten, die aus einem Formular kommen validieren, auch wenn es sich um so scheinbar harmlose Dinge wie Email Adressen und User Namen handelt.

Drei Fälle sind eigentlich gängig:

a) Überprüfen, welche Länge ein String hat
PHP-Code:
<?php
// set max. length
$maxlength 50;

// get form data
$user_name $_POST['user_name'];

// check length
if (strlen($user_name) > $maxlength) {

     
// redirect to error page
    
header ("Location: error.php");

}
?>
b) Überprüfen, ob es sich dabei ausschliesslich um Zahlen und Buchstaben handelt
Diese Überprüfung kann mit 'normalem' PHP ziemlich lang werden, deshalb bedient man sich hier gerne einer 'Regular Expression' (regexp).

PHP-Code:
<?php
// function: only letters and numbers allowed
function onlyLettersNumbers($string) {
    
    
$eregi eregi_replace("([A-Z0-9]+)","",$string);
 
    if (empty(
$eregi)) {
  
        return 
true;
    }
 
return 
false;

// get form data
$user_name $_POST['user_name'];

// check letters and numbers
if (onlyLettersNumbers($user_name) == false) {

    
// redirect to error page
    
header ("Location: error.php");

}


?>
c) Überprüfen, ob eine Email Adresse gültig ist
Ob eine Email Adresse wirklich gültig ist, also ob sie wirklich existiert, kann man so natürlich nicht überprüfen. Allerdings kann man kontrollieren, ob die eingegebene Email Adresse zumindest so aussieht, d.h. alle Elemente einer Email Adresse hat. Die folgende Funktion muss man nicht komplett verstehen, was sie tut ist aber relativ simpel: sie überprüft, ob ein@ Zeichen vorhanden ist, ob sich vor dem @ Zeichen zugelassene Zeichen befinden, ob sich danach zugelassene Zeichen befinden, ob danach ein Punkt folgt und danach wiederum mind. 2 zugelassene Zeichen für den Domain Namen.

PHP-Code:
<?php
function checkEmail($email) {
    
// First, we check that there's one @ symbol, and that the lengths are right
    
if (!ereg("^[^@]{1,64}@[^@]{1,255}$"$email)) {
    
// Email invalid because wrong number of characters in one section, or wrong number of @ symbols.
    
return false;
    }
    
    
// Split it into sections to make life easier
    
$email_array explode("@"$email);
    
$local_array explode("."$email_array[0]);
    for (
$i 0$i sizeof($local_array); $i++) {
        if (!
ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$"$local_array[$i])) {
        return 
false;
        }
    } 
     
    if (!
ereg("^\[?[0-9\.]+\]?$"$email_array[1])) { // Check if domain is IP. If not, it should be valid domain name
        
$domain_array explode("."$email_array[1]);
        if (
sizeof($domain_array) < 2) {
            return 
false// Not enough parts to domain
        
}
        for (
$i 0$i sizeof($domain_array); $i++) {
            if (!
ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$"$domain_array[$i])) {
            return 
false;
            }
        }
    }

return 
true;

}

// get form data
$user_email $_POST['user_email'];

// check if email is valid
if (checkEmail($user_email) == false) {

  
// redirect to error page
  
header ("Location: error.php");

}
?>

Vor dem Einfügen: SQL Injections verhindern
Um zu verhindern, dass nach der Eingabe von Formulardaten aus Eurer INSERT Anweisung eine DELETE Anweisung wird, sollte man sich einmal mit dem Thema 'SQL Injections' auseinandersetzen. Im Kern geht es darum, dass bestimmte Formulareingaben dazu führen können, dass Euer SQL Code 'erweitert' wird - und das kann Schaden anrichten. Wie man diesem Problem begegnet kann unterschiedlich sein, es hängt von Eurer Version und bestimmten Konfigurationen ab. Ein gutes Stichwort hierzu: 'magic_quotes'.

Die folgende Funktion führt dazu, dass Eure Formulareingaben vor der Verwendung in einem SQL Statement 'escaped' werden. D.h., dass Zeichen die schädlich sein könnten z.B. Hochkommas mit einem \ (Slash) versehen werden, so dass Sie im SQL Statement keinen Schaden mehr anrichten können.

Die Funktion fährt zweigleisig, so dass 'escaped' wird, unabhängig davon ob magic_quotes an- oder ausgeschaltet sind.

PHP-Code:
<?php
function noInjection($value) {
   
   
// Stripslashes
   
if (get_magic_quotes_gpc()) {
       
$value stripslashes($value);
   }
   
   
// Quote if not a number or a numeric string
   
if (!is_numeric($value)) {
       
$value mysql_real_escape_string($value);
   }
   
   return 
$value;
}
?>
Die Werte in Eurem SQL Statement lasst ihr jetzt z.B. vor dem Insert durch diese Funktion laufen:

PHP-Code:
<?php
// get user info
$user_name 'Klaus';

// insert user info
$insertSQL "
INSERT INTO users (
user_name


VALUES (
'"
.noInjection($user_name)."'
)"
;    

mysql_select_db($database_connDB$connDB);
$result mysql_query($insertSQL$connDB) or die(mysql_error());
?>
Zum Thema Sicherheit gibt es in PHP/SQL sehr viel zu sagen, mit einer vernünftigen Validierung und den magic_quotes fahrt ihr aber zunächst einmal schon sehr gut.
Mit Zitat antworten
  #9  
Alt 10.12.2006, 16:13:22
marc26 marc26 ist offline
Anfänger
 
Registriert seit: Apr 2006
Beiträge: 50
AW: Auslesen und beschreiben einer MySQL Datenbank

Das Auslesen mehrerer Datensätze mit modulo (z.B. abwechselndem Zeilenhintergrund):
Der 'modulo' ist schon fast ein Reizthema in Foren. Deshalb vielleicht nochmal ganz einfach. Der 'modulo' ist ein Zähler, der so lange zählt, wie ihr es ihm sagt und sich ständig wiederholt bis er kein Futter mehr hat.

Ein Beispiel:
PHP-Code:
<?php
// Futter
$total 10;

for (
$i=0;$i<$total;$i++) {

    echo 
'Futter: '.$i.' - Modulo: '.($i%4).'<br/>'// modulo Durchläufe: 4, d.h. 0,1,2,3,0,1,2,3 usw.

}
?>
Bei einem 'modulo' von 4 sieht die Ausgabe dann so aus:

Code:
Futter: 0 - Modulo: 0
Futter: 1 - Modulo: 1
Futter: 2 - Modulo: 2
Futter: 3 - Modulo: 3
Futter: 4 - Modulo: 0
Futter: 5 - Modulo: 1
Futter: 6 - Modulo: 2
Futter: 7 - Modulo: 3
Futter: 8 - Modulo: 0
Futter: 9 - Modulo: 1
Dieses Verhalten hilft, wenn man z.B. in einer Tabellenausgabe die Hintergrundfarbe der einzelnen Zeilen abwechselnd weiss und grau darstellen will. Dazu muss man statt eines modulos von 4 (wie im Beispiel) den modulo auf 2 stellen (d.h. er zählt in der Schleife immer nur 0,1,0,1,0,1 usw.). Die Ausgabe der Tabellenzeilen erweitert man jetzt um ein IF und weist an, dass der Hintergrund bei einem modulo-Wert von 0 bitte den Farbwert '#ffffff' haben soll und im Falle des modulo-Werts von 1 den Farbwert '#cccccc'. Das 'Futter' aus dem obigen Beispiel ($total = 10) ergibt sich aus der Gesamtzahl der Datensätze, die man aus der Datenbank abgefragt hat. Sie stehen in der Variable $totalRows_rsGetUserInfo.

Also zunächst die Datenbankabfrage (wie gehabt):

PHP-Code:
<?php
// get user info
mysql_select_db($database_connDB$connDB);
$query_rsGetUserInfo "

SELECT * 
FROM users
ORDER BY users.user_name ASC
LIMIT 10
"
;

$rsGetUserInfo mysql_query($query_rsGetUserInfo$connDB) or die(mysql_error());
$row_rsGetUserInfo mysql_fetch_assoc($rsGetUserInfo);
$totalRows_rsGetUserInfo mysql_num_rows($rsGetUserInfo);

// results in array
do { 

    
$allUserInfo[] = $row_rsGetUserInfo

} while (
$row_rsGetUserInfo mysql_fetch_assoc($rsGetUserInfo));
?>
Jetzt die HTML Ausgabe erweitert um den 'modulo':

PHP-Code:
<table>
<?php
// reset counter
$i 0;

// loop array
foreach ($allUserInfo as $item => $value) {

    if ((
$i%2) == 0) { // modulo 2 (0,1,0,1,0,1 etc.)

        // bg color: white
        
echo '
    
        <tr style="background-color:#FFFFFF;">
        
            <td>
                <b><?= $value['
user_name'] ?></b>
            </td>
        
            <td>
                <?= $value['
user_password'] ?>
            </td>
        
        </tr>
    
        '
;

    } else {
        
        
// bg color: grey
        
echo '
    
        <tr style="background-color:#CCCCCC;">
        
            <td>
                <b><?= $value['
user_name'] ?></b>
            </td>
        
            <td>
                <?= $value['
user_password'] ?>
            </td>
        
        </tr>
    
        '
;

    }
    
    
// set counter +1
    
$i++;
}
?>
</table>
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Text & Variable aus Datenbank auslesen und ausgeben Don Stefano PHP Grundlagen 6 29.09.2005 00:47:18
Daten aus MySQL Datenbank lesen memalon PHP Grundlagen 4 20.02.2005 18:40:45
Suchen in einer MySQL Datenbank Esco MySQL/MySQLi 2 03.09.2004 10:33:51
mysql datenbank für google auslesen Didi65de MySQL/MySQLi 4 16.08.2004 12:55:44
Variablen aus datei in Mysql datenbank schreiben saidbuchari PHP Grundlagen 0 04.03.2004 14:12:23


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:11:07 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.


© 2001-2020 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt