philosoph
Goto Top

Mit PHP in MySQL Datenbank schreiben

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:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//DE"  
"http://www.w3.org/TR/html4/loose.dtd">  
<html>
<head>
<title>Adminbereich</title>
</head>
<body>
<?php
// Einbindung der Verbindungsdaten

?>
Neuen User in der Datenbank anlegen:
<form action="start2.php" method="get">  
Name des Users:
<input type="text" name="username">  
<input type="submit" value="Daten eintragen">  
<input type="reset" value="Felder leeren">  
</form>
<?php
// Senden der Daten in die Datenbank

if (isset($_POST["username"]))  
{
$username = $_POST["username"];	  
// Datenbankeintrasg als Array

$verbindung = mysql_connect ("localhost","username", "passwort")  
or die ("keine Verbindung möglich.  
 Benutzername oder Passwort sind falsch");  

mysql_select_db("datenbankname")  
or die ("Die Datenbank existiert nicht.");  

mysql_query("UPDATE `orders` SET `orders_status` = '1' WHERE `orders`.`orders_id` = ('$username');");  

echo("Neuer Eintrag wurde erstellt.");  
}
else
echo "Bitte zuerst Daten eingeben!"  

?>
</body>
</html>
Ein schönes Wochenende an alle!

LG
Tommy

Content-Key: 212562

Url: https://administrator.de/contentid/212562

Printed on: April 24, 2024 at 14:04 o'clock

Member: Arano
Arano Jul 26, 2013 at 22:24:51 (UTC)
Goto Top
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.
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.
... 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.
mysql_query(...);
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 face-smile


Ebenfalls ein schönes Wochenende
~Arano
Member: Philosoph
Philosoph Jul 27, 2013 at 06:42:12 (UTC)
Goto Top
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
Member: boulder02
boulder02 Jul 29, 2013 at 08:08:27 (UTC)
Goto Top
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
Member: Huegel
Huegel Jul 29, 2013 at 15:39:10 (UTC)
Goto Top
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
Member: Arano
Arano Jul 29, 2013 at 17:06:31 (UTC)
Goto Top
Hi Hügel

ich hau einfach mal drauf face-smile

$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 =
<table>
  <tr>
    <td>
      <tr>
        <td>
          <tr>
            <td>
              <tr>
                <td>
                  </table>
Die Verschachtelung ist voll im Eimer

möchte mal die Gelegenheit nutzen und um Rückmeldung bitten.
Dem bin ich nachgekommen face-smile
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
Member: Huegel
Huegel Jul 30, 2013 at 06:28:44 (UTC)
Goto Top
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 face-wink

Gruß

Hügel
Member: Arano
Arano Jul 30, 2013 at 20:25:55 (UTC)
Goto Top
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" face-big-smile
__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-Noticeface-smile 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 face-wink ) 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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
   "http://www.w3.org/TR/html4/loose.dtd">  
<html>
  <head>
    <title>test</title>
  </head>
  <body>
    <table>
      <form action="">  
        <tr>
          <td>
          </td>
        </tr>
      </form>
    </table>
  </body>
</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 face-wink


Viel Spaß am Wochenende face-wink
~Arano
PS: Das sollte jetzt keine "weiterführende Kritik" sein ! Mir ging es hier lediglich um deine Aussage das doch alles funktioniere