Eintrag in DB ersetzen

Sasser

Erfahrenes Mitglied
Hallo Leute!

Zur Zeit wird jedes $weapons in eine DB geschrieben, dass funktioniert nun endlich :)

Nun qualmt mir der Kopf weil ich keine Lösung weis; Ich möchte nun gern die DB abrufen und das Feld `weaponprogress` nach einer eventuell vorhandenen $id durchsuchen (siehe Quelltext unten) und wenn diese existiert soll $weapon einfach dazu addiert und nicht neu rein geschrieben werden! Ich weiß absolut nicht wie ich anfange...

PHP:
function weaponaction($weapons,$city)
{
foreach ($weapons as $id => $weapon)
{
if (($weapon != "") && ($weapon != "0") && (is_numeric($weapon) == true))
{
$db = connect_db();
$weapons=mysql_fetch_assoc(mysql_query("SELECT * FROM weapons WHERE `id` = '$id'", $db));
$row=mysql_fetch_assoc(mysql_query("SELECT * FROM citys WHERE `coordinates` = '$city'", $db));
$time = time()+$weapons[duration];
$progresspart = "$time|$id|$weapon";
$progress = "$progress#$progresspart";
if ($row[weaponprogress] != "")
{
$progress = "$row[weaponprogress]#$progress";
}
mysql_query("UPDATE citys SET `weaponprogress` = '$progress' WHERE `coordinates` = '$city'", $db);
mysql_close($db);
}
}
}

Also nochmal zur Verdeutlichung im Feld `weaponprogress` sind mehrere Datensätze durch # getrennt:

#$id|$weapon|$time##$id|$weapon|$time# usw.

und wenn die $id einer ID in der Datenbank entspricht soll einfach zu $weapon die neue $weapon (Anzahl) dazugerechnet werden!
 
Zuletzt bearbeitet:
Ich habe nun eine Lösung gefunden! Diese funktioniert auch prima, allerding wenn man mehrere $weapon speichern will die bereits vorhanden sind und ersetzt werden sollen, werden Sie komplett neu dahintergeschrieben!?

Das Problem tritt nur auf, wenn man mehrere vorhandene speichern will ansonsten funktioniert es prima! Wo hat sich der Fehler versteckt oder was mache ich falsch?

Hier meine Funktion:
PHP:
function weaponaction($weapons,$city)
{
foreach ($weapons as $id => $weapon)
{
if (($weapon != "") && ($weapon != "0") && (is_numeric($weapon) == true))
{
$db = connect_db();
$weaponinfo=mysql_fetch_assoc(mysql_query("SELECT * FROM weapons WHERE `id` = '$id'", $db));
$row=mysql_fetch_assoc(mysql_query("SELECT * FROM citys WHERE `coordinates` = '$city'", $db));
if ($row[weaponprogress] != "")
{
$search = explode("#", $row[weaponprogress]);
foreach ($search as $result)
{
$part = explode("|", $result);
if ($part[1] == $id)
{
$var1 = $part[0]+($weaponinfo[duration]*$weapon);
$var2 = $part[2]+$weapon;
$progresspart = "$var1|$part[1]|$var2";
$progress = str_replace("$result","$progresspart",$row[weaponprogress]);
}
else
{
$time = time()+$weaponinfo[duration];
$progresspart = "$time|$id|$weapon";
$progress = "$row[weaponprogress]#$progresspart";
}
}
}
else
{
$time = time()+$weaponinfo[duration];
$progresspart = "$time|$id|$weapon";
$progress = $progresspart;
}
mysql_query("UPDATE citys SET `weaponprogress` = '$progress' WHERE `coordinates` = '$city'", $db);
mysql_close($db);
}
}
}
 
Hast du schonmal was von Tabulator gehört? Ich denke nicht jeder hier will sich durch so einen Code wühlen.
Ich habs trotzdem gemacht.

Zuerstmal:
PHP:
$row[weaponprogress]
Setzte sowas quotes!
PHP:
$row['weaponprogress']

Und bevor ich hier was anderes poste, rate ich dir dazu das "System" zu überdenken.
Wieso erstellst du strings wie:
Code:
#$id|$weapon|$time##$id|$weapon|$time#
Speichere doch sowas einzeln ab.

Und hier mal dein Code, mit einsatz von Tabulator:
PHP:
function weaponaction($weapons,$city)
{
    foreach ($weapons as $id => $weapon)
    {
        if (($weapon != "") && ($weapon != "0") && (is_numeric($weapon) == true))
        {
            $db = connect_db();
            $weaponinfo=mysql_fetch_assoc(mysql_query("SELECT * FROM weapons WHERE `id` = '$id'", $db));
            $row=mysql_fetch_assoc(mysql_query("SELECT * FROM citys WHERE `coordinates` = '$city'", $db));
            if ($row[weaponprogress] != "")
            {
                $search = explode("#", $row[weaponprogress]);
                foreach ($search as $result)
                {
                    $part = explode("|", $result);
                    if ($part[1] == $id)
                    {
                        $var1 = $part[0]+($weaponinfo[duration]*$weapon);
                        $var2 = $part[2]+$weapon;
                        $progresspart = "$var1|$part[1]|$var2";
                        $progress = str_replace("$result","$progresspart",$row[weaponprogress]);
                    }
                    else
                    {
                        $time = time()+$weaponinfo[duration];
                        $progresspart = "$time|$id|$weapon";
                        $progress = "$row[weaponprogress]#$progresspart";
                    }
                }
            }
            else
            {
                $time = time()+$weaponinfo[duration];
                $progresspart = "$time|$id|$weapon";
                $progress = $progresspart;
            }
            mysql_query("UPDATE citys SET `weaponprogress` = '$progress' WHERE `coordinates` = '$city'", $db);
            mysql_close($db);
        }
    }
}
 
Wenn ich das nicht so machen würde, müsste ich mindestens 50 neue Spalten erstellen und das wäre unsinnig oder?

Ja aber mein Problem ist nun immer noch nicht gelöst, auch wenn der Quelltext nun formatiert ist :)
 
Ich verstehe zwar gerade die ganze problematik nicht - aber für sowas wurden doch eigentlich Fremdschlüssel eingeführt, oder? ;)

Oder ich habe was total falsch verstanden ^^

lg
 
Zurück