• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PHP-MySQL

Status
Für weitere Antworten geschlossen.

strickerc

Neues Mitglied
Ich krieg die Krise!
Hab da nen ganz simplen Code, aber der will einfach nicht :sad:

Code:
<?php

include("connect.php");
$nick = $_POST['nick'];
$passwort = $_POST['passwort'];
$alter = $_POST['alter'];

$ergebnis = mysql_query("SELECT * FROM members WHERE `nick` = '$nick' ");

while ($row = mysql_fetch_object($ergebnis)) {
    echo 'Hi \"Unbekannter\" der gewünschte Nick-Name ist bereits vorhanden!';
    header('Location: sign.html');
}

$query = "INSERT INTO members (`nick`, `passwort`, `alter`) 
VALUES ('$nick', '$passwort', '$alter')";


$ergebnis = mysql_query("SELECT ID FROM members WHERE `nick` LIKE '$nick'");
while ($row = mysql_fetch_object($ergebnis)) {
$query = "INSERT INTO Rohstoffe (`memberid`, `Nahrung`, `Alkohol`, `Kleingeld`) 
VALUES ('.$row', '1000', '200', '50')";
}

$results = mysql_query($query) or die 
("Could not execute query : $query." . mysql_error());

if ($results)
{
echo "Registrierung erfolgreich abgeschlossen.";
echo '<a href="http://strickerc.cwc.tc/">Zurück</a>';
}
mysql_close();
?>

Der 2. Eintrag in der Tabelle "Rohstoffe" wird nicht getätigt :(
Weiss jemand wo der Fehler liegt, hab stundenlang gesucht krieg den Fehler aber nicht raus.. *kopfandiewandhau*

thx
 
('.$row', ?

kleiner tipp am rande, bau die query in einer variable und versuche diese manuell in der db mal auszuführen (mysql-front / heidiSQL)
und benutze error_reporting(E_ALL); für syntaxfehler!

ganz schrecklich bei deinem code ist, du kannst ohne probleme die ganze DB killen ...

$ergebnis = mysql_query("SELECT * FROM members WHERE `nick` = '$nick' ");
was wäre wenn dein nick hacker'DROP XYZ heißt ?
bitte korrigiere dies SCHNELL, PHP: mysql_real_escape_string - Manual wird dir helfen.

while ($row = mysql_fetch_object($ergebnis)) {
echo 'Hi \"Unbekannter\" der gewünschte Nick-Name ist bereits vorhanden!';
header('Location: sign.html');
}
warum bemutzt du eine schleife, wenn du sowieso nur rausbekommen möchtest ob ein user mit dem namen existiert ?

SELECT count(name) FROM USER WHERE username = '.mysql_real_escape_string($name);

nun bekommst du 0, 1 oder höher raus, und kannst einfach nach dem mysql_fetch_array
auf den 0ten (1.) wert des arrays ohne while schleife zurückgreifen.

in einem ' musst du die " auch nicht escapen!


verstehe ich auch nicht, warum nicht: ?
if (mysql_query($query))
es gibt noch etliches was mir aufgefallen ist, dies sind so die massivsten fehler :)
 
aw

Hast wohl gemerkt, dass ich in diesem Bereich noch Anfänger bin ;-)
Das ist auch der Grund weshalb ich deine Tipps beim besten Willen nicht verstehe ;ugl (Ausser dem betreffend dem Escapen von " in ' )

was wäre wenn dein nick hacker'DROP XYZ heißt ?
jaa, das würd mich auch interessieren...

kleiner tipp am rande, bau die query in einer variable und versuche diese manuell in der db mal auszuführen
Hab ich alles in PHP-MyAdmin zuerst manuell getestet, bis es funktionierte..
 
schaue dir dennoch mal PHP: mysql_real_escape_string - Manual an.
die schönheitsfehler sind völlig egal am anfang, hier wird es aber riskant.

$query = 'SELECT * FROM foo WHERE user = "'.mysql_real_escape_string($_REQUEST['user']).'"';

innerhalb der Variable $_REQUEST['user'] werden nun gefährliche Zeichen maskiert, sodass keiner deine Query manipolieren kann.

jeder hat mal klein angefangen, also kopf hoch, fragen nett formulieren und dir wird mit sicherheit gerne und viel geholfen :)

besten Gruß, Tim
 
Danke, ich denke das werd ich schon hinkriegen.
Jetzt hab ich die Schönheitsfehler und das Sicherheitsrisiko gefunden und kann diese nun auch beheben.
Wieso der 2. Eintrag nicht getätigt wird, weisst du auch nicht?

Besten Dank für deine Unterstützung
cs
 
1. zeile 1. post :)

ich denke error_reporting(E_ALL); hätte sich mind. auch gemeldet.

benutze besser dieses:

$query = '... VALUES ("'.mysql_real_escape_string($var).'","wert2","wert3");';

mit einem . kannst du zeichenketten zusammenhängen, z.b.:
echo "hallo ".$nick.' '.$nick_nachname;

Besten Gruß, Tim
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben