• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

PHP-Bug beim SQL-DB-Eintrag...

Metallica

Lounge-Member
Hi Leute!

Ich hab da ein kleines Problem beim Erzeugen einer kompletten Nummer, die sich aus IDmm,DATEmm und TIMEmm (stehen bereits in der SQL-DB) zusammensetzt.

Der Datenbankeintrag funktioniert jetzt einwandfrei aber beim erzeugen der ganzen $nummer macht er das nicht beim soeben eingefügten Datensatz, sondern bei allen die in der DB drinnen sind.

Code:
//der Befehl ist OK
$sqlbefehl = mysql_query("INSERT INTO headrotation SET DATEmm = '$date',TIMEmm = '$time'");

//nummer erzeugen - da bockt's!
$lesen = mysql_query("select IDmm, DATEmm, TIMEmm from headrotation ");
while($row = mysql_fetch_array($lesen))
{ $nummer = $row[IDmm].".".$row[DATEmm].".".$row[TIMEmm];
$eintrag = mysql_query(" update headrotation set NUMMERmm='$mtid' where IDmm='$row[IDmm]' ");
}


und noch was: Ist es möglich die $nummer ohne den Punkten als Trennzeichen dazwischen zu erzeugen??
Also in einem durchgehend.
Hab versucht das "." wegzulassen => hat dann aber nicht gefunkt.

Thanxs for help
 
MySQL INSERT:
INSERT INTO tabelle(1,2,3,4) VALUES('','2','1','0');


MySQL Update:
UPDATE tabelle SET 1=1+1,2='4' WHERE 1='$id'

Du hingegen verwendest das INSERT Statement mit der Synthax eines Update Statements ;).

Wenn du Variabeln verketten willst, dann sollte das auf folgende Art funktionierten:

$nummer = $row[IDmm].$row[DATEmm].$row[TIMEmm];

oder:

$nummer = $row[IDmm];
$nummer .= $row[DATEmm];
$nummer .= $row[TIMEmm];
 
das mit dem Update nur beim soeben eingetragenen DS haut jetzt hin aber beim Nummer erzeugen bockt's obwohl ich deinen Befehl ($nummer = $row[IDmm].$row[DATEmm].$row[TIMEmm]; )eingebaut hab.

es steht jetzt nur "666" in der Spalte NUMMERmm
 
Dann probier halt die zweite Variante, bei mir klappt's allerdings auch mit der ersten immer ;)

$bla = "kdfgjhdfkg";
$bla .= "fkdghjdfkg";
$bla .="idruhgikdfgn";

========
Ausgabe: kdfgjhdfkgfkdghjdfkgidruhgikdfgn
 
äääähm, schau mal:

$eintrag = mysql_query(" update headrotation set NUMMERmm='$mtid' where IDmm='$row[IDmm]' ");

Müsste das fette dann nicht $nummer sein :confused:, also der string, den du vorher zusammengebaut hast?
 
nee, nee. das paßt schon. hab mich vertan. die variable heißt $mtid
hier nochmal der orig-code:
$lesen = mysql_query("select IDmm, DATEmm, TIMEmm from headrotation WHERE IDmm=LAST_INSERT_ID()");
$row = mysql_result($lesen,0);
$mtid = $row[IDmm].$row[DATEmm].$row[TIMEmm];
$eintrag = mysql_query(" update headrotation set DISPONRmm='$mtid' where IDmm='$row[IDmm]' ");


funkt aber einfach nicht. die spalte NUMMER enthält immer "666"
 
Was für ein Format hat denn die Spalte DISPONRmm in der DB? Vielleicht ist das Feld zu klein oder hat der eingetragenen Wert gänzlich gar nichts mit dem erstellten String zu gemeinsam?

Mach doch mal eine Ausgabe der SQL Statements und der Variable $mtid und kontrolliere dort!
Bsp:

$sql ="select IDmm, DATEmm, TIMEmm from headrotation WHERE IDmm=LAST_INSERT_ID()";
$lesen = mysql_query($sql);
$row = mysql_result($lesen,0);
$mtid = $row[IDmm].$row[DATEmm].$row[TIMEmm];
$sql1 = "update headrotation set DISPONRmm='$mtid' where IDmm='$row[IDmm]' ";
$eintrag = mysql_query($sql1);
echo $mtid."<br>".$sql."<br>".$sql1;

Was wird Dir ausgegeben?
 
das format der spalte DISPONRmm ist varchar(20) => das müßte also passen.

die meldung von sql (meinen errorhandler) lautet folgendermaßen:
error, mySQL said: '.mysql_error().'
Query war: '.1.'

ich glaub nicht, dass da was faul ist, oder??


mein errorhandler:
//OK or NOT OK Ausgabe von mysql
$blubdisponr = mysql_query($eintrag);
if (!$blubdisponr) {
echo "error, mySQL said: '.mysql_error().'<br>";
} else {
echo "Alles ok.";
}
echo "Query war: '.$eintrag.'<br>";
 
zur Info: es befindet sich natürlich alles in einem script.

das folgende steht vor der prozedur "nummer erzeugen":

mysql_connect.....bla bla

$date = date("d.m.Y");
$time = date("H:i:s");

$sqlbefehl = mysql_query("INSERT INTO headrotation SET DATEmm = '$date',TIMEmm = '$time'");

//nummer erzeugen
........
 
OK. Hab's nochmal genau durchgeschaut und die Fehler ausgebessert.

der OrigCode sieht jetzt so aus:
$lesen = mysql_query("select IDmm, DATEmm, TIMEmm from headrotation WHERE IDmm=LAST_INSERT_ID()");
while($row = mysql_fetch_array($lesen))
{ $nummer = $row[IDmm].$row[DATEmm].$row[TIMEmm];
$eintrag = mysql_query(" update headrotation set NUMMERmm='$nummer' where IDmm='$row[IDmm]' ");
}


Der DB-Eintrag sieht folgendermaßen aus:
ID_DATE_______TIME_____NUMMER
4__22.11.2001_09:06:44_422.11.200109:06:44

Es stimmt zu 99%.
Die Spalte NUMMER müßte nur so aussehen:
422112001090644
 
Hab's gelöst mit der php-functio str_replace!!
Alle doppelpunkte und normale punkte sind weg und der DB-Eintrag paßt.

DANKE für deine Hilfe!!!
 
Super!

Um Sonderzeichen und sowas in die mysql DB einzufügen, solltest du lieber "addslashes" nutzen, das fügt den Backslash vor diese Zeichen. Mit "stripslashes" werden diese dann wieder entfernt.
 
Zurück
Oben