Code einer save() function

  • Code einer save() function

    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

    Quellcode

    1. if( mysql_num_rows($result) )
    2. {
    3. $debug .= 'found some entries';
    4. $debug .= ' ';
    5. while( $_POST['home_goal_'.$index] != '')
    6. {
    7. $debug .= ' home_goal_'.$index.' :'.$_POST['home_goal_'.$index];
    8. if($_POST['home_goal_'.$index] != 'NULL' && $_POST['guest_goal_'.$index] != 'NULL')
    9. {
    10. $query = "DELETE FROM `tipp` WHERE tipp.spieltag_id =".$_POST['spiel'.$index.'_id']." AND tipp.user_id =".$row_id[0];
    11. $result = mysql_query($query) or die('unable to insert tipp data');
    12. // $debug .= $query .' --- ';
    13. $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);";
    14. $result = mysql_query($query) or die('unable to insert tipp data:'.$query);
    15. // $debug .= $query .' --- ';
    16. }
    17. else
    18. {
    19. // $debug .= '!!---> WTF <----!!';
    20. }
    21. $index++;
    22. }
    23. echo 'ok';
    Alles anzeigen


    Kann jemand mir bitte helfen?

    Mfg
    Maurice
  • d0nut schrieb:

    was funktioniert denn nicht? Kleine Empfehlung: SQL Queries sollte man nicht innerhalb von Schleifen ausführen. Konkateniere besser einen String und führe ihn am Ende aus.


    Wie machst du das denn, da MySQL ja keine MultiQueries ausführen kann?
    Dann müsste man am Ende mit Explode alles wieder auseinander friemeln und wieder durch eine Schleife jagen.


    Achja und so was ist ein nogo:

    Quellcode

    1. $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);";


    Benutze mindestens:

    Quellcode

    1. mysql_real_escape_string()


    siehe de.wikipedia.org/wiki/SQL_Injection
  • Ich erstelle einfach 2 große Strings (1x INSERT und 1x DELETE)

    Quellcode

    1. foreach($query as $row) {
    2. $delete[] = " (tipp.spieltag_id =$var1 AND tipp.user_id = $var2) ";
    3. $insert[] = " ($var1,$var2,$var3,$var4,$var5) ";
    4. }
    5. if(count($delete)) mysql_query("DELETE FROM tipp WHERE ".implode(" OR ",$delete));
    6. if(count($insert)) mysql_query("INSERT INTO tipps VALUES ".implode(",",$insert));


    vince schrieb:

    Wie machst du das denn, da MySQL ja keine MultiQueries ausführen kann?

    Diese 2 Strings könnte man wenn eine Storage Engine mit Transaktionssupport verwendet wird (z.B. InnoDB) immer noch über einen Query schicken.

    Aber falls user_id und spieltag_id einen UNIQUE ergeben, brauchst du auch gar keinen DELETE und kannst mit REPLACE INTO einfügen. Siehe MySQL Manual.