Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Mit PHP in MySQL Datenbank schreiben

Frage Entwicklung PHP

Mitglied: Philosoph

Philosoph (Level 1) - Jetzt verbinden

26.07.2013, aktualisiert 28.07.2013, 4536 Aufrufe, 7 Kommentare

Hallo alle zusammen!

Ich habe mir ein Mini-Formular gebaut. Hier soll der User einen Wert eingeben. Dieser Wert wird dann in eine Datenbank geschrieben.
Ist das Feld leer, soll eine entsprechende Meldung erscheinen.

Beispiel:
User gibt den Wert "12334" ein. Diesen Wert soll das Skript in die MySQL Datenbank schreiben.
Leider funktioniert weder meine Abfrage ob das Feld leer ist noch die Eintragung in die Datenbank.

Was mache ich falsch?


Hier mein Mini-Skript:
01.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//DE" 
02.
"http://www.w3.org/TR/html4/loose.dtd"> 
03.
<html> 
04.
<head> 
05.
<title>Adminbereich</title> 
06.
</head> 
07.
<body> 
08.
<?php 
09.
// Einbindung der Verbindungsdaten 
10.
 
11.
?> 
12.
Neuen User in der Datenbank anlegen: 
13.
<form action="start2.php" method="get"> 
14.
Name des Users: 
15.
<input type="text" name="username"> 
16.
<input type="submit" value="Daten eintragen"> 
17.
<input type="reset" value="Felder leeren"> 
18.
</form> 
19.
<?php 
20.
// Senden der Daten in die Datenbank 
21.
 
22.
if (isset($_POST["username"])) 
23.
24.
$username = $_POST["username"];	 
25.
// Datenbankeintrasg als Array 
26.
 
27.
$verbindung = mysql_connect ("localhost","username", "passwort") 
28.
or die ("keine Verbindung möglich. 
29.
 Benutzername oder Passwort sind falsch"); 
30.
 
31.
mysql_select_db("datenbankname") 
32.
or die ("Die Datenbank existiert nicht."); 
33.
 
34.
mysql_query("UPDATE `orders` SET `orders_status` = '1' WHERE `orders`.`orders_id` = ('$username');"); 
35.
 
36.
echo("Neuer Eintrag wurde erstellt."); 
37.
38.
else 
39.
echo "Bitte zuerst Daten eingeben!" 
40.
 
41.
?> 
42.
</body> 
43.
</html>
Ein schönes Wochenende an alle!

LG
Tommy
Mitglied: Arano
27.07.2013 um 00:24 Uhr
Hallo Tommy,

ich nehme deinen Code mal einfach auseinander...

1.
Bitte verwende doch die Formatierungshilfe dieses Forums, das erleichtert uns das Lesen der Beiträge ungemein z.B code-Tags diese sind auch nachträglich noch einfügbar ;)

2.
In deinem Formular verwendest du die Methode GET,
versuchst aber in PHP mit $_POST auf die Felder zuzugreifen - siehst du deinen Fehler ?

3.
01.
if (isset($_POST["username"]))
Prüft lediglich ob diese POST-Variable existiert, aber nicht ob sie einen Inhalt hat, leer, NULL oder sonst etwas ist - hier mal etwas genauer werden.

4.
01.
... or die(" ")...
Sind zwar gerne in Beispielen genommen aber um richtiges und vorallem valides HTML zu erhalten braucht man auch die schließenden HTML-Tags die nach dem ganzem PHP kommen. So etwas kann einem das ganze Design zerschießen (z.B fehlt dann auch der Footer). Denn das "die()" beendet das Script nach seine Ausgabe ! alles folgende fehlt also
Hier lieber ebenfalls mit IF-Bedingung arbeiten, dann kann man auch spezieller auf die Fehler eingehen.

5.
01.
mysql_query(...); 
02.
echo "erfolgt"
Woher weist du das das Query tatsächlich erfolgreich war ? Auch dieses kann noch schief gehen - schau dir den Rückgabewert der Funktion an. PHP-Manual - mysql_query()
Jetzt sehe ich gerade selber: Die Unterstützung der alten API wird in Version 5.5.0 eingestellt ! Wechsel also lieber JETZT zur neuen PHP-Manual - MySQLi

6.
Bevor es jemand anderer Postet:
Schau dir mal SQL-Injection (Wiki) an.


Also 1 und 2 sind wichtig und der Rest sind gute Hinweise für die Zukunft


Ebenfalls ein schönes Wochenende
~Arano
Bitte warten ..
Mitglied: Philosoph
27.07.2013 um 08:42 Uhr
Hallo Arano,

erst einmal vielen Dank für die Infos. Ich werde mir den Quellcode über das Wochenende mit deinen Hinweisen nochmal in Ruhe anschauen und meine finale Version dann posten.

Dir auch ein schönes Wochenende
Tommy
Bitte warten ..
Mitglied: boulder02
29.07.2013 um 10:08 Uhr
Hi Tommy,
denke auch dran, dass du eine UPDATE-Anweisung angegeben hast und keinen INSERT.
Insofern muss es in der Tabelle orders bereits einen Datensatz mit orders_id = $username existieren, damit der Status auf 1 gesetzt werden kann.

Und generell solltest du alle Variablen, die in die SQL-Befehle eingebunden werden säubern.

LG boulder02
Bitte warten ..
Mitglied: Huegel
29.07.2013 um 17:39 Uhr
Moin,

schönes Thema. Vielleicht schaut sich die interessierte Gemeinde mal meinen Formulareditor an.

http://www.manbergen.de/html/mysqlerstellen.php

Hiermit erstelle ich meine Formulare und möchte mal die Gelegenheit nutzen und um Rückmeldung bitten.
Danke

Hügel
Bitte warten ..
Mitglied: Arano
29.07.2013 um 19:06 Uhr
Hi Hügel

ich hau einfach mal drauf

$Abfrage = mysql_query ("Select * from tabelle WHERE 1");
while ($row=mysql_fetch_array($Abfrage) )
Auch dich frage ich, woher WEISST du das die Abfrage erfolgreich war ? Wenn sie es nämlich nicht war wird mysql_fetch_array() eine Fehlermeldung werfen weil sie als 1.Parameter eine "MySQL-Resourcenkennung" erwartet !
Warum _fetch_ARRAY() ? Dies belegt doppelt soviel Speicher wie benötigt ! s. print_r( mysql_fetch_array( $resource ) )
Diese Funktion hat eine zweiten Parameter bzw es gibt auch eine andere Funktion die man nutzen könnte
$Bitte = $row[Bitte];
Auch das sollte eine PHP-Notice erzeugen ! Hier wird "Bitte" nämlich als KONSTANTE verwendet, die existiert aber NICHT ! PHP versucht es in diesem Zusammenhang dann als Zeichenkette - richtig ist es aber dennoch nicht !
Frage: Wie hat man es richtig zu verwenden ?
Update tabelle ... where `Bitte` = ′$Bitte′
Gefällt mir auch nicht. Zeichenketten stehen in doppelten (") oder einfachen (') Anführungszeichen - weiss aber selber nicht genau ob (´) akzeptabel ist.
<table border = 1 CELLSPACING=3 CELLPADDING=3>
<form action="" method="post">
Ich bin mir ziemlich sicher, das zwischen den <table>-Tags keine <form>-Tag zulässig ist !
Außerdem schließt du die Tags am Ende auch in falscher Reihenfolge !
<form><table> ... </table></form
Tabellen sollten nicht als Design verwendet werden.
<tr><td>Bitte<td><input type="text" name="Bitte" value="′.$Bitte.′">
<tr><td>den<td><input type="text" name="den" value="′.$den.′">
Hier fehlen sowohl die schließenden <td>-Tags als auch die <tr>-Tags =
01.
<table> 
02.
  <tr> 
03.
    <td> 
04.
      <tr> 
05.
        <td> 
06.
          <tr> 
07.
            <td> 
08.
              <tr> 
09.
                <td> 
10.
                  </table>
Die Verschachtelung ist voll im Eimer

möchte mal die Gelegenheit nutzen und um Rückmeldung bitten.
Dem bin ich nachgekommen
Nicht auf die netteste Weise aber fair denke ich


Und um noch meinen eigenen Senf dazu zugeben:
Da Formulare in der Regel alle sehr unterschiedlich sind muss man auch hier noch, um sie an die eigenen Bedürfnisse anzupassen, einiges abändern... da kann man auch gleich alles selber schreiben. Bzw. wenn jemandem das Erstellen des Formulars schon "zu viel" ist, was macht derjenige dann mit der verarbeitenden Logik: Plausibilitätsüberprüfung, Fehlerbehandlungen, Statusausgaben, ...


~Arano
Bitte warten ..
Mitglied: Huegel
30.07.2013 um 08:28 Uhr
Hi Arano,

Danke für deine Kommentare. Werde sie mir noch mal durch den Kopf gehen lassen.

Alle deine benannten "Fehler" funktionieren bei mr hervorragend. Nutze diesen Editor seit Jahren und es klappt alles.

Trotzdem Danke.

"Da Formulare in der Regel alle sehr unterschiedlich sind muss man auch hier noch, um sie an die eigenen Bedürfnisse anzupassen, einiges abändern... da kann man auch gleich alles selber schreiben."

Da hast du aber die Anleitung nicht gelesen

Gruß

Hügel
Bitte warten ..
Mitglied: Arano
30.07.2013 um 22:25 Uhr
Hi Hügel.

Danke für deine Kommentare. Werde sie mir noch mal durch den Kopf gehen lassen.
Kein Problem, hast ja darum gebeten.
Freut mich wenn sie dich zum drüber nachdenken bewegen.

Alle deine benannten "Fehler" funktionieren bei mr hervorragend.
Dann haben wir einfach eine ziemlich unterschiedliche Definition von "hervorragend"
__Problem 1__ ist ja kein Syntaxproblem bzw. verursacht ja nicht direkt einen Fehler.
Aber wenn es zu einem Fehler kommt, kracht es hier gleich noch ein mal und das mit Sicherheit !
Wie dichtes Auffahren auf der Autobahn... direkt passieren tut ja nichts, km für km. ABER wenn der Vordermann einen Fehler macht, zieht es den dahinter gleich mit in die Sch... und das verschlimmert alles um ein vielfaches !
__Problem 2__ wenn du seitens PHP deswegen keine Meldung siehst (PHP-Notice liegt das lediglich daran, das der error_level zu gering eingestellt und/oder display_errors in der PHP-Konfiguration ausgeschaltet ist.
Nur weil man sich die Hände vor die Augen hält - verschwinden die Probleme nicht
__Problem 3__ ich habe ja selber schon angedeutet das ich mir nicht sicher bin. Da ich nun in der Dokumentation (auch "die Anleitung" genannt ) geblättert habe: Nö da steht nur etwas zu "single and double quotes" MySQL Reference - 9.1.1. String Literals
__Problem 4 und 5__ Auch hier gibt es eine Anleitung; Versuche das doch einfach mal im Validator W3C - Validator
01.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
02.
   "http://www.w3.org/TR/html4/loose.dtd"> 
03.
<html> 
04.
  <head> 
05.
    <title>test</title> 
06.
  </head> 
07.
  <body> 
08.
    <table> 
09.
      <form action=""> 
10.
        <tr> 
11.
          <td> 
12.
          </td> 
13.
        </tr> 
14.
      </form> 
15.
    </table> 
16.
  </body> 
17.
</html>
  • ERROR: Line 9, Column 22: document type does not allow element "FORM" here
  • ERROR: Line 10, Column 12: document type does not allow element "TR" here
  • ERROR: Line 14, Column 12: end tag for "TABLE" which is not finished

Alle deine benannten "Fehler" funktionieren bei mr hervorragend.
Nur weil es funktioniert, heißt es nicht das es richtig ist
Ist zwar ziemlich die "ganz oder garnicht"-Tour ABER wenn ich das schon lerne, dann doch gleich richtig


Viel Spaß am Wochenende
~Arano
PS: Das sollte jetzt keine "weiterführende Kritik" sein ! Mir ging es hier lediglich um deine Aussage das doch alles funktioniere
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
PHP
PHP MySQL Login (7)

Frage von Yanmai zum Thema PHP ...

Webbrowser
gelöst Daten in entfernte Mysql DB schreiben (3)

Frage von nullacht15 zum Thema Webbrowser ...

PHP
gelöst PHP-MySQL - mysqli liefert einen Datensatz zu wenig (3)

Frage von Windows-Spieler zum Thema PHP ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...