php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.08.2006, 11:25  
Erfahrener Benutzer
 
Registriert seit: 16.03.2004
Beiträge: 170
Kori
Standard Via get aus db auslesen/rausfiltern und ausgeben!

Hi, bin immer noch in der Lernphase!

Hab mich an was neuem gemacht, und zwar habe ich eine Datenbank
Tabelle lautet: loveguru
ES gibt: id und mail
Es gibt nur ein Datensatz, und zwar 1 bei ID und bei mail Test@test.de

Ich möchte über Get den ersten Datensatz anwählen, und dann die Mail daraus filtern und ausgeben, ich rauf mir schon die Haare finde den Fehler nicht:

form.php?id=1 rufe ich auf!

form.php
PHP-Code:
<?php
error_reporting
(E_ALL);
$server "localhost"$user "benni"$pass "B3nn1";
$database "benni";
$table "loveguru";

$verbindung = @mysql_connect($server$user$pass)
or die (
"Konnte Verbindung nicht herstellen");

mysql_select_db($database$verbindung)
or die (
"Fehler beim Zugriff auf die verhergesehende Datenbank");

$id $_GET['id'];

$sql "SELECT $id FROM $table";
$query mysql_query($sql);
$zeile mysql_fetch_array($query);
$an $zeile['mail'];
echo 
$an;
mysql_close($verbindung);
?>
Kori ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.08.2006, 11:32  
there's only one psycho
 
Benutzerbild von PsychoEagle
 
Registriert seit: 21.08.2007
Beiträge: 1.283
PHP-Kenntnisse:
Anfänger
PsychoEagle ist ein sehr geschätzer MenschPsychoEagle ist ein sehr geschätzer MenschPsychoEagle ist ein sehr geschätzer Mensch
PsychoEagle eine Nachricht über ICQ schicken PsychoEagle eine Nachricht über Skype™ schicken
Standard

Dein SQL Query ist falsch. So tust du nur die Spalte ID ausgeben

Also gibt es $zeile['mail'] gar nicht, sondern nur $zeile['id']

Dein Query muss folgendermaßen aussehen:

PHP-Code:
<?php
  $sql 
"SELECT mail FROM $table WHERE id = $id"
?>
Achte bitte aber hier auf SQL-Injection, da in $_GET['id'] auch SQL Befehle etc stehen könnten, die alles löschen oder ändern etc.

SQL-Injection

Informier dich hierzu auch per Google oder per Forensuche ein wenig

Ich hoffe ich konnte helfen.

MFG
__________________
"Weaseling out of things is important to learn. It's what separates us from the animals ... except the weasel." (Homer J. Simpson)
PsychoEagle ist offline  
Alt 08.08.2006, 11:32  
Gast
 
Beiträge: n/a
Standard

Du bekommst doch bestimmt auch eine Notice-Meldung, oder nicht?

$sql = "SELECT $id FROM $table";
$an = $zeile['mail'];

Richtig debuggen
1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(E_ALL);
3. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
4. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde (oder auch nicht).
5. Schritt 3 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
6. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
7. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
8. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

Die Ausgaben per echo kann man sich ersparen, in dem man einen Debugger benutzt, was eigentlich selbstverständlich sein sollte.

Gruß
phpfan
 
Alt 08.08.2006, 11:35  
Erfahrener Benutzer
 
Registriert seit: 16.03.2004
Beiträge: 170
Kori
Standard

Zitat:
Zitat von PsychoEagle
Dein SQL Query ist falsch. So tust du nur die Spalte ID ausgeben

Also gibt es $zeile['mail'] gar nicht, sondern nur $zeile['id']

Dein Query muss folgendermaßen aussehen:

PHP-Code:
<?php
  $sql 
"SELECT mail FROM $table WHERE id = $id"
?>
Achte bitte aber hier auf SQL-Injection, da in $_GET['id'] auch SQL Befehle etc stehen könnten, die alles löschen oder ändern etc.

SQL-Injection

Informier dich hierzu auch per Google oder per Forensuche ein wenig

Ich hoffe ich konnte helfen.

MFG
Vielen Dank, funktioniert!
Kori ist offline  
Alt 08.08.2006, 11:47  
there's only one psycho
 
Benutzerbild von PsychoEagle
 
Registriert seit: 21.08.2007
Beiträge: 1.283
PHP-Kenntnisse:
Anfänger
PsychoEagle ist ein sehr geschätzer MenschPsychoEagle ist ein sehr geschätzer MenschPsychoEagle ist ein sehr geschätzer Mensch
PsychoEagle eine Nachricht über ICQ schicken PsychoEagle eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von Kori
Vielen Dank, funktioniert!
Kein Problem, aber hast du auch verstanden warum so?

Und wie gesagt, modifizier es so, dass es keine SQL-Injection mehr geben kann Ist sehr wichtig, wenn du Projekte hast, bei denen du nicht mehr testest.

Viel Spass noch beim weiter Lernen
__________________
"Weaseling out of things is important to learn. It's what separates us from the animals ... except the weasel." (Homer J. Simpson)
PsychoEagle ist offline  
Alt 08.08.2006, 13:26  
Erfahrener Benutzer
 
Registriert seit: 16.03.2004
Beiträge: 170
Kori
Standard

Ja verstanden, aber wie ist denn der Befehl für escape integer, bzw zahl, weil ich kann bei wiki nur escape string finden, und ich übergebe ja ne zahl?

mfg
und thx nochmal
Kori ist offline  
Alt 08.08.2006, 14:24  
there's only one psycho
 
Benutzerbild von PsychoEagle
 
Registriert seit: 21.08.2007
Beiträge: 1.283
PHP-Kenntnisse:
Anfänger
PsychoEagle ist ein sehr geschätzer MenschPsychoEagle ist ein sehr geschätzer MenschPsychoEagle ist ein sehr geschätzer Mensch
PsychoEagle eine Nachricht über ICQ schicken PsychoEagle eine Nachricht über Skype™ schicken
Standard

Bei PHP ist es manchmal egal, was übergeben wird. Zahlen werden/können in strings umgewandelt. Sprich, da musst du nicht überall prüfen ob zahl oder text.

Wenn du prüfen willst, ob es eine Zahl ist, dann bauchst du

is_numeric()

oder eben RegEx.

Um zu escapen, wie du es willst, benutzt du am Besten addslashes

addslashes()

Zum wieder Entfernen bei der Ausgabe dann stripslashes

stripslashes()

MFG
PsychoEagle ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
verschachtelte Rubriken ausgeben / alle anzeigen prinzli PHP Tipps 2008 3 25.02.2008 22:37
beim letzten Datensatz anderes Icon ausgeben prinzli Datenbanken 16 30.11.2007 23:50
Es werden zuviel Daten ausgeben Kein Genie PHP Tipps 2006 5 12.11.2006 12:37
mysql - text ausgeben dws PHP Tipps 2006 14 15.06.2006 22:50
Download starten (header funktion), vorher Text ausgeben? Harakiri81 PHP-Fortgeschrittene 19 16.05.2006 21:15
[Erledigt] Datensätze blockweise nacheinander ausgeben?? Datenbanken 6 13.03.2006 14:22
Codeschnipsel nur bei bestimmten Stylesheet ausgeben PHP Tipps 2005-2 2 24.07.2005 11:53
Ein Datensatz ausgeben PHP Tipps 2005 8 02.06.2005 21:52
Mehrere Zeilen aus MySQl ausgeben... King2k PHP Tipps 2005 4 31.05.2005 20:05
HTML - Datei ausgeben PHP Tipps 2005 5 19.02.2005 16:58
Funktion ausgeben PHP Tipps 2005 8 10.01.2005 17:18
[Erledigt] Array ausgeben PHP Tipps 2004-2 4 05.12.2004 00:53
Bestimmte Datenbank Felder nur einmal ausgeben Paulo PHP Tipps 2004-2 3 26.11.2004 16:39
[Erledigt] Ganze Tabelle ausgeben PHP Tipps 2004-2 1 21.11.2004 16:48
In GIF-Datei Datum und Uhrzeit ausgeben? PHP Tipps 2004-2 6 20.11.2004 18:03

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
$_get in db auslesen

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:16 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.