Zum Inhalt springen

Empfohlene BeitrÀge

Geschrieben

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

Geschrieben

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

Geschrieben

@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

Geschrieben

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

Geschrieben

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

Geschrieben

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?

Geschrieben

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

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die grĂ¶ĂŸte IT-Community
rund um Ausbildung, Job, Weiterbildung fĂŒr IT-FachkrĂ€fte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard fĂŒr Fachinformatiker und IT-FachkrĂ€fte

×
×
  • Neu erstellen...