Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

warnmeldungen bei php in formularen

Frage Entwicklung

Mitglied: gechger

gechger (Level 1) - Jetzt verbinden

20.10.2008, aktualisiert 21.10.2008, 4051 Aufrufe, 5 Kommentare

Ich habe ein Eingabeformular das zunächst noch leer ist und bekomme Warnmeldungen

Hallo Forum,

ich habe ein Eingabeformular geschrieben, welches auch schon funktioniert. Was mich aber stört :

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'ODBC'@'XXXXXXXXXX.XXX.XXXXXX.de' (using password: NO) in
C:\xampp\htdocs\mzdaten\flag.php on line 50

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\mzdaten\flag.php on line 71

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\mzdaten\flag.php on line 83


Wenn das Script aufgerufen wird und noch keine Eingaben erfolgt sind, die EIngabefelder also leer sind, bekomme ich diese Warnungen.
Wie kann ich diese Warnungen vermeiden? Ein User würde dadurch mächtig irritiert.

Dies ist mein Script:


<!DOCTYPE HTML PUBLIC " -W3CDTD HTML 4.01 Transitiona lEN"
<html>
<head>
<title>Kunden Daten Flag ändern</title>
<meta name="author" content="MobilZeit GmbH">
<meta content="MobilZeit GmbH" name="GENERATOR">
</head>
<body bgcolor="#D3D3D3"> <font color="#291455">
<?php

Verbindung zur Datenbank mit den Kundendaten herstellen
$host = "xxxx.xxx.xxx";
$user = "dboxxxxxxx";
$kennwort = "xxxxxx";
$dbname = "dbxxxxxx";
$tabelle ="xxxxxxx";

Verbindung mit der Datenbank
$cldb = mysql_connect($host, $user, $kennwort);
or die(mysql_error());
mysql_select_db($dbname);

Variablen, die durch das Eingabeformular gefüllt werden
$kundenname=$_POST["kundenname"];

Script, welches ausgeführt werden soll
$sql = ("SELECT * FROM kddaten where name='$kundenname'");

Ausgabe der abgefragten Informationen...
$result=mysql_Query ($sql);

...und Ausgabe in ein Array
$row = mysql_fetch_row($result);

$user1 = "$row[5]"; Inhalte des Arrays, die Indexnummern per ECHO abgefragt, liefert genaue Informationen
$kennwort1 = "$row[3]";
$dbname1 = "$row[2]";
$tabelle1 ="$row[4]";
$anmeldung="$row[6]";

Verbindung zur Datenbank des Kunden, ausgelesen aus dem Array
$host2 = "$host";
$user2 = "$user1";
$kennwort2 = "$kennwort1";
$dbname2 = "$dbname1";
$tabelle2 ="$tabelle1";

Verbindung zur Kundendatenbank
$cldb = mysql_connect($host2, $user2, $kennwort2);
or die(mysql_error());
mysql_select_db($dbname2);

Übernahme aus dem Eingabefeld

$tagvon=$_POST["tagvon"];
$monatvon=$_POST["monatvon"];
$jahrvon=$_POST["jahrvon"];
$tagbis=$_POST["tagbis"];
$monatbis=$_POST["monatbis"];
$jahrbis=$_POST["jahrbis"];

$datumvon=$jahrvon."-".$monatvon."-".$tagvon." 00:00:00";
$datumbis=$jahrbis."-".$monatbis."-".$tagbis." 00:00:00";

$sql1 = ("SELECT * FROM $tabelle2 where datum > '$datumvon' and datum < '$datumbis' ");


Ausgabe der abgefragten Informationen...
$abfrage=mysql_Query ($sql1);
...und Ausgabe in ein Array
$row1 = mysql_fetch_row($abfrage);

$idintern = "$row1[1]";
Inhalte des Arrays, die Indexnummern per ECHO abgefragt, liefert genaue Informationen
$werte = "$row1[2]";
$datum = "$row1[3]";
$flag ="$row1[4]";
Ausgabe der Informationen
$abfrage = mysql_db_query($dbname2,$sql1);
or die(mysql_error());

?>
<table rules=row>
<?
while($array = mysql_fetch_array($abfrage)){
?>
<tr>
<td><?= $array[werte]; ?></td>
</tr>
<?
} // ENDE while($array = mysql_fetch_array($abfrage)) {
?>
</table>

<table>
<form action="flag.php" method="post">
<tr>
<td>Kunde</td>
<td><input name="kundenname"></td>
<td>Tag von</td>
<td><input name="tagvon" size="2" ></td>
<td>Monat von</td>
<td><input name="monatvon" size="2" ></td>
<td>Jahr von</td>
<td><input name="jahrvon" size="4" ></td>
<td>Tag bis</td>
<td><input name="tagbis" size="2" ></td>
<td>Monat bis</td>
<td><input name="monatbis" size="2" ></td>
<td>Jahr bis</td>
<td><input name="jahrbis" size="4" ></td>
</tr>
<td>
<input type="submit" value="Absenden"><br>
</td>
<td><input type="reset" value="Abbrechen">
</td>
</tr>
</table>
</form>


</body>
</html>
<?
mysql_close();
?>

Danke für jeden Tip
Christof
Mitglied: dog
20.10.2008 um 16:52 Uhr
Hallo,

mal abgesehen davon, dass das hier das falsche Forum ist hat dein Script eine schwerwiegende Probleme.
Aber um auf deine konkrete Fragestellung einzugehen:

Natürlich kommen die Fehlermeldungen, weil eben noch keine Werte eingegeben sind. Dein Code:
01.
//Variablen, die durch das Eingabeformular gefüllt werden 
02.
			$kundenname=$_POST["kundenname"]; 
03.
 
04.
			//Script, welches ausgeführt werden soll 
05.
			$sql = ("SELECT * FROM kddaten where name='$kundenname'"); 
06.
 
07.
			//Ausgabe der abgefragten Informationen... 
08.
			$result=mysql_Query ($sql);
Wird aber in jedem Fall ausgeführt und da liegt das Problem:
Du machst keine Prüfungen ob wirklich etwas vom Formular gesendet wurde.
Du solltest zumindest mit isset() oder empty() prüfen ob die Werte überhaupt belegt sind, bevor du die Datenbankabfrage absendest.
Bitte warten ..
Mitglied: dog
20.10.2008 um 17:19 Uhr
So, ich habe an deinem Script mal ein paar kleine Änderungen gemacht:

http://pastie.org/private/urrccuhqwytpwwxetuygw

Dennoch würde ich es auch so nicht produktiv einsetzen!

Hier ein paar Tipps:

- Wenn möglich einfache Anführungszeichen statt doppelte verwenden. Die Doppelten sind nur relevant wenn ein String eine Variable enthält - sonst kosten sie nur Rechenleistung.
- Regel 1 der Webprogrammierung: ALLES was aus Richtung User kommt muss geprüft werden. Wenn du das übergehst kannst du enorme Sicherheitsprobleme kriegen (siehe dazu SQL-Injection). Darum habe ich einige kleine Änderungen gemacht: Der String wird jetzt auf Steuerzeichen für SQL überprüft und die unschädlich gemacht und für die Zahlenwerte wird geprüft, dass sie in korrekten Wertebereichen sind.
- Du deklarierst viele Variablen doppelt (z.B. $host2, das aber immer genau den selben wert wie $host hat)
- or die(mysql_error()); ist als Abbruchkondition zwar zum Entwickeln okay, aber deine Benutzer sollte NIE Mysql-Fehlermeldungen zu gesicht bekommen (du solltest sie natürlich protokollieren)
- Verwende <?php statt <? oder <?= da momentan nicht wirklich klar ist, wie lange es diese Abkürzung noch geben wird und sie ohnehin nicht auf jedem Server funktioniert.

Ich würde dir empfehlen noch eine Lektüre über PHP-Sicherheit anzuschaffen wie es einige am Markt gibt, da erfahrungsgemäß die üblichen Lehrbücher das total umgehen, was zu haufenweise Sicherheitsproblemen führt.
Bitte warten ..
Mitglied: gechger
20.10.2008 um 19:51 Uhr
Hallo Max,

als Anfänger im php ist mir die Bedeutung der Funktion isset() noch nicht so richtig klar geworden. Werde mich mal näher damit beschäftigen müssen.

Doppelte Deklarierung hielt ich für notwendig, weil ich zwei Sachen durchführen will:
Im ersten Schritt will ich eine Datenbank abfragen, die ich angelegt habe. Dort drin befinden sich alle Zugangsdaten zu den Datenbanken unserer Kunden. Ein Mitarbeiter soll die nicht kennen, also verbinde ich mich ersteinmal mit dieser Datenbank , um aufgrund des eingegebenen Kundennamen im Formular dessen Zugangsdaten zu erhalten. Diese schreibe ich in ein Array. Danach will ich in die Kundendatenbank (mit den ermittelten Zugangsdaten) und bestimmte Informationen abrufen.

Deshalb habe ich den zweiten Zugang mit anderen Variablen gewählt, um Fehlinformationen zu vermeiden. Sie sehen zwar ähnlich aus, dienen aber zum Zugang zu unterschiedlichen Datenbanken.

Außerdem hast Du völlig Recht. In meinem Anfängerstadium bin ich froh, überhaupt Ergebnisse zu erzielen. Über Sicherheitskonzepte kann ich mir jetzt noch keinen Überblick verschaffen. Meine Scripts dienen dazu, meinen Kollegen im Feld die Arbeit zu erleichtern, öffentlich zugängig werden sie nicht sein. Diese Scripts werden in einem htaccess geschützen Bereich liegen.
Dennoch werde ich mit zunehmender Erfahrung sicher auch Scripts entwickeln, die unseren Kunden zur Verfügung gestellt werden können. Dann muß ich mit Sicherheit mehr über die Risiken wissen.

Ich setze Deine Vorschläge erst mal um und beschäftige mich danach mit meinem nächsten Schritt zur Vollendung dieses Scripts. Die ausgegebenen Daten sind noch nicht übersichtlich, ich muß mit irgendwelchen String-Optionen noch Ordnung da rein bringen. Da weiss ich zwar auch noch nicht wie, aber man kann ja erstmal googeln.

Übrigens, in welchem Forum hätte ich meine Frage besser gepostet?

Schöne Grüße
Christof
Bitte warten ..
Mitglied: dog
20.10.2008 um 20:20 Uhr
Zitat von gechger:
als Anfänger im php ist mir die Bedeutung der Funktion isset()
noch nicht so richtig klar geworden. Werde mich mal näher damit
beschäftigen müssen.

isset() gibt nur an ob eine Variable gesetzt ist oder nicht.

Doppelte Deklarierung hielt ich für notwendig, weil ich zwei
Sachen durchführen will:
Im ersten Schritt will ich eine Datenbank abfragen, die ich angelegt
habe. Dort drin befinden sich alle Zugangsdaten zu den Datenbanken
unserer Kunden. Ein Mitarbeiter soll die nicht kennen, also verbinde
ich mich ersteinmal mit dieser Datenbank , um aufgrund des
eingegebenen Kundennamen im Formular dessen Zugangsdaten zu erhalten.
Diese schreibe ich in ein Array. Danach will ich in die
Kundendatenbank (mit den ermittelten Zugangsdaten) und bestimmte
Informationen abrufen.

Deshalb habe ich den zweiten Zugang mit anderen Variablen
gewählt, um Fehlinformationen zu vermeiden. Sie sehen zwar
ähnlich aus, dienen aber zum Zugang zu unterschiedlichen
Datenbanken.

Naja, im Script passiert z.B. folgendes (um mal den Weg einer Variablen zurückzuverfolgen):

mysql_fetch() -> $row[5] -> $user1 -> $user2 -> mysql_connect();

Du holst also hier einen Datensatz aus der Datenbank, weist ihm $user1 zu, dann im nächsten Schritt aber gleich $user2 - $user1 benutzt du zu keinem Zeitpunkt.
In der Zeit, in der du nur also nur eine Variable gebraucht hättest, hast du sie 2x dupliziert, verwendest also mehr Speicher, als sein müsste.

Auch $host2 könntest du dir sparen, da es ja auf den selben Wert wie $host verweist.


Übrigens, in welchem Forum hätte ich meine Frage besser
gepostet?

Sorry, ich habe beim Überfliegen "Windows Server" als Forum gesehen, während der Beitrag in "Entwicklung » Programmiersprachen » PHP (Hypertext Preprocessor)" gehört - aber er ist ja schon in Entwicklung, ich nehm alles zurück
Bitte warten ..
Mitglied: gechger
21.10.2008 um 10:44 Uhr
Stimmt. Mit Deiner Erklärung wird das Ganze klarer.
Bitte warten ..
Ähnliche Inhalte
PHP
PHP Problem mit Formular
gelöst Frage von vServerPHP6 Kommentare

Hallo, ich habe ein Formular jedoch ein Problem das später nicht alle Felder weitergegeben werden? und hier hab ich ...

PHP
PHP include und per form ein formular einfügen
Frage von miichiii9PHP1 Kommentar

Hallo miteinander Ich habe ein kleines Problem Meine Idee ist ein kleines Forum selber zu erstellen mittels PHP und ...

PHP
Textnotiz mit HTML-Form erstellen und Formular prüfen ( PHP )
gelöst Frage von Sven32PHP9 Kommentare

Hallo Leute, ich brauche mal eure Hilfe. Und zwar möchte ich gerne mittels eines HTML Formular eine .txt Datei ...

Webbrowser
Warnmeldung IE Explorer
Frage von GauschternaWebbrowser5 Kommentare

Hallo zusammen, bei uns hat ein Client ein Flash-player-update durchgeführt, seit dem kommt bei geöffnetem IE ein automatischer Seitenwechsel ...

Neue Wissensbeiträge
Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 3 StundenWindows 101 Kommentar

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 4 StundenSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 1 TagViren und Trojaner2 Kommentare

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 1 TagRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Brainstorming, einfachste Option 1 getrenntes LAN (mit WAN zugang)
Frage von 132954LAN, WAN, Wireless13 Kommentare

Hi, folgendes: Wir bekommen eine Glasfaser Leitung, Und das sollte Optional so aussehen: Ein Modem/Router für das WAN, ein ...

Netzwerkgrundlagen
Hi eine blöde frage. xD
Frage von 132954Netzwerkgrundlagen12 Kommentare

Also: Habe 2012 r2 essentials neuinstalliert, allerdings installiert diese version ja gleich diesen gangen AD kram mit, den hab ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...