[MySQL & PHP] Problem mit Schreiben in DB

-=Renegade=-

Lt. Junior Grade
Registriert
Nov. 2006
Beiträge
430
Also, ich hab gerade ein Anmeldeformular erstellt und möchte nun die eingegeben Datein (also Username, Email,...) in die Datenbank übertragen.

PHP:
<?php
if (isset($_POST["submit"]) &&
    $_POST["submit"] == " Registrierung abschicken ") {

  $username = $_POST["username"];
  $password = $_POST["password"];
  $email = $_POST["email"];
  $title = "Registered User" ;
  $status = "User";

	mysql_connect('localhost','root','');
	mysql_select_db('COV');
	$insert = mysql_query('INSERT INTO user ( Username, Pwd, Email, Title, Status )
		VALUES ( $username, $password, $email, $title, $status)');

echo $username;
echo "<br />";
echo $password;
echo "<br />";
echo $email;
echo "<br />";
echo $title;
echo "<br />";
echo $status;

} else {
  echo "Error!";
}
?>

Die Werte werden via POST übertragen und funktionieren auch (Test mit dem echo auslesen), ebenso wird keine Fehlermeldung oder so angezeigt.

Daher denke ich das einfach der Befehl zum in die Datenbankschreiben falsch ist, wäre nett wenn mich da wer korrigieren könnte :)


so long
Renegade
 
1. Alle Werte sollten vor dem Schreiben über mysql_real_escape_string () oder wie die funktion heißt escaped werden, dein Code ist in der Form eine extem großes Sicherheitsrisiko...
2. Die Werte sollten auch in Anführungszeichen geschrieben werden... dazu würde ich den Apostroph nehmen nehmen...
3. PHP-Variablen werden nur in Strings mit Doppelhochkomma ersetzt, nicht in spostrophierten...
PHP:
$hello = "hallo";
echo '$hello'; // Ausgabe: $hello
echo "$hello"; // Ausgabe: hallo

Also so weit würde das so aussehen:
PHP:
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$email = mysql_real_escape_string($email);
$title = mysql_real_escape_string($title);
$status = mysql_real_escape_string($status);
$insert = mysql_query("INSERT INTO user ( Username, Pwd, Email, Title, Status ) 
        VALUES ( '$username', '$password', '$email', '$title', '$status')");

4. Das Passwort sollte nicht im Klartext gespeichert werden!
 
Zuletzt bearbeitet:
Und wie müssen dann die Werte aus dem Forumlar behandelt werden, dass sie mit mysql_real_escape_string ausgelesen werden können? Weil bisher hab ich die Werte ja mit POST übertragen und so wieder ausgelesen.

Das Passwort wird natürlich noch verschlüsselt, aber zuerst wollt ich mal überprüfen, ob ich überhaupt irgendwie in die Datenbank reinschreiben kann.


so long
Renegade
 
PHP:
<?php 
if (isset($_POST["submit"]) && 
    $_POST["submit"] == " Registrierung abschicken ") { 

  /******* entweder so
  $username = mysql_real_escape_string($_POST["username"]); 
  $password = mysql_real_escape_string($_POST["password"]); 
  $email = mysql_real_escape_string($_POST["email"]); 
  $title = mysql_real_escape_string("Registered User") ; 
  $status = mysql_real_escape_string("User"); 
  ******************************************/
  // oder so:
  $username = $_POST["username"]; 
  $password = $_POST["password"]; 
  $email = $_POST["email"]; 
  $title = "Registered User" ; 
  $status = "User"; 

    mysql_connect('localhost','root',''); 
    mysql_select_db('COV'); 
    // und dann auch so
    $username = mysql_real_escape_string($username); 
    $password = mysql_real_escape_string($password); 
    $email = mysql_real_escape_string($email); 
    $title = mysql_real_escape_string($title); 
    $status = mysql_real_escape_string($status); 
    // ansonsten könnten diese Zeilen zwischen dem Kommentar entfernt werden,
    // wenn weiter oben mysql_real_escape_string augerufen wird
    $insert = mysql_query("INSERT INTO user ( Username, Pwd, Email, Title, Status ) 
        VALUES ( '$username', '$password', '$email', '$title', '$status')"); 

echo $username; 
echo "<br />"; 
echo $password; 
echo "<br />"; 
echo $email; 
echo "<br />"; 
echo $title; 
echo "<br />"; 
echo $status; 

} else { 
  echo "Error!"; 
} 
?>

Finde es übersichtlicher, mysql_real_escape_string erst direkt vor der Query aufzurufen...
 
PHP:
<?php
if (isset($_POST["submit"]) &&
    $_POST["submit"] == " Registrierung abschicken ") {

  $username = $_POST["username"];
  $password = $_POST["password"];
  $email = $_POST["email"];
  $title = "Registered User";
  $status = "User";


	mysql_connect('localhost','root','');
	mysql_select_db('cvo_members');

	$username = mysql_real_escape_string($username);
	$password = mysql_real_escape_string($password);
	$email = mysql_real_escape_string($email);
	$title = mysql_real_escape_string($title);
	$status = mysql_real_escape_string($status);

    $insert = mysql_query("INSERT INTO user ( Username, Pwd, Email, Title, Status ) 
        VALUES ( '$username', '$password', '$email', '$title', '$status')"); 

echo $username;
echo "<br />";
echo $password;
echo "<br />";
echo $email;
echo "<br />";
echo $title;
echo "<br />";
echo $status;

} else {
  echo "Error!";
}
?>

Also ich hab das ganze jetzt so implementiert, aber es funktioniert scheinbar noch immer nicht, zumindest bekomm ich mit phpmyadmin keine Resulatate angezeigt (MySQL returned an empty result set)

Es werden keine Fehler angezeigt und die Strings können mit Echo ausgelesen werden. Dachte zuerst es liegt an der falschen Datenbank, die ich versehentlich eingegeben habe, aber dem war leider nicht so :(

Ist der Insert Befehl ansonsten so richtig?
 
Zuletzt bearbeitet:
Lass dir doch mal einen eventuellen Fehler direkt ausgeben, das machst du ja nicht wirklich.

$sql="INSERT INTO user ( Username, Pwd, Email, Title, Status ) VALUES ( `$username`, `$password`, `$email`, `$title`, `$status`)"

$result=mysql_query($sql) OR die("Fehler bei der Abfrage\n\nQuery: <pre>".$sql."</pre>\n\nAntwort: ".mysql_error());
 
Evtl vielleicht mal das probieren:
PHP:
$insert = mysql_query("INSERT INTO `user` ( `Username`, `Pwd`, `Email`, `Title`, `Status` ) 
        VALUES ( '$username', '$password', '$email', '$title', '$status')");
 
Also eben hatte ich noch ne Fehlermeldung und als ich es nochmal probiert habe ging es plötzlich mit folgendem Code:

PHP:
<?php
if (isset($_POST["submit"]) &&
    $_POST["submit"] == " Registrierung abschicken ") {

  $username = $_POST["username"];
  $password = $_POST["password"];
  $email = $_POST["email"];
  $title = "Registered User";
  $status = "User";


    mysql_connect('localhost','root','');
    mysql_select_db('cvo_members');

    $username = mysql_real_escape_string($username);
    $password = mysql_real_escape_string($password);
    $email = mysql_real_escape_string($email);
    $title = mysql_real_escape_string($title);
    $status = mysql_real_escape_string($status);

$sql="INSERT INTO user ( Username, Pwd, Email, Title, Status ) VALUES ( '$username', '$password', '$email', '$title', '$status')";

$result=mysql_query($sql) OR die("Fehler bei der Abfrage\n\nQuery: <pre>".$sql."</pre>\n\nAntwort: ".mysql_error());

echo $username;
echo "<br />";
echo $password;
echo "<br />";
echo $email;
echo "<br />";
echo $title;
echo "<br />";
echo $status;

} else {
  echo "Error!";
}
?>

Hatte auch dann gleich 6 Einträge in der DB Oo

Naja, auf jeden Fall erstmal danke an alle, die mir geholfen haben :wave:
 
Eine kleine Frage hätte ich noch:

Wie kann ich genau ein Feld (oder mehrere spezielle) aus der Datenbank auslesen und wie kann ich die nachträglich verändern?

Also ich will zB den aktuellen Status eines Users sehen und den verändern.

Danke schonmal im Voraus

Achja, und gibts bei PHP zufällig einen Befehl, der das selbe macht wie der JavaScript Befehl Alert (also ein PopUp Fenster mit einer Message erzeugt) sowie um im Browser eine Seite vorwärts / rückwärts zu gehen.


so long
Renegade
 
Zuletzt bearbeitet:
Also wir helfen gerne bei Problemen mit Code, aber ne Suchmaschine wirst du wohl eigenständig bedienen können.
Es gibt bestimmt tausende MySQL-Beispielcode-Seiten...

Und nein, PHP läuft auf dem Server und nicht im Client, du kannst nur mit Hilfe von PHP z.B. JavaScript-Code erzeugen lassen... wenn du mal im Browser den Quellcode anschaust, wirst du sehen, dass da keine einzige Zeile PHP-Code mehr steht, weil der Server diese bereits verarbeitet hat.
 
1668mib schrieb:
Also wir helfen gerne bei Problemen mit Code, aber ne Suchmaschine wirst du wohl eigenständig bedienen können.
Es gibt bestimmt tausende MySQL-Beispielcode-Seiten...

Und nein, PHP läuft auf dem Server und nicht im Client, du kannst nur mit Hilfe von PHP z.B. JavaScript-Code erzeugen lassen... wenn du mal im Browser den Quellcode anschaust, wirst du sehen, dass da keine einzige Zeile PHP-Code mehr steht, weil der Server diese bereits verarbeitet hat.

Ok, sry, mein Fehler, ich wollts mir zu einfach machen. :(

Mir ist auch schon klar, dass ich JavaScript Code zB mit echo erzeugen kann, ich wollte nur wissen, ob es ähnliche Befehle gibt, damit das ganze eleganter aussieht (und imo müsste es doch, ob clientseitig oder serverseitig, möglich sein, ein PopUp Fenster zu erzeugen. Dasselbe gilt für Vor und Zurücklinken, ich kann ja auch so ansonsten mit PHP den Header manipulieren und soweiter.)

PS: Kennst du zufällig eine gute deutsche MySQL Seite? Gibt ja auch viel Schotter und im angepinnten Thread oben sind nur englische, und von deutschen lernt es sich zumindest besser. Danke


so long
Renegade
 
Zuletzt bearbeitet:
Nein, das geht nicht mit PHP.
Sobald die Seite beim Browser "angekommen" ist, hat PHP keinen Einfluss mehr auf die Seite - da serverseitig. Ales weitere liegt in der Hand von HTML, JavaScript etc... du kannst nur mit Hilfe von PHP anderen Code dahingehend verändern, dass er später zur "Laufzeit" im Client das tut, was du gerne hättest. Aber das gehört an sich nicht zur "richtigen" PHP-Programmierung sondern ist eher ein Nebenkriegsschauplatz, mit dem man bei der PHP-Programmierung halt häufiger mal konfrontiert wird...

Edit: Ne sorry, ich kenne leider auch keine gute deutsche Seite zu dem Thema
 
Zuletzt bearbeitet:
AW: [MySQL & PHP] Problem mit Überprüfung

Ok, hab jetzt ein wenig weitergebastelt und stehe schon wieder vor den nächsten Problemen. Diesmal haperts imo primär am JavaScript Code, aber ich posts trtozdem gleich hier herein.

Der erste Punkt: Ich möchte überprüfen, ob die eingegeben email Adresse in etwa korrekt ist (also suche nach genau einem "@" und mind. einem ".".

HTML:
function verify_reg(v) {
   var v = document.register;
(...)

return checkemailat(v.email);
return checkemaildot(v.email); 
}

function checkemailat(c) {
   var s = "" + c;
   var atcount = 0;
   for (var i=0; i<s.length; i++) {
	if (s.charAt(i) == "@") {
	   atcount++;
	}
   }
   if (atcount != "1") {
	var errormessage = "Die eingegebene E-Mail Adresse ist ungültig."
	errormessage += atcount
	alert (errormessage);
	return false
   }
}

function checkemaildot(c) {
   var s = "" + c;
   var dotcount = 0;
   for (var i=0; i<s.length; i++) {
	if (s.charAt(i) == ".") {
	   dotcount++;
	}
   }
   if (dotcount == "0") {
	var errormessage = "Die eingegebene E-Mail Adresse ist ungültig."
	alert (errormessage);
	return false
   }
}

Das ganze ist ein Teil der Funktion verify_reg(v), die bei abschicken des Formulars mit OnSubmit ausgelöst wird. Die ganzen Überprüfungen ob die Felder ausgefüllt wurden oder ob sie ident sind klappen einwandfrei, nur bei der Gültikeitsüberprüfung der email gibt es scheinbar ein Problem. Zur genaueren Analyse habe ich mir einmal den atcount, der die Anzahl der @ zählt, in die Fehlermessage gegeben, als Resultat bekomme ich immer 0, egal wieviele @ enthalten sind, folglich geht es hier auch nicht weiter. Ich gehe daher einfach mal davon aus, dass charAt keine @ überprüfen kann, aber wie kann man sowas sonst realisieren?

Das zweite Betrifft die Überprüfung, ob der Benutzername bereits existiert. Da dazu ein Zugriff auf die DB notwendig ist, kann ich es im JavaScript Code mit OnSubmit nicht realisieren und muss es deshalb auf der nächsten Seite, in der die Daten für die DB verarbeitet werden, einfügen.

Das ganze sieht derweil so aus und klappt eigentlich auch ganz gut:
PHP:
    mysql_connect('localhost','root','');
    mysql_select_db('cvo_members');

    $checknames = mysql_query('SELECT Username FROM user');
    while($row = mysql_fetch_array($checknames)) {
	if ($row["Username"] == $username) {
	   echo "<script type='text/javascript'>alert('Benutername existiert bereits')
	   location.href = history.go(-1)</script>";
	   $exist = "1";
	   break;
	}
    }

Das Problem besteht allerdings im Zurücklinken auf die vorherige Seite, damit der Benutzer die Information korrigieren kann. Mit der oben angegeben JavaScript Funktion location.href = history.go(-1) (oder auch history.back()) klappt es leider nicht, die Fehlermeldung lautet Object not Found, die URL ist undefined.

Ich hab auch schon probiert, den Header zu modifizieren, das funktioniert aber auch nicht, da sonst die POSTabfrage, ob die Regeln akzeptiert wurden, nicht mehr funktioniert.

Hoffe, dass hier jemand eine Lösung weiß :)

Achja, wegen den Passwörtern: Natürlich wäre es leicht,, einzelne Zeichen mit Stringoperationen nach einem gewissen Schema auszutauschen, aber ist diese Methode sicher genug? Oder gibt es eigene Skripte, die sicherer sind und soetwas zuverlässig erledigen und/oder ist deren Anwendung sinnvoll?

Danke schon mal im Voraus


so long
Renegade
 
Wieso überprüfst du die Email nicht auch mit PHP? Wenn man JS abschaltet, bringt deine Variante nämlich nix mehr.
 
Liegt daran, dass ich Teile der Abfrage in einem JavScript Buch habe, zusätzlich mit der Anmerkung, dass es schwierig sein sollte, das ganze mit PHP zu realisieren, vor allem so, dass dann alle anderen Daten wieder im Formular stehen (man soll ja nicht das ganze Formular neu ausfüllen müssen)

Außerdem dürfte ich dann zumindest dasselbe Problem haben wie bisher mit dem zurücklinken.

Was mir bei der Gelegenheit einfällt, sollte es dann nicht eventuell einfacher gehen, wenn ich eine IF Abfrage mache und nicht erst auf eine eigene Seite verlinke (also ob die POST Variable vom Submit Button gedrückt wurde)

Wie kann ich dann aber "zurücklinken"



so long
Renegade
 
Also ich würde die JavaScript-Prüfungen dennoch nur als Gimmick ansehen, denn als PHP-Programmierer musst du jede Information, die du von außen (über $_GET, $_POST usw) als potentiell böse betrachten und manipulierbar.

Wenn dein Formular mal "sicher" vor sowas ist, kannst du auch noch zusätzlich die JavaScript-Abfragen integrieren, die zugegeben einen gewissen Komfort bringen.

Für Formulare gibt's im übrigen schon relativ gute Klassen z.B. in PEAR, die helfen dir Abfragen sowohl in PHP als auch in JavaScript ohne großen Aufwand zu verwirklichen.
 
$email =mysql_real_escape_string ($_POST['email'])
for($i=0;$i<count($email);$i++)
{
if($email[$i]==@)
$email_c1++;
if($email_c1==1&&$email[$i]==".")
$email_check++;
}

if($email_check==1)
{
// Ja was halt auch immer ist wenn email richtig sein kann
}
Bin mir jetzt ned sicher ob er $email direkt als array übernimmt wenn nicht dann einfach:
$email = explode("",$_POST['email'])

Hoff das passt habs absolut nicht getestet aber wennst was für Javascript haben willst hab ne fertige funktion für sowas.
Gibt zeichensatz an und überprüft ob nicht erlaubte zeichen enthalten sind, falls falsche zeichen vorhanden sind rot einfärbung des feldes. (auch mit rückgabewert möglich für kontrollen bei submit)
 
Zurück
Oben