Fehlermeldung bei PHP und MySQL - was tun?

NWsimon1702

Well-known member
ID: 327951
L
12 Mai 2006
491
10
Hallo!

Brauche mal Hilfe bei einer Fehlermeldung.

Ich möchte ein Script installieren und es kommt immer die nun folgende Fehlermeldung:
Es ist ein MySQL-Fehler aufgetreten!Incorrect integer value: '' for column 'id' at row 1

DER SQL-Teil sieht so aus:

...

--
-- Tabellenstruktur für Tabelle `zugriff`
--

CREATE TABLE IF NOT EXISTS `zugriff` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Zugriff auf das Script' AUTO_INCREMENT=16 ;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

...


Die install.php sieht so aus:

<?php

include("config.php");

if (isset($_POST['install']))
{
preg_match("/^[a-z0-9]*$/i",$_POST['username'],$u);

$pass = $_POST['password'] ? md5($_POST['password']) : false;

if ($u && $pass)
{
$b = mysql_query("INSERT INTO zugriff VALUES ('','".$u[0]."','$pass');");

if ($b) echo "Script wurde erfolgreich installiert! Username: ".$u[0];
else echo "Es ist ein MySQL-Fehler aufgetreten!".mysql_error();
}

else
{
echo "Fehler! Username muss aus Buchstaben und Zahlen bestehen und Passwortfeld darf nicht leer sein!";
}

}

else
{
echo "<h1>Neuen Benutzer registrieren!</h1>

<form method='post' action='install.php'>
Username: <input type='text' name='username'><br>
Passwort: <input type='text' name='password'><br>
<input type='submit' name='install' value='Installieren'>
</form>";
}


Ich denke mal, es liegt irgendwie hier dran:

$b = mysql_query("INSERT INTO zugriff VALUES ('','".$u[0]."','$pass');");

Aber ich weiß nicht, wie es sein muss, dass es korrekt ist.
Hat von euch diesbezüglich einer ne gute Idee für mich?
 
Ich tippe mal auf den Ausdruck "int(255)". Was soll (kann / darf / tut / ...) die Klammer da? Und die Unmenge an ' kommt mir auch etwas seltsam vor. Im PHP-Teil durchaus notwendig, aber auf der SQL-Seite?


https://sql-info.de/mysql/examples/CREATE-TABLE-examples.html

(255) legt eine begrenzung an Zeichen / einträgen fest. Egal ob vom Typen INT, CHARSET etc. Wird sogar in der von Dir verlinkten Seite verwendet.

Deine Unmenge an ' ist auch nix anderes als wenn ich bei einer Anweisung " verwende.

An den Thread ersteller: Ich weiß nicht wie gut dein Englisch ist, aber vielleicht hilft dir dieser Blog hier weiter
 
Hey,

das Problem liegt am INSERT Befehl. In PHP ist ein INTEGER-Wert kein String, darf also folglich auch nicht in Anführungszeich gesetzt werden, da es sonst ein String wäre. MySQL ist das etwas penibler als PHP. Wenn du also bei deinem Insert die Anführungszeichen für die ID-Spalte weglässt oder die ID-Spalte direkt außen volässt beim INSERT dürftest du keine Probleme mehr bekommen.

Geht also um diese Zeile
Code:
$b = mysql_query("INSERT INTO zugriff VALUES ('','".$u[0]."','$pass');");
Wenn du diese abänderst in
Code:
$b = mysql_query("INSERT INTO zugriff VALUES [COLOR="Red"](,[/COLOR]'".$u[0]."','$pass');");
oder
Code:
$b = mysql_query("INSERT INTO zugriff [COLOR="Red"](username, password)[/COLOR] VALUES ('".$u[0]."','$pass');");
dann müsste es funktionieren!

Der Fehler kommt daher, dass du einen leeren String ('') als Integer(ZAHL) eintragen willst.
 
Ich stimme QuArK007 vollkommen zu.

var_dump('') muss String (0) ausgeben ;)
var_dump('10') ist beispielsweise auch ein String (2)
 
(255) legt eine begrenzung an Zeichen / einträgen fest. Egal ob vom Typen INT, CHARSET etc. Wird sogar in der von Dir verlinkten Seite verwendet.


Code:
CREATE TABLE IF NOT EXISTS `zugriff` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ...

Bei username und password habe ich auch kein Problem (max. 255 Zeichen je Feld), aber ein 255 Zeichen langer int-Wert bereitet mir leichte Kopfschmerzen.
 
@apolle: richtig, das macht auch keinen Sinn, da INT generell nur maximal 10 Zahlen akzeptiert, maximal jedoch von 0 - 4294967295. [Q]
Aber das sollte für deine User eigentlich ausreichen, sofern du nicht vor hast, ein google+2 oder FB2 zu gründen. die 255 bedeuten nur, dass, wenn vorhanden, 255 Zeichen ausgegeben werden. Die Spalte in der DB kann aber mehr aufnehmen auch wenn nur z.B. 4 ausgegeben werden.

Also mit dem INT(255) ist nix falsch, nur bringt es nix ;)
 
die 255 bedeuten nur, dass, wenn vorhanden, 255 Zeichen ausgegeben werden. Die Spalte in der DB kann aber mehr aufnehmen auch wenn nur z.B. 4 ausgegeben werden

es ist sogar so, dass diese Angabe nur den Kommandozeilen-Client von MySQL betreffen. Alle anderen (Programmiersprachen, Verwaltungstools wie PhpMyAdmin) liefern aber die echte Zahl zurück und kümmern sich nicht um diese Angabe bei den numerischen Spalten.