mysql_insert_id() problem

Godstyle

Erfahrenes Mitglied
Hallo Gemeinde,

Ich habe ein meiner Insert abfrage ein kleines Problem, da ich die eingegebenen Userdaten in 2 verschiedene Tabellen meiner mysql_db eintragen möchte.

Der auto_incriment wert namens id aus der ersten Tabelle soll die User-id werden und müsste mir sofort zurückgeliefert werden um in der nächsten Tabelle als Userid verwendet werden zu können.

Ich habe gegoogelt und erfahren das es theoretisch mit mysql_insert_id() möglich wäre.

Mein ergebniss ist folgendes:

PHP:
$log_data = mysql_query("INSERT 
								INTO 
									ow_login 	
									(username, email, passwort, confirmcode, ip) 
									
									VALUES 
									
									('$username', '$email, '$passwort, '$confirmcode, '$ip)");
$last_id = mysql_insert_id($log_data);

$pro_data = mysql_query("INSERT 
								INTO 
									ow_user_data 	
									(userid, vorname, nachname, geb_tag, geb_mon, geb_jahr) 
									
									VALUES 
									
									('$last_id', '$vorname', '$nachname, '$geb_tag', '$geb_mon', '$geb_jahr')");

Als Rückwert erhalte ich immer den Wert 0.

Ich nehme an das ich mysql_insert_id() falsch verwende und bitte um eine kurze Hilfestellung.

mfg
 
Zuletzt bearbeitet:
Ist eigentlich schon richtig.
Schreibt das erste INSERT auch wirklich etwas in die DB? Und ist das AUTO_INCREMENT-Feld wirklich in der ersten Tabelle?
 
mach mal ein var_dump() auf $last_id um zu schauen was PHP da hat.

Dann solltest du mal das 2te Insert-SQL testen:
PHP MySQL Debug Queries
Poste das asugegebene SQL mal hier.

Und zuguter letzt. Eine ID ist eine Zahl. Dann behandle sie auch wie eine Zahl. Eine Zahl ist in einem SQL nie in Anführungszeichen.
 
Zuletzt bearbeitet:
So, nach ein Paar eigen versuchen habe ich festgestellt das das Problem nicht das einzige ist was verursacht wird.

error_reporting(E_ALL);
ini_set('display_errors', '1');

zeigt mir zwar keinerleig hinweise oder fehler an, denoch werden auch andere Daten nicht geprüft, zumindest wird mir kein Hinweis gegeben. Werde wohl noch eine ganze weile länger dran sitzen.

Vielen dank für den ver_dump hinweis werde dem nachgehen, zunächst jedoch sollte ich versuchen ein Problem in den griff zu bekommen das bereits vorher im Script verursacht wird.

lg
 
Lass dir, wie im Tutorial beschrieben, die SQLs ausgeben und teste sie mit phpMyAdmin oder HeidiSQL.
 
Das habe ich getan, laut diesem Weg sollte er eigentlich keine Daten eintragen können da das script bereits vorher durch mir noch nicht ganz klare gründe unterbrochen wird. Wenn du kurz zeit hast kann ich dir das im ganzen mal posten, habe noch keinen wirklichen ansatzpunkt für den Fehler ausgemacht.
 
Fehlermeldungen keine, das ist ja das problem und var_dum liefert mir derzeit auch kein ergebniss zurück habe es eben versucht zu testen.

Das Script do die beiden Insert sich befinden wird vorzeitig unterbrochen bei der Validierung der User eingaben, wie es denoch zu einträgen in der DB kommen kann ist mir schleierhaft. Auch der Grund bzw. die Stelle wo es unterbrochen wird ist noch nicht klar da Eine Rückgabe des eingabefehlers nicht erfolgt.

Wie gesagt ich stehe grade noch vor einem Rätsel was das script macht und wo es die Fehler verursacht.

Formular für User eingaben:

PHP:
<form action="" method="post" name="add_new_user">
<table width="600">
<tr>
<td colspan="3" style="padding-left:200px;">Registrieren:</td>
</tr>
<tr>
<td width="200">&nbsp;</td>
<td colspan="2" style="padding-left:0px;"><hr style="color:#B8C8DC0; width:400px;" /></td>
</tr><?php
if(isset($err_msg) &&  !empty($err_msg)) { ?>
<td width="200">&nbsp;</td>
<td colspan="2" style="padding-left:0px;">&nbsp;</td>
</tr>
<tr><td align="left">&nbsp;</td><td colspan="2" align="left"><font color="#FF0000"><?php echo $err_msg; ?></font></td></tr>
<td width="200">&nbsp;</td>
<td colspan="2" style="padding-left:0px;">&nbsp;</td>
</tr>
<?php } ?>
<tr><td align="right">&nbsp;</td><td width="150" align="right" style="height:40px;">Vorname:</td><td width="250"><input type="text" style="height:38px; width:248px; font-size:20px; color:#B8C8DC;" name="vorname" maxlength="30" /></td></tr>
<tr><td align="right">&nbsp;</td><td width="150" align="right" style="height:40px;">Nachname:</td><td width="250"><input type="text" style="height:38px; width:248px; font-size:20px; color:#B8C8DC;" name="nachname" maxlength="30" /></td></tr>
<tr><td align="right">&nbsp;</td><td width="150" align="right" style="height:40px;">Username:</td><td width="250"><input type="text" style="height:38px; width:248px; font-size:20px; color:#B8C8DC;" name="username" maxlength="20" /></td></tr>
<tr><td align="right">&nbsp;</td><td width="150" align="right" style="height:40px;">e-Mail:</td><td width="250"><input type="text" style="height:38px; width:248px; font-size:20px; color:#B8C8DC;" name="email[]"  maxlength="50" /></td></tr>
<tr><td align="right">&nbsp;</td><td width="150" align="right" style="height:40px;">e-Mail<br /> Wiederholen:</td><td width="250"><input type="text" style="height:38px; width:248px; font-size:20px; color:#B8C8DC;" name="email[]" maxlength="50" /></td></tr>
<tr><td align="right">&nbsp;</td><td width="150" align="right" style="height:40px;">Passwort:</td><td width="250"><input type="password" style="height:38px; width:248px; font-size:20px; color:#B8C8DC;" name="passwort[]" /></td></tr>
<tr><td align="right">&nbsp;</td><td width="150" align="right" style="height:40px;">Passwort<br />wiederholen:</td><td width="250"><input type="password" style="height:38px; width:248px; font-size:20px; color:#B8C8DC;" name="passwort[]" /></td></tr>
<tr><td align="right">&nbsp;</td><td width="150" align="right" style="height:40px;">Geschlecht:</td><td width="250"><select style="height:30px; width:248px; font-size:20px; color:#B8C8DC;" name="sex"><option value="0">------------</option><option value="m&auml;nnlich">m&auml;nnlich</option><option value="weiblich">weiblich</option></select></td></tr>




<tr><td align="right">&nbsp;</td><td width="150" align="right" style="height:40px;">Geburtsdatum:</td><td width="250">
<select style="height:30px; font-size:18px; color:#B8C8DC;" name="geb_tag">
<option>	1	</option>
<option>	2	</option>
<option>	3	</option>
<option>	4	</option>
<option>	5	</option>
<option>	6	</option>
<option>	7	</option>
<option>	8	</option>
<option>	9	</option>
<option>	10	</option>
<option>	11	</option>
<option>	12	</option>
<option>	13	</option>
<option>	14	</option>
<option>	15	</option>
<option>	16	</option>
<option>	17	</option>
<option>	18	</option>
<option>	19	</option>
<option>	20	</option>
<option>	21	</option>
<option>	22	</option>
<option>	23	</option>
<option>	24	</option>
<option>	25	</option>
<option>	26	</option>
<option>	27	</option>
<option>	28	</option>
<option>	29	</option>
<option>	30	</option>
<option>	31	</option>
</select>
<select style="height:30px; font-size:18px; color:#B8C8DC;" name="geb_mon">
<option value="1.">	Januar	</option>
<option value="2.">	Februar	</option>
<option value="3.">	März	</option>
<option value="4.">	April	</option>
<option value="5.">	Mai	</option>
<option value="6.">	Juni	</option>
<option value="7.">	Juli	</option>
<option value="8.">	August	</option>
<option value="9.">	September	</option>
<option value="10.">	Oktober	</option>
<option value="11.">	November	</option>
<option value="12.">	Dezember	</option>
</select>
<select style="height:30px; font-size:18px; color:#B8C8DC;" name="geb_jahr">
<option>	1900	</option>
<option>	1901	</option>
<option>	1902	</option>
<option>	1903	</option>
<option>	1904	</option>
<option>	1905	</option>
<option>	1906	</option>
<option>	1907	</option>
<option>	1908	</option>
<option>	1909	</option>
<option>	1910	</option>
<option>	1911	</option>
<option>	1912	</option>
<option>	1913	</option>
<option>	1914	</option>
<option>	1915	</option>
<option>	1916	</option>
<option>	1917	</option>
<option>	1918	</option>
<option>	1919	</option>
<option>	1920	</option>
<option>	1921	</option>
<option>	1922	</option>
<option>	1923	</option>
<option>	1924	</option>
<option>	1925	</option>
<option>	1926	</option>
<option>	1927	</option>
<option>	1928	</option>
<option>	1929	</option>
<option>	1930	</option>
<option>	1931	</option>
<option>	1932	</option>
<option>	1933	</option>
<option>	1934	</option>
<option>	1935	</option>
<option>	1936	</option>
<option>	1937	</option>
<option>	1938	</option>
<option>	1939	</option>
<option>	1940	</option>
<option>	1941	</option>
<option>	1942	</option>
<option>	1943	</option>
<option>	1944	</option>
<option>	1945	</option>
<option>	1946	</option>
<option>	1947	</option>
<option>	1948	</option>
<option>	1949	</option>
<option>	1950	</option>
<option>	1951	</option>
<option>	1952	</option>
<option>	1953	</option>
<option>	1954	</option>
<option>	1955	</option>
<option>	1956	</option>
<option>	1957	</option>
<option>	1958	</option>
<option>	1959	</option>
<option>	1960	</option>
<option>	1961	</option>
<option>	1962	</option>
<option>	1963	</option>
<option>	1964	</option>
<option>	1965	</option>
<option>	1966	</option>
<option>	1967	</option>
<option>	1968	</option>
<option>	1969	</option>
<option>	1970	</option>
<option>	1971	</option>
<option>	1972	</option>
<option>	1973	</option>
<option>	1974	</option>
<option>	1975	</option>
<option>	1976	</option>
<option>	1977	</option>
<option>	1978	</option>
<option>	1979	</option>
<option>	1980	</option>
<option>	1981	</option>
<option>	1982	</option>
<option>	1983	</option>
<option>	1984	</option>
<option>	1985	</option>
<option>	1986	</option>
<option>	1987	</option>
<option>	1988	</option>
<option>	1989	</option>
<option>	1990	</option>
<option>	1991	</option>
<option>	1992	</option>
<option>	1993	</option>
<option>	1994	</option>
<option>	1995	</option>
<option>	1996	</option>
<option>	1997	</option>
<option>	1998	</option>
<option>	1999	</option>
<option>	2000	</option>
</select>
</td></tr>
<tr>
<td width="200">&nbsp;</td>
<td colspan="2" style="padding-left:0px;"><hr style="color:#B8C8DC0; width:400px;" /></td>
</tr>
<tr><td align="right">&nbsp;</td><td width="150" align="right" style="height:40px;">Sicherheitsfrage:</td><td width="250"><select style="height:30px; width:248px; font-size:20px; color:#B8C8DC;" name="sicherheitsfrage"><option value="0">------------</option>
<option value="Mein Geburtsort">Mein Geburtsort</option>
<option value="Name des ersten Klassenlehrers">Name des ersten Klassenlehrers</option>
<option value="Lieblingslehrer">Lieblingslehrer</option>
<option value="Name des ersten Partners">Name des ersten Partners</option>
</select></td></tr>
<tr><td align="right">&nbsp;</td><td width="150" align="right" style="height:40px;">Antwort:</td><td width="250"><input type="text" style="height:38px; width:248px; font-size:20px; color:#B8C8DC;" name="antwort" maxlength="50" /></td></tr>
<tr>
<td width="200">&nbsp;</td>
<td colspan="2" style="padding-left:0px;"><hr style="color:#B8C8DC0; width:400px;" /></td>
</tr>

<tr><td align="right">&nbsp;</td><td width="150" align="right" style="height:40px;">&nbsp;</td><td width="250"><input type="submit" value="Registrieren" name="reg_new_user" /></td></tr>




</table>
</form>


hier das komplette script:

PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
if(!isset($_POST['reg_new_user'])) return;

if(
!isset($_POST['vorname']) || 
!isset($_POST['nachname']) ||
!isset($_POST['username']) ||
!isset($_POST['email']) ||
!isset($_POST['passwort']) ||
!isset($_POST['sex']) ||
!isset($_POST['vorname']) || 
!isset($_POST['geb_tag']) || 
!isset($_POST['geb_mon']) || 
!isset($_POST['geb_jahr']) || 
!isset($_POST['sicherheitsfrage']) || 
!isset($_POST['antwort']) || 

empty($_POST['vorname']) || 
empty($_POST['nachname']) ||
empty($_POST['username']) ||
empty($_POST['email']) ||
empty($_POST['passwort']) ||
empty($_POST['sex']) ||
empty($_POST['vorname']) || 
empty($_POST['geb_tag']) || 
empty($_POST['geb_mon']) || 
empty($_POST['geb_jahr']) || 
empty($_POST['sicherheitsfrage']) || 
empty($_POST['antwort'])) {
	
$error_msg = "Bitte füllen Sie alle Felder aus.";
return;	
}

if($_POST['passwort'][0] !== $_POST['passwort'][1]) {
	$error_msg = "Die Passwörter stimmen nicht überein.";
	return;
}

if($_POST['email'][0] !== $_POST['email'][1]) {
	$error_msg = "Die e-Mail adressen stimmen nicht überein.";
	return;
}

if(strlen($_POST['username']) > 20 ) {
	$error_msg = "Der Username ist zu Lang";
	return;
}
if(strlen($_POST['vorname']) > 30 ) {
	$error_msg = "Der Vorname ist zu Lang";
	return;
}
if(strlen($_POST['nachname']) > 30 ) {
	$error_msg = "Der Nachname ist zu Lang";
	return;
}
if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
	$error_msg = "Bitte geben Sie eine gültige Email Adresse ein.";
	return;
}

$geb_tag = trim($_POST['geb_tag']) ; 
$geb_mon = trim($_POST['geb_mon']) ;
$geb_jahr = trim($_POST['geb_jahr']) ;

$passwort = hash('sha256', $_POST['passwort'][0].$salt);
$username = trim($_POST['username']) ;
$vorname = trim($_POST['vorname']) ;
$nachname = trim($_POST['nachname']) ;
$email = $_POST['email'] ;
$antwort = trim($_POST['antwort']) ;
$sicherheitsfrage = trim($_POST['sicherheitsfrage']) ;
$sex = trim($_POST['sex']) ;
$user_ip = ip2long($_SERVER['REMOTE_ADDR']);
$confirm_code=md5(uniqid(rand()));

#$log_data = '
#	INSERT INTO 
#				ow_login 
#				(username, email, passwort, confirmcode, ip, sicherheit, antwort) )
#	VALUES
#				(?, ?, ?, ?, ?, ?,?)';
#	
#	$stmtt = $db2->prepare($log_data);
#	$stmtt->bind_param('ssssiss', $username, $email, $passwort, $confirmcode, $user_ip, $sicherheitsfrage, $antwort);
#	if(!$stmtt->execute()) {
#		echo "Fehler";
#	}



$log_data = mysql_query("INSERT 
								INTO 
									ow_login 	
									(username, email, passwort, confirmcode, ip, sicherheit, antwort) 
									
									VALUES 
									
									('$username', '$email, '$passwort, '$confirmcode, '$user_ip, '$sicherheitsfrage', '$antwort')");
									mysql_query($log_data) or die(mysql_error());
									echo mysql_affected_rows();
									echo "{$log_data}\n";
$last_id = mysql_insert_id($log_data);

$pro_data = mysql_query("INSERT 
								INTO 
									ow_user_data 	
									(userid, vorname, nachname, geb_tag, geb_mon, geb_jahr, sex) 
									
									VALUES 
									
									('$last_id', '$vorname', '$nachname, '$geb_tag', '$geb_mon', '$geb_jahr', '$sex')");

$scs_msg =" Der Bernutzer ".htmlspecialchars($_POST['name'])." wurde erfolgreich hinzugefügt Bitte bestätigen Sie nun Ihre e-Mail.";
header ("Location: ?prof=6&a=2");

?>


wenn ich im 2ten Script eine weiteren Post eintrage mit zufälligem Namen schlägt es sofort an und ich erhalte den hinweis das diese nicht defeniert ist, somit wird dieses script immerhin aufgerufen bei absenden des formulars.

Sonst passiert aber nichts mehr und seid ich
PHP:
mysql_query($log_data) or die(mysql_error());
echo mysql_affected_rows();
echo "{$log_data}\n";
mit eingebaut habe wird auch nichts mehr in die Datenbank geschrieben. mfg

Ersten Fehler gefunden <?php echo $err_msg; ?> im formular ist nicht korrekt und gabe es durch <?php echo $error_msg; ?> wie im script ersetzt arbeite weiter dran. dummer fehler geb ich zu.

Nun beendet er es bei:

if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$error_msg = "Bitte geben Sie eine gültige Email Adresse ein.";
return;
}

dabei ist die email definitiv gültig.
 
Zuletzt bearbeitet von einem Moderator:
Ich will nicht dein ganzes Script. Ich will das generierte SQL (So wie in meinem Tutorial beschrieben).
Das Script kann ich bei mir nicht laufen lassen und einfach alles druchgehen um Blind Fehler zu suchen - nope.
 
Zurück