Will ein System in PHP proggen und hab probleme mit MySQL und Userlogin

keykiller

keykiller

Aktives Mitglied
Thread Starter
Dabei seit
11.10.2007
Beiträge
311
Reaktionspunkte
1
Hi, leutz!
Ich bin gerade dabei, PHP zu Lernen. Dazu will ich ein kleines Online-System schriben. Bisher ist der Texteditor fertig. Nun will ich aber auch eine Benutzerverwaltung und schreibe daher das teil komplett neu und mache das Teil wie ein Betriebssystem im Browser.
Vom Design her klappt alles ganz gut. bisher macht PHP auch kein Problem, aber ich Kriegs einfach nicht hin, ein Registrierungsformular zu erstellen, dass die eingetragenen Datein (ICh nehme mal an über Variablen gehts am besten - wie denn sonst?) die man von dem Formular register_form.php bekommt in der datei register_set.php so zu verwerten um für die MySQL-Tabelle die Einträge zu Schreiben.

Wenn ich eine PHP-Datei hab, bei der das nicht mit Variablen gelöst wird, sondern direkt in die Datei GEschrieben wird, welcher benutzer er anlegen soll, klappts.



Code:
//(...)
// User in die Tabelle Eintragen
$sql_befehl = "
INSERT INTO users (
  UserID,
  UserName,
  UserVorname,
  UserNachname,
  UserPassword,
  UserStatus,
  UserGroup,
  UserEmail,
  UserBirthdate
) VALUES (
  '',
  '$User_Name',
  '$User_Vorname',
  '$User_Nachname',
  '$User_Password',
  'active',
  'admin',
  '$User_Email',
  '$User_Birthday'
)";

Wenn ich keine Variablen nehme, sondern feste werte, geht es, das bringt mir aber nichts.
 
Hi,

übliches register_globals Problem. Einfach mal mit dem Begriff googlen. Du kannst nicht direkt auf die Variablen zugreifen in der Nachfolge-Seite, sondern musst bestimmen aus welcher Datenquelle (POST, GET,..) sie kommen.

Achja und ungeprüft schreibt man die Werte niemals direkt in die DB, zu leicht für SQL-Injection.

Gruss
AleX
 
du kannst auch mal den mysql fehler auswerten von dem insert, dann weißt du ja was das problem ist...

ansonsten wirklich nicht das mysql_real_escape_string für die eingaben der formulare vergessen...
 
Die Variablen Sind schon eingelesen und bis zu dem Punkt ist zu 100%-iger Sicherheit kein Fehler.

Achja und ungeprüft schreibt man die Werte niemals direkt in die DB, zu leicht für SQL-Injection.
Wieso/Wie Prüfen/ Was meinst du damit

Wie gesagt, bin grad am PHP lernen am letzten Freitag hab ich damit angefangen.
 
Ähm - dürfen bei PHP Variablen in einfachen Hochkomata stehen?
 
Die Variable steht ja nicht nur ' sondern auch in " also in ' ".
Aber wenn ich das ' weglasse, geht es auch nicht.
 
Code:
INSERT INTO users (UserID, UserName, UserVorname, UserNachname, UserPassword, UserStatus, UserGroup, UserEmail, UserBirthdate) VALUES ('', 'Tester', 'Vorname', 'Nachname', 'test', 'inactive', 'user', 'test@test.de')
 
Könnte mir mal einer Schreiben, wei der Code aussehen müsste?
Also auch mit dem Senden der Anfrage
 
Da sehe ich nichts falsches dran. Schau Dir mal die Asugabe von mysql_error() an
Code:
mysql_query(/*...solltest du ja haben...*/) or die(mysql_error());
 
Code:
INSERT INTO users (UserID, UserName, UserVorname, UserNachname, UserPassword, UserStatus, UserGroup, UserEmail, UserBirthdate) VALUES ('', 'Tester', 'Vorname', 'Nachname', 'test', 'inactive', 'user', 'test@test.de')

funktioniert das nicht, oder ist das die version mit den gesetzten Variablen?

Könnte mir mal einer Schreiben, wei der Code aussehen müsste?
Also auch mit dem Senden der Anfrage

Noch nicht ;-)
 
Ich schick mal den Komplette Quelltext:
Code:
<?php
$User_Name = "Tester";
$User_Realname = "Max Mustermann";
$User_Password = "test";
$User_Email = "test@test.de";
$User_Birthdate = "1990-1-1";
$User_Chat = "123456";
// Verbindungsvariable samt Zugangsdaten festlegen
@$db = mysqli_connect($db_verzeichniss, $db_user, $db_password) OR die("Verbindung fehlgeschlagen: " . mysqli_connect_error()); 
// Verbindung – Ausgabe


 //in die Datenbank Wechseln
 $db->select_db("os_keykiller"); 

$sql_befehl = "INSERT INTO users (UserID, UserName, UserRealname, UserPwd, UserEmail, UserBirthdate, UserChat) VALUES ('2', '$User_Name', '$User_Realname', '$User_Password', '$User_Email', '$User_Birthdate', '$User_Chat' )";
echo $sql_befehl;
mysql_query($sql_befehl) or die(mysql_error());
 ?>
 
warum machst du eigentlich mit mysqli_connect den connect und dann mit mysql_query die query statt mit mysqli_query?
beim connect kannst du auch schon die db angeben, dann brauchst du die später nicht setzen.
und warum mischst du denn objekt-orientiert mit prozedural?
das db setzen machst du über das objekt, aber die query nicht...
 
Zuletzt bearbeitet:
Das stand so in SELFPHP, dass man das so machen soll...
ICh machs jetzt mit nem Kumpel.
Der Login funktioniert schon fast:
Code:
<?php
$username_input = $HTTP_POST_VARS["username"]; 
$password_input = $HTTP_POST_VARS["password"]; 
if($username_input != "") {

// Verbindungsvariable samt Zugangsdaten festlegen
	$db = mysqli_connect($db_verzeichniss, $db_user, $db_password) OR die("Verbindung fehlgeschlagen: " . mysqli_connect_error()); 
	
//in die Datenbank Wechseln
 $db->select_db("os_keykiller"); 


// Datensatz-Ausgabe festlegen
$sql_befehl = "SELECT * FROM users";

if ($resultat = $db->query($sql_befehl)) {  
  // Durchlaufen der Datenbankabfrage
	$array = mysql_fetch_assoc($resultat);
	
	foreach($array as $username_sql_array => $userpassword_sql_array) {
		$array_userpwd[$username_sql_array]=$userpassword_sql_array;	
	}
	if( $array_userpwd[$username_input] == $password_input) {echo "username ok";} else {echo "username Falsch";}
echo "test";

  // Speicher freigeben
  $resultat->close();  
} else {
  // Meldung bei Fehlschlag
  echo "Zugriff fehlgeschlagen!";
}

// Tabellenende
echo "</table>";

// Verbindung zum Datenbankserver beenden
$db->close();
} else { echo"Es w&auml;re praktisch, wenn Sie auch einen Username eingeben w&uuml;rden!"; }

?>

Bisher lässt der nur jeden User rein...
 
dann sollten die mal auf selfphp ein wenig aufräumen und konsistenz predigen...

wie gesagt, ich würde entweder durchgehend mysqli oder mysql benutzen und nicht mischen...
mysqli kann eh besser mit utf-8 umgehen usw...
 
Habt ihr schon über den Einsatz von pear - Komponenten nachgedacht? Für den Datenbankzugriff kann ich Euch nur MDB2 empfehlen... http://pear.php.net

(Warum sich mit Problemen herumschlagen, die andere schon besser gelöst haben...)
 
Code:
// Datensatz-Ausgabe festlegen
$sql_befehl = "SELECT * FROM users";

Bisher lässt der nur jeden User rein...

Schon mal drüber nachgedacht, was passiert wenn ihr 1000ende Nutzer habt? Du kannst im statement auch filtern...

Code:
// Datensatz-Ausgabe festlegen
$sql_befehl = "SELECT * FROM users where username='$username' and password='$password'";

... damit sollte nur genau ein Datensatz zurückkommen.
 
Aber bitte nicht so! Wenn man Variablen seinfach so ungeprüft in Queries einbaut kann das böse enden. -> SQL-Injection

Also entweder mysql_real_escape_string oder ein prepared statement verwenden.
 
Zurück
Oben Unten