Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: PHP und Mysql UPDATE komplett unlogisch

  1. #1
    PrDatur
    Gast

    Standard PHP und Mysql UPDATE komplett unlogisch

    Also ich verzweifle gerade

    Folgende Tabelle in der Mysql Datenbank

    id tag von bis jahreszeit status strposi
    1 Montag bis Freitag 10:00 22:00 winter offen 1
    2 Samstag, Sonntag 10:00 14:00 winter offen 2
    3 Montag, Mittwoch 14:00 22:00 sommer offen 1
    4 Dienstag, Donnerstag 14:00 22:00 sommer offen 2
    5 Freitag 10:00 21:00 sommer offen 3
    6 Samstag 10:00 14:00 sommer offen 4
    7 Sonntag 00:00 00:00 sommer geschlossen 5

    ( id 1 = strposi 1 )
    ( id 2 = strposi 2 )
    ( id 3 = strposi 1 )
    ( id 4 = strposi 2 )
    ( id 5 = strposi 3 )
    ( id 6 = strposi 4 )
    ( id 7 = strposi 5 )

    alle felder sind strings außer ID = integer(255) mit auto increment

    ich will damit bezwecken das ich die positionierungen der Texte verändern kann , als Abfrage zum ausgeben der Tabelle folgender Code

    echo "
    <table border=1 cellspacing=0 cellpadding=0 style=\"width:400px;\">
    <tr>
    <td>Tag(e):</td><td>Von</td><td>Bis</td><td style=\"width:50px;\">Position</td><td style=\"width:125px;\">Optionen:</td>
    </tr>
    ";
    $sql = Mysql_query("SELECT * FROM zeiten WHERE jahreszeit = 'Sommer' order by strposi");
    while($get = Mysql_fetch_object($sql)){
    echo "
    <tr>
    <td>$get->tag</td>
    <td>$get->von</td>
    <td>$get->bis</td>
    <td align='center'><a href=\"?page=zeiten&action=pos&id=".$get->id."&to=up&zeit=sommer\"><img src=\"images/arror_up.gif\" width=\"11\" height=\"11\" border=\"0\" alt=\"\"></a><a href=\"?page=zeiten&action=pos&id=".$get->id."&to=down&zeit=sommer\"><img src=\"images/arror_down.gif\" width=\"11\" height=\"11\" border=\"0\" alt=\"\"></a></td>
    <td>Editieren | Löschen</td>
    </tr>
    ";
    }
    echo "</table>

    ";

    So nun zu meinem "update" code

    if($action == "pos"){

    // Hier werden erstmal alle erstellen variablen die nicht übergeben werden müssen leer gesetzt und zerstört
    $strr = ""; unset($strr);
    $strr_id = ""; unset($strr_id);
    $strold = ""; unset($strold);
    $sql = ""; unset($sql);
    $sqll = ""; unset($sqll);
    $sqlll = ""; unset($sqlll);
    $sqllll = ""; unset($sqllll);
    $get = ""; unset($get);
    $gett = ""; unset($gett);

    // Hier wird die aktuelle Position der übergeben ID ermittelt und ein ( für testzwecke ) alle infos herausgeholt

    $sql = Mysql_query("SELECT * FROM zeiten WHERE id = '$id'");
    while($get = Mysql_fetch_object($sql)){$strold = $get->strposi; $strold_name = $get->tag;$str_old = $get->strposi;}

    // wenn nun die variable $to = up ist ( um den text nach oben zu holen ) wird in $strr die aktuelle position - 1 genommen, damits ne kleinere zahlt halt wird is ja klar, anders rum bei down wirds + 1 genommen


    if($to == "up"){$strr = $strold - 1;}else if($to == "down"){$strr = $strold + 1;}

    //Hier wird nun nach der id geschaut wo die position, die neue Position der alten id ist.

    // kleines beispiel id 5 hat position 4 , nun wird geschaut position 4 hat id 6


    // es werden auch hier für testzwecke alle daten ausgelesen

    $sqll = Mysql_query("SELECT * FROM zeiten WHERE jahreszeit = '$zeit' AND strposi = '$strr'");
    while($gett = mysql_fetch_object($sqll)){$strr_id = $gett->id; $strr_name = $gett->tag;$strr_old = $gett->strposi;}

    //Kurzer debug ausgabe der mir sagt welche id hatte welchen wert und bekommt neuen wert und um welche richtung es sich handelt

    echo "
    String Move ID: $id ( $strold_name ) war $str_old -> wird zu: $strr

    String Move To: $to

    String Move ID: $strr_id ( $strr_name ) war $strr_old -> wird zu $strold

    ";

    /*
    Danach wird die DB geupdated sprich die alte id bekommt ihre neue position und die id mit der neuen position der alten id, bekommt die alte position der alten id :
    Sprich bei down wäre
    id 5 hatte position 4 und wird zu position 5
    id 6 hatte position 5 und wird zu position 4
    einfach nur umgedreht halt
    */

    $sqlll = Mysql_Query("Update zeiten set strposi = '$strr' WHERE id = '$id'");
    $sqllll = Mysql_Query("Update zeiten set strposi = '$strold' WHERE id = '$strr_id'");

    // Danach wird nochmal Debug informationen ausgeben WAS er nun eigentlich gemacht hat , da hier genau das steht was in der mysql_query anweisung steht MUSS er genau das machen was er dann auch ausgibt.

    echo "Update zeiten set strposi = '$strr' WHERE id = '$id'
    ";
    echo "Update zeiten set strposi = '$strold' WHERE id = '$strr_id'";

    }


    Eigentlich is ja alles simple denkt man so, mein problem besteht nun darin das er sowas macht wenn folgenden link aufrufe:

    ?action=pos&id=5&to=down&zeit=sommer

    Beispiel:

    DB vor ausführen der Datei ( script )

    id tag von bis jahreszeit status strposi
    1 Montag bis Freitag 10:00 22:00 winter offen 1
    2 Samstag, Sonntag 10:00 14:00 winter offen 2
    3 Montag, Mittwoch 14:00 22:00 sommer offen 1
    4 Dienstag, Donnerstag 14:00 22:00 sommer offen 2
    5 Freitag 10:00 21:00 sommer offen 3
    6 Samstag 10:00 14:00 sommer offen 4
    7 Sonntag 00:00 00:00 sommer geschlossen 5

    Script ausgabe durch echo ( Debug )

    String Move ID: 5 ( Freitag ) war 3 -> wird zu: 4
    String Move To: down
    String Move ID: 6 ( Samstag ) war 4 -> wird zu 3
    Update zeiten set strposi = '4' WHERE id = '5'
    Update zeiten set strposi = '3' WHERE id = '6'

    DB NACH ausführen des Scriptes

    id tag von bis jahreszeit status strposi
    1 Montag bis Freitag 10:00 22:00 winter offen 1
    2 Samstag, Sonntag 10:00 14:00 winter offen 2
    3 Montag, Mittwoch 14:00 22:00 sommer offen 1
    4 Dienstag, Donnerstag 14:00 22:00 sommer offen 2
    5 Freitag 10:00 21:00 sommer offen 5
    6 Samstag 10:00 14:00 sommer offen 3
    7 Sonntag 00:00 00:00 sommer geschlossen 4

    geändert wurden also :

    ID von strposi zu strposi
    5 3 5
    6 4 3
    7 5 4

    Er hat 3 Datensätze geändert OBWOHL ID überall eindeutig ist und er beim sql-update befehl nur die ID als abfrage punkt bekommt womit er nur die Möglichkeit hat immer nur 1 Datensatz pro Query zu ändern.

    Also in meinem Falle nur 2 Datensätze, ABER er macht3 oOoOoO

    Sorry aber hier hört meine Logik auf

    hoffe auf antwort.
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Kaiser(in)
    Registriert seit
    03.06.2004
    Beiträge
    2.557
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    glaubst du irgendjemand liest sich das durch? ich würd mich mal aufs wesentliche bschränken...

  3. #3
    Azubi(ne)
    Registriert seit
    18.08.2005
    Beiträge
    86
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    ja da muss ich rocco recht geben, is zwar schön und gut dass du das so großartig umschreibst aber es ist ned wirklich leicht zu verstehen...
    ausserdem gewöhn dir an einrückungen zu machen dann wäre das alles auch viel einfacher zu lesen.

  4. #4
    Forum Guru
    Registriert seit
    28.12.2004
    Ort
    Ringgenberg(bei Interlaken) / Schweiz
    Beiträge
    4.787
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    und verwendeu umbedingt die [*code] Tags

  5. #5
    PrDatur
    Gast

    Standard

    Ok dann halt bissl kleiner :P

    Also ich verzweifle gerade

    Ich will mit einem Script den text an eine andere stelle setzen , nach oben und nach unten.

    Folgende Tabelle in der Mysql Datenbank

    ( id 1 = strposi 1 )
    ( id 2 = strposi 2 )
    ( id 3 = strposi 1 )
    ( id 4 = strposi 2 )
    ( id 5 = strposi 3 )
    ( id 6 = strposi 4 )
    ( id 7 = strposi 5 )



    So nun zu meinem "update" code


    [php:1:0d038cba6a]
    <?
    if($action == "pos"){
    $strr = ""; unset($strr);
    $strr_id = ""; unset($strr_id);
    $strold = ""; unset($strold);
    $sql = ""; unset($sql);
    $sqll = ""; unset($sqll);
    $sqlll = ""; unset($sqlll);
    $sqllll = ""; unset($sqllll);
    $get = ""; unset($get);
    $gett = ""; unset($gett);

    $sql = Mysql_query("SELECT * FROM zeiten WHERE id = '$id'");
    while($get = Mysql_fetch_object($sql)){
    $strold = $get->strposi;
    $strold_name = $get->tag;
    $str_old = $get->strposi;
    }

    if($to == "up"){$strr = $strold - 1;}else if($to == "down"){$strr = $strold + 1;}

    $sqll = Mysql_query("SELECT * FROM zeiten WHERE jahreszeit = '$zeit' AND strposi = '$strr'");
    while($gett = mysql_fetch_object($sqll)){
    $strr_id = $gett->id;
    $strr_name = $gett->tag;
    $strr_old = $gett->strposi;
    }

    echo "
    String Move ID: $id ( $strold_name ) war $str_old -> wird zu: $strr

    String Move To: $to

    String Move ID: $strr_id ( $strr_name ) war $strr_old -> wird zu $strold

    ";

    $sqlll = Mysql_Query("Update zeiten set strposi = '$strr' WHERE id = '$id'");
    $sqllll = Mysql_Query("Update zeiten set strposi = '$strold' WHERE id = '$strr_id'");

    echo "Update zeiten set strposi = '$strr' WHERE id = '$id'
    ";
    echo "Update zeiten set strposi = '$strold' WHERE id = '$strr_id'";

    }
    ?>
    [/php:1:0d038cba6a]

    Eigentlich is ja alles simple denkt man so, mein problem besteht nun darin das er sowas macht wenn folgenden link aufrufe:

    ?action=pos&id=5&to=down&zeit=sommer

    Beispiel:

    DB vor ausführen der Datei ( script )

    ( id 1 = strposi 1 )
    ( id 2 = strposi 2 )
    ( id 3 = strposi 1 )
    ( id 4 = strposi 2 )
    ( id 5 = strposi 3 )
    ( id 6 = strposi 4 )
    ( id 7 = strposi 5 )

    Script ausgabe durch echo ( Debug )

    String Move ID: 5 ( Freitag ) war 3 -> wird zu: 4
    String Move To: down
    String Move ID: 6 ( Samstag ) war 4 -> wird zu 3
    Update zeiten set strposi = '4' WHERE id = '5'
    Update zeiten set strposi = '3' WHERE id = '6'

    DB NACH ausführen des Scriptes

    ( id 1 = strposi 1 )
    ( id 2 = strposi 2 )
    ( id 3 = strposi 1 )
    ( id 4 = strposi 2 )
    ( id 5 = strposi 5 )
    ( id 6 = strposi 3 )
    ( id 7 = strposi 4 )

    geändert wurden also :

    ID--------von strposi------zu strposi
    5---------3----------------5
    6---------4----------------3
    7---------5----------------4

    Er hat 3 Datensätze geändert OBWOHL ID überall eindeutig ist und er beim sql-update befehl nur die ID als abfrage punkt bekommt womit er nur die Möglichkeit hat immer nur 1 Datensatz pro Query zu ändern.

    Also in meinem Falle nur 2 Datensätze, ABER er macht3 oOoOoO

    Sorry aber hier hört meine Logik auf

    hoffe auf antwort.

  6. #6
    Forum Guru
    Registriert seit
    28.12.2004
    Ort
    Ringgenberg(bei Interlaken) / Schweiz
    Beiträge
    4.787
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    also erstens, ist dei nsystem müll,

    ich würde es so handhaben, das du dir eine Datensatz id hälts und eine positions ID.

    dann halt ein html js gemischh zum sortieren, wie es lustig is,

    dann halt einfach für die ein update für jede Datensatz ID, wo du die posi ID änderst.

    dann beim slect haltt ORDER BY posi_ID ASC und gut ist.

    alles so verstanden.

    Wenn dass nicht gefält, erkläre ich dir noch eine wesentlich schlechtere Methode, die deienr sehr ähnlich kommt.

  7. #7
    PrDatur
    Gast

    Standard

    Also du meinst jetzt quasi mit Javascript / html alles so zu sortieren wie ich es brauche und später dann wenn ich auf "speichern" klick jeden Datensatz mit seiner position abspeichern ?

  8. #8
    Forum Guru
    Registriert seit
    28.12.2004
    Ort
    Ringgenberg(bei Interlaken) / Schweiz
    Beiträge
    4.787
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    jup, also z.b. machst du dir für jedes feld ein dropdown mit der anzahl der datensätze drinn und dann gibst ihm den namen posi[$_Datensatz_id]

    dann kannst du:

    foreach($_REQUEST['posi'] AS $key=>$val)
    {
    mysql_query("UPDATE XYZ SET `pos_id`='".$val."' WHERe `id`='".$key."';");
    }

  9. #9
    PrDatur
    Gast

    Standard

    Hmm.. daran hab ich noch garnicht gedacht,aber da kommt dann ein neues problem auf mich zu

    und zwar für mich persöhnlich wäre das ne gute lösung, da ich aber die homepage für meinen Kunden baue, muss es für ihn komfortabel sein.

    Sprich ich hab zwei bild buttons.
    Einmal pfeil nach oben, einmal pfeil nach unten für jedes element.

    Klicke ich auf "nach oben" soltle der datensatz direkt nach oben springen und der, der oben war, nach unten springen .

    da is das mit dem dropdown doch eher "schwierig" zu handhaben als fitness zenter betreiber der keine ahnung von pc's hat

    hast vlt dafür ne lösung?

    und vlt schaust dir nochmal an was ich gemacht hab und vlt findest ja auch nen fehler wieso er 3 datensätze speichert an statt 2

  10. #10
    Forum Guru
    Registriert seit
    28.12.2004
    Ort
    Ringgenberg(bei Interlaken) / Schweiz
    Beiträge
    4.787
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Hmm ja, hier der Vorschlag: ist zwar zimlich unsauber aber du wirst das schon verstehen

    Code:
    function buttom nach unten&#58; &#40; $id &#41; ist die id Datensatz id der entitie die zu verschieben ist
    
    list&#40;$pos_id&#41;=mysql_fetch_row&#40;mysql_query&#40;"SELECT pos FROM XYZ WHERE `id`='".$id."'; "&#41;&#41;;
    
    $austausch=mysql_fetch_assoc&#40;mysql_query&#40;"SELECT pos, id FROM XYZ WHERE `pos`='".&#40;$pos_id+1&#41;."'; "&#41;&#41;;
    
    mysql_query&#40;"UPDATE XYL SET `pos`='".$pos_id."' WHERE `id`='".$austausch&#91;'id'&#93;."'; "&#41;;
    mysql_query&#40;"UPDATE XYL SET `pos`='".$austausch&#91;'pos'&#93;."' WHERE `id`='".$id."'; "&#41;;
    und für den nach oben buttom einfach aus dem $pos_id+1 ein $pos_id-1 machen

Ähnliche Themen

  1. MySQL Update mit Options-Menü
    Von Unregistriert im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 1
    Letzter Beitrag: 15.08.2008, 14:58
  2. mysql und php insert/update
    Von synaptic im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 13
    Letzter Beitrag: 16.07.2008, 13:13
  3. komplett neu
    Von Annika im Forum Eure Homepages und Foren - Vorstellung und Bewertungen
    Antworten: 24
    Letzter Beitrag: 20.06.2007, 14:14
  4. Komplett neuling
    Von WVO_OyJ4k im Forum HTML & CSS Forum
    Antworten: 2
    Letzter Beitrag: 14.02.2007, 09:54
  5. Mysql Spalte durchlaufen lassen mit aktion und update
    Von ::RMB:: im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 2
    Letzter Beitrag: 04.04.2006, 20:11

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •