• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

If-Schleife, Datenbank ...

BraCay

Neues Mitglied
Hi,
habe folgendes Problem

PHP:
            if(!mysql_query("INSERT INTO prozente (S_ID, fachName, prozente, jahr, halbjahr) VALUES ('$S_ID', '$fachName', '$prozente', '$jahr', '$halbjahr')")) {
                mysql_query("UPDATE prozente SET S_ID = '$S_ID', fachName = '$fachName', prozente = '$prozente', jahr = '$jahr', halbjahr = '$halbjahr'");
            }else
                mysql_query("INSERT INTO prozente (S_ID, fachName, prozente, jahr, halbjahr) VALUES ('$S_ID', '$fachName', '$prozente', '$jahr', '$halbjahr')");

Die else führt er aus, sofern es ein neuer Datensatz ist. Ist das Datensatz vorhanden, soll er geupdated werden, das macht er natürlich nicht. Kann mir wer da helfen?
 
Werbung:
ich finde persönlich das nicht gut geschriebn hier mach dir was besseres:
ist nicht getestet:
PHP:
 <?php

$link = mysql_connect("localhost", "mysql_user", "mysql_password");
mysql_select_db("database", $link);

$result = mysql_query("INSERT INTO prozente (S_ID, fachName, prozente, jahr, halbjahr) VALUES ('$S_ID', '$fachName', '$prozente', '$jahr', '$halbjahr')")
$num_rows = mysql_num_rows($result);


if ($num_rows > 0) { //wenn einer vorhanden ist
mysql_query("UPDATE prozente SET S_ID = '$S_ID', fachName = '$fachName', prozente = '$prozente', jahr = '$jahr', halbjahr = '$halbjahr'");
}
else {
mysql_query("INSERT INTO prozente (S_ID, fachName, prozente, jahr, halbjahr) VALUES ('$S_ID', '$fachName', '$prozente', '$jahr', '$halbjahr')");  
}


?>
 
Werbung:
ich versteh dieses update nicht >.> könntest du eventuell mal an meinem beispiel zeiegn? ich kann mir darunter nichts vorstellen, der addiert im beispiel, aber er soll es ja ersetzen.
 
ich hab es, ich habe die WHERE vollvergessen, da mein Primärschlüssel ja aus 4 Teilen besteht, hier das Ergebnis, falls wer das gleiche Prob hat

PHP:
            $query = mysql_query("SELECT S_ID FROM schueler WHERE sname = '$name'");
            $row = mysql_fetch_array($query);
            $S_ID = $row['S_ID'];
            $query = "INSERT INTO prozente (S_ID, fachName, prozente, jahr, halbjahr) VALUES ('$S_ID', '$fachName', '$prozente', '$jahr', '$halbjahr')";
            
            if(!mysql_query($query)) {
                mysql_query("UPDATE prozente SET prozente = '$prozente' WHERE S_ID = '$S_ID' and fachName = '$fachName' and jahr = '$jahr' and halbjahr = '$halbjahr'");
            }else {
                mysql_query($query);
            }
 
ich versteh dieses update nicht >.> könntest du eventuell mal an meinem beispiel zeiegn? ich kann mir darunter nichts vorstellen, der addiert im beispiel, aber er soll es ja ersetzen.

So könnte es in einer Query gehen: (Ist aber ungetestet.)

Code:
INSERT INTO
    prozente
    (S_ID, fachName, prozente, jahr, halbjahr)
VALUES
    ('$S_ID', '$fachName', '$prozente', '$jahr', '$halbjahr')
ON DUPLICATE KEY UPDATE
    prozente = '$prozente'

PS: Noch ein Hinweis auf Escaping zum Schutz vor SQL Injections. Wenn du das eh machst, einfach ignorieren.

PPS: Bevor jemand anders den Besserwisser spielt: if-schleife.de ;)
 
Zuletzt bearbeitet:
Werbung:
Das ist doch Unsinn zweimal den insert Befehl auszuführen und was ist das für DB Design wo es keine ID gibt?

Ich würde es umgekehrt machen, erst den update Befehl ausführen und wenn dieser auf null Reihen gewirkt hat (also fehlgeschlagen ist), dann kommt der insert Befehl.

Aber ich würde der Tabelle auf jeden Fall eine ID geben
 
herzlichen Glückwunsch .. sie haben die S_ID überlesen ... zudem würde ich es mit update überprüfen müsste ich zweimal update benutzen ... oder wie hast du dir das vorgestellt?
 
if ist keine schleife...
das eine ist ein edit das andere ist ein neuer satz (sowas trennt man) und eine id würde ich auch vergeben.

ps
if ($num_rows > 0) prüft, ob keine daten in der tabelle sind, wer sagt das?

pps
wenn $S_ID die id ist, wieso prüftst du dann nicht, ob es den datensatz mit dieser id gibt?
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
Okay, sortieren wir noch mal.

Wir haben diese Tabellen:

Code:
[schueler]
- S_ID (Primärschlüssel)
- sname
- ...

[prozente]
- S_ID (Fremdschlüssel)  --+
- fachName                 | UNIQUE INDEX über
- jahr                     | 4 Spalten
- halbjahr               --+
- prozente

Wir haben außerdem ein Eingabeformular mit den Feldern:
- sname
- fachName
- jahr
- halbjahr
- prozente

Beim Absenden dieses Formulars soll folgendes geschehen:

1. In 'schueler' die S_ID von sname ermitteln

Mögliche Auskommen:
- S_ID wird gefunden
- S_ID wird nicht gefunden (Datensatz mit sname existiert nicht) --> Fehler?

2. Daten mit entsprechender S_ID in 'prozente' einsetzen. Wenn Datensatz mit entsprechendem UNIQUE INDEX bereits existiert, diesen aktualisieren

Code:
INSERT INTO
    prozente
    (
        S_ID,
        fachName,
        prozente,
        jahr,
        halbjahr,
    )
VALUES
    (
        $S_ID,
        $fachName,
        $prozente,
        $jahr,
        $halbjahr
    )
ON DUPLICATE KEY UPDATE
    prozente = $prozente

Ich würde im Formular schon mit der S_ID arbeiten, also meinetwegen eine Select-Box anbieten, deren Einträge die Namen und deren Werte die S_IDs sind.

Edit: Ob das mit dem vierspaltigen UNIQUE INDEX eine gute Idee ist, sollen bitte Andere entscheiden.
 
Zuletzt bearbeitet:
herzlichen Glückwunsch .. sie haben die S_ID überlesen ... zudem würde ich es mit update überprüfen müsste ich zweimal update benutzen ... oder wie hast du dir das vorgestellt?
Nein, hab ich nicht, aber warum verwendest du dann S_ID nicht beim update als Schlüssel?
Wieso musst du zweimal den update prüfen? Du musst nichts prüfen, das machst du auch nciht in deinem code, du führst einen INSERT Befehle durch und danach machst du einen UPDATE, wenn der INSERT Befehl erfolgreich war, führst du ihn noch einmal aus. Das ist zwar nicht schädlich, aber reichlich unnötig.
 
Zurück
Oben