morris_m Geschrieben 9. Januar 2009 Geschrieben 9. Januar 2009 Hey, Ich mache gerade ein gewinnspiel fuer ein Kunde und wollte mal ein funktion bauen, die sowas macht. Alle Tipps der User in die neue Tabelle fĂŒr Tipp Backups speichern Bei Tippabgabe einfach den abgegebenen Tipp mit datum und Uhrzeit in die Datenbank eintragen um ein Backupsystem zu erhalten. Here is a part of the code where i wanna put it if( mysql_num_rows($result) ) { $debug .= 'found some entries'; $debug .= ' '; while( $_POST['home_goal_'.$index] != '') { $debug .= ' home_goal_'.$index.' :'.$_POST['home_goal_'.$index]; if($_POST['home_goal_'.$index] != 'NULL' && $_POST['guest_goal_'.$index] != 'NULL') { $query = "DELETE FROM `tipp` WHERE tipp.spieltag_id =".$_POST['spiel'.$index.'_id']." AND tipp.user_id =".$row_id[0]; $result = mysql_query($query) or die('unable to insert tipp data'); // $debug .= $query .' --- '; $query = "INSERT INTO `bluemel`.`tipp` (`id`, `user_id`, `spieltag_id`, `home_goal`, `guest_goal`,`points`) VALUES (NULL,".$row_id[0].",".$_POST['spiel'.$index.'_id'].",". $_POST['home_goal_'.$index].",".$_POST['guest_goal_'.$index] .",NULL);"; $result = mysql_query($query) or die('unable to insert tipp data:'.$query); // $debug .= $query .' --- '; } else { // $debug .= '!!---> WTF <----!!'; } $index++; } echo 'ok'; hat jemand eine Idee,wie ich es loesen konnte? MFG morris_m
flashpixx Geschrieben 9. Januar 2009 Geschrieben 9. Januar 2009 Wo ist das Problem? Mit dem Codefragment kann ich so rein gar nichts anfangen. Bitte einmal dies hier lesen: Wie man Fragen richtig stellt: eine Anleitung wie man Fragen erfolgreich in Usenet, Mailing Listen und Webforen stellt. Phil
morris_m Geschrieben 9. Januar 2009 Autor Geschrieben 9. Januar 2009 Ich moechte ein speicher Funktion schreiben und ich wollte nur ein anweisung haben. Ich will es fuer ein Tippspiel das ich entwirkle. Ich wollte die dateien des spielers nachdem sie getippt haben Speichern nach Name,Angentur,Datum, time. Ich wollte nur wissen. welche function ich benutzen sollte und wie ich es einstellen kann Ich weiss nicht,ob es klar genug ist Danke fuer den schnellen Antwort
robotto7831a Geschrieben 9. Januar 2009 Geschrieben 9. Januar 2009 Du willst also bei der Abgabe eines Tipps diesen zusĂ€tzlich noch woanders speichern? Dann mach doch eine zweite Insert Anweisung oder lass es ĂŒber einen Trigger erledigen. Frank
flashpixx Geschrieben 9. Januar 2009 Geschrieben 9. Januar 2009 @robotto7831a: Es ist die Frage ob es innerhalb der Datenbank gemacht werden soll oder via Script. im Grunde ist beides möglich. Ich wĂŒrde sogar eine Stored Procedure vorschlagen, die atomar / transaktionssicher ist, also entweder wird komplett eingefĂŒgt oder nichts. Phil
morris_m Geschrieben 9. Januar 2009 Autor Geschrieben 9. Januar 2009 Ich versuche mal mit der 2. Insert. Ich wĂŒrde sogar eine Stored Procedure vorschlagen, die atomar / transaktionssicher ist, also entweder wird komplett eingefĂŒgt oder nichts. Hey Phil kannst du mir bitte deine 2e Idee erklaeren bitte mfg Morris
flashpixx Geschrieben 9. Januar 2009 Geschrieben 9. Januar 2009 Hey Phil kannst du mir bitte deine 2e Idee erklaeren bitte Klar: Also eine Stored Procedure ist ein StĂŒck Quellcode in der Datenbank, eben eine Funktion. Ich nenne sie einmal "inserttipp(parameter)". Innerhalb dieser Funktion sind Deine beiden Inserts drin. Dein Script selbst ruft dann nur "inserttip(>Daten<)" auf. Stell Dir folgende Situation vor, wenn Du beide Inserts in Deinem Script hast: Der erste Insert wird korrekt ausgefĂŒhrt und beim zweiten tritt eine SchlĂŒsselverletzung auf. Dann hast Du im Grunde nur die HĂ€lfte der Daten eingefĂŒgt. Die Stored Procedure wird im Gegensatz zu den beiden Insert komplett oder gar nicht ausgefĂŒhrt (sprich die Ănderung wird ggf wieder rĂŒckgĂ€ngig gemacht). D.h. Du hast nachdem die Procedure durchgelaufen ist, sichergestellt, dass auf beiden Tabellen auch Daten vorhanden sind. Du kannst das natĂŒrlich auch mit dem 2 Inserts im Script ohne Stored Procedure realisieren, dafĂŒr muss Du die beiden Inserts in eine Transaktion packen und wenn beim ersten oder beim zweiten ein Fehler auftritt ein "Rollback" machen. Gerade wenn man zusammenhĂ€nge Insertes / Updates hat bzw sicherstellen muss, dass der Datenstand konsistent bleibt benutzt man so etwas. Bei mySQL ist das aber nur mit einer InnoDB möglich. Eine myISAM Datenbank unterstĂŒtzt das nicht. Gerade wenn Du bei dem Tippspiele viele Aufrufe hast und dass z.B. zu einem Zeitpunkt X alle Daten konsistent sein mĂŒssen, wĂŒrde man eben den Insert / Update komplett als Stored Procedure ausfĂŒhren, denn wenn z.B. noch ein Tipp um 19:59:59 Uhr begonnen wird einzufĂŒgen und bis 20:00:01 Uhr lĂ€uft, aber gleichzeitig um 20:00:00 Uhr ein weiters Script die Daten schon beginnt auszuwerten, wie sieht der Stand aus. Wenn es eine Stored Procedure ist / Transaktionssicher ist, dann wĂŒrde der Prozess den noch im EinfĂŒgen Prozess befindlichen Datensatz nicht sehen. Gleiches gilt z.B. wenn Du 2 Updates ausfĂŒhrst, wie sieht der Datenstand aus, wenn sie z.B. kollidieren Hoffe das ist so einigermaĂen verstĂ€ndlich Phil
morris_m Geschrieben 9. Januar 2009 Autor Geschrieben 9. Januar 2009 Thank you Phil, Ich versuche es jetzt. Ich bin so erleichtert. Danke vielmals
morris_m Geschrieben 11. Januar 2009 Autor Geschrieben 11. Januar 2009 Hey Phil, Ich habe versucht,was du gestern mir gesagt hast.einzusetzen.Aber es funktioniert nicht ganz.hier ist der Code CREATE PROCEDURE 'inserttipp'( int(11) id int(11) user_id int(11) spieltag_id int(11) home_goal int(11) guest_goal int(11) points date date time time ); DELIMITER $$ DROP PROCEDURE IF EXISTS `bluemel`.`inserttipp` $$ CREATE DEFINER=`bluemel`@`localhost` PROCEDURE `inserttipp`(IN iid int(11), IN iuser_id int(11), IN ispieltag_id int(11), IN ihome_goal int(11), IN iguest_goal(11), IN ipoints int(11)) BEGIN INSERT INTO `bluemel`.`tipp` (`id`, `user_id`, `spieltag_id`, `home_goal`, `guest_goal`,`points`) VALUES (iid, iuser_id, ispieltag_id, ihome_goal, iguest_goal, ipoints); // INSERT INTO `bluemel`.`tipp` (`id`, `user_id`, `spieltag_id`, home_goal`, guest_goal`,`points`) VALUES (iid, iuser_id, ispieltag_id, ihome_goal, iguest_goal, ipoints); SELECT LAST_INSERT_ID(); END $$ DELIMITER ; CALL insertipp('iid, iuser_id, ispieltag_id, ihome_goal, iguest_goal, ipoints')") ; Was habe ich falsch gemacht?
flashpixx Geschrieben 12. Januar 2009 Geschrieben 12. Januar 2009 Was habe ich falsch gemacht? Wie lautet die Fehlermeldung? Bitte poste vollstÀndige Informationen, einfach nur Quellcode(s) und die Aussage "lÀuft nicht" ist nicht hilfreich. Phil
Empfohlene BeitrÀge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto fĂŒr unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden