1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Php/mysql Where Id=$variable - Problem

Discussion in 'Web-Know-how für die Homepage' started by BoZ, Oct 19, 2006.

Thread Status:
Not open for further replies.
  1. BoZ

    BoZ ROM

    Hallo alle zusammen! :)

    Ich habe ein Problem:

    Ich habe auf einer Seite eine MySQL Tabelle aufgelistet, wo man die Daten herauslesen kann! Unten auf der Seite gibt es ein Feld, wo man die ID eingeben kann, welche bearbeitet werden soll. Diese Variable heißt "$aendern".

    Auf der nächsten Seite gelangt man auf ein Formular wo die Tabelleninhalt verändern kann. Nachdem den Inhalt eingegeben hat wir er mit...:

    Code:
    $query="UPDATE `allgemein` SET `rechnername` = '$Rechnername' WHERE `id` ='$aendern' LIMIT 1;";
    
    ...übergeben! In Betracht kommt nur der Part "WHERE `id` ='$aendern'"

    Wie schon gesagt ist meine Variable $aendern. Geb ich nun auf der ersten Seite meine ID (z.B.) 3 ein, die ich verändern will, so übergibt er sie (die 3) auch auf jeden Fall auf die zweite Seite! Das habe ich mit einem einfachen "echo '$aendern'" getestet! Wenn ich nun mein geändertes wegschicke, so leert er mir das Tabellenfeld! Eigentlich sollte er das Feld nun ändern!!!

    Sooooo! Wenn ich nun allerdings anstatt "WHERE `id` ='$aendern'" "WHERE `id` ='3'" eingebe, praktisch so:

    Code:
    $query="UPDATE `allgemein` SET `rechnername` = '$Rechnername' WHERE `id` ='3' LIMIT 1;";
    
    ...funktioniert alles so wie ich es will! Ich geb praktisch auf der zweiten Seite mein Rechnername ein, und er verändert es in Zeile 3, so wie ich es will...allerdings will ich es als variable machen.

    Ich hoffe, ich habe mein Problem klar genug rübergebracht und ihr könnt mir helfen!

    Danke schonmal im vorraus!

    Ich poste hier einmal die beiden Scripts:

    show.php

    Code:
    
    <?php
    require("mysqlconnection.inc.php");
    
    $sql = "SELECT * FROM allgemein";
    $allgemein_query = mysql_query($sql) or die("Anfrage nicht erfolgreich");
    
    ?>
    
    <table cellpadding="1" cellspacing="3" border="1">
    
    <tr>
    
    <td>ID</td>
    
    <td>Rechnername</td>
    
    <td>Hersteller</td>
    
    <td>Modelnummer</td>
    
    <td>Seriennummer</td>
    
    <td>Kaufdatum</td>
    
    <td>Patchstand Datum</td>
    
    <td>Standort</td>
    
    </tr>
    
    <?php
    
    while ($adr = mysql_fetch_array($allgemein_query)){
    
    ?>
    
    <tr>
    
    <td><?=$adr['id']?></td>
    
    <td><?=$adr['rechnername']?></td>
    
    <td><?=$adr['hersteller']?></td>
    
    <td><?=$adr['modelnummer']?></td>
    
    <td><?=$adr['seriennummer']?></td>
    
    <td><?=$adr['kaufdatum']?></td>
    
    <td><?=$adr['patchstand_satum']?></td>
    
    <td><?=$adr['standort']?></td>
    
    </tr>
    
    <?php
    }
    
    ?>
    
    </table>
    <br />
    <form enctype='multipart/form-data' action='aendern.php' method='post'>
    
    <b>ID:</b>
    <input type='text' name='aendern' size='2'>
    <input type='submit' value='bearbeiten'>
    </form>
    

    aendern.php

    Code:
    <html>
    <head>
    <title>Computerverzeichnis - Eingabe</title>
    </head>
    <body>
    <font face='arial' size=2>
    <br>
    
    <form enctype='multipart/form-data'>
    <table width='50%' border=0 cellpadding="5">
    <tr><td> Rechnername</td>
    <td>
    <input type=text name='Rechnername' size=50></td></tr>
    <tr><td> Hersteller</td>
    <td>
    <input type=text name='Hersteller' size=50></td></tr>
    <tr><td> Modelnummer</td>
    <td>
    <input type=text name='Modelnummer' size=50></td></tr>
    <tr><td> Seriennummer</td>
    <td>
    <input type=text name='Seriennummer' size=50></td></tr>
    <tr><td> Kaufdatum</td>
    <td>
    <input type=text name='Kaufdatum' size=50></td></tr>
    <tr><td> Patchstand Datum</td>
    <td>
    <input type=text name='PatchstandDatum' size=50></td></tr>
    <tr><td> Standort</td>
    <td>
    <input type=text name='Standort' size=50></td></tr>
    </table>
    <input type='submit' value='Ändern'> <input type=reset value='Alles leeren'></form>
    </body>
    </html>
    
    
    <?php
    require("mysqlconnection.inc.php");
    include("global.inc.php");
    
    $errors=0;
    $error="The following errors occured while processing your form input.<ul>";
    pt_register('POST','Rechnername');
    pt_register('POST','Hersteller');
    pt_register('POST','Modelnummer');
    pt_register('POST','Seriennummer');
    pt_register('POST','Kaufdatum');
    pt_register('POST','PatchstandDatum');
    pt_register('POST','Standort');
    echo "$aendern";
    $query="UPDATE `allgemein` SET `rechnername` = '$Rechnername' WHERE `id` = '$aendern' LIMIT 1;";
    mysql_query($query);
    ?>
    
    
    <!-- This is the content of the Thank you page, be careful while changing it -->
    
    <h2>Thank you!</h2>
    
    
    <table width=50%>
    <tr><td>Rechnername: </td><td> <?php echo $Rechnername; ?> </td></tr>
    <tr><td>Hersteller: </td><td> <?php echo $Hersteller; ?> </td></tr>
    <tr><td>Modelnummer: </td><td> <?php echo $Modelnummer; ?> </td></tr>
    <tr><td>Seriennummer: </td><td> <?php echo $Seriennummer; ?> </td></tr>
    <tr><td>Kaufdatum: </td><td> <?php echo $Kaufdatum; ?> </td></tr>
    <tr><td>Patchstand Datum: </td><td> <?php echo $PatchstandDatum; ?> </td></tr>
    <tr><td>Standort: </td><td> <?php echo $Standort; ?> </td></tr>
    </table>
    <!-- Do not change anything below this line -->
    <br>
    <a href="show.php">Show</a>
    
    Wenn ich...

    Code:
    `id` = '$aendern'
    in
    Code:
    `id` = $_POST['aendern']
    ...ändere, dann kommt eine Fehlermeldung.

    Code:
    Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /aendern.php on line 52
    Ändere ich
    Code:
    `id` = $_POST['aendern']
    in
    Code:
    `id` = $_POST[aendern]
    oder
    Code:
    `id` = '$_POST[aendern]'
    , ist das Ergebniss gleich wie vorher! Er bringt keine Fehlermeldung, aber er leert einfach das Feld anstatt er es bearbeitet!

    Bitte um Hilfe!

    Grüßle

    Boz
     
  2. kalweit

    kalweit Hüter der Glaskugel

    Du bist einfach ein Opfer des Zeichnenminimalismus, den einige Programmierer betreiben. Setze den String einfach traditionell zusammen und...

    Code:
    $query="UPDATE allgemein SET rechnername='".$Rechnername."' WHERE id='".$aendern."' LIMIT 1;";
    
    ...sollte es tun. Jetzt kannst du auch problemlos die Feldnamen der globalen Variablen mit ' angeben:

    Code:
    $query="UPDATE allgemein SET rechnername='".$_POST['Rechnername']."' WHERE id='".$_POST['aendern']."' LIMIT 1;";
    
     
  3. BoZ

    BoZ ROM

    Hallo!

    Vielen Dank für deine Antwort! Ich habe den gleichen Fehler weiterhin! Füge ich deinen Code ein (egal welchen, der beiden) leert er mir das Feld, anstatt es zu ändern.

    Code:
    $query="UPDATE allgemein SET rechnername='".$Rechnername."' WHERE id='".$aendern."' LIMIT 1;";
    Ersetzte ich bei diesem Code das ".$aendern." durch eine existierende ID (1,2,3,ect), ändert er das entsprechende Feld, wie ich es will! Bei deinem anderen Code, funktioniert das nicht, er bringt allerdings auch keinen Fehler!

    Danke nochmals! :)

    Grüßle

    BoZ
     
  4. kalweit

    kalweit Hüter der Glaskugel

    Na Moment: also der Datensatz existiert und es wird lediglich das Feld "rechnername" gelöscht. Löschen heißt dann "bearbeitet" mit einem leeren Wert $Rechnername. Im Forumlar in show.php exisiert aber kein Feld mit dem Namen. Wo kommt der Wert her, den du im Query verwendest?

    btw. welchen tieferen Sinn hat enctype='multipart/form-data' in deinen Formularen?
     
  5. BoZ

    BoZ ROM

    Mein Query kommt aus der aendern.php
    Code:
    <form enctype='multipart/form-data'>
    <table width='50%' border=0 cellpadding="5">
    <tr><td> Rechnername</td>
    <td>
    <input type=text name='Rechnername' size=50></td></tr>
    
    Die show.php ist jediglich da, um die Tabelle anzuzeigen und um unten in ID einzugeben, welche in einer Variable gespeichert wird und weitergegeben wird.

    Ich verstehe nicht, warum es nicht funktioniert! Ich gebe die Variable vorher mit einem echo aus und da zeigt er mir z.B. meine "2" an! Allerdings funktioniert es dann nicht in der Query (WHERE ID = ... ) Wenn ich allerdings anstatt der Variable direkt WHERE ID = "2" eingebe, funktioniert alles so wie ich es will!
     
  6. kalweit

    kalweit Hüter der Glaskugel

    Aha, also ein Täuschungsmanöver für den Helfenden :D - btw. mir ist zwar immer noch nicht klar, wie diese ID gespeichert wird - bei der Fehlerbehandlung (pt_register?) geht sie in jedem Fall verlustig. Mach mal ein echo $query; und schau dir die Ausgabe im Quelltext des Browsers an. Vielleicht ist da ein Zeilenumbruch o.ä. in $aendern drin, den du so nicht siehst.
     
  7. stefanniehaus

    stefanniehaus Halbes Megabyte

    Also moooooment mal ;)

    Ich denke du fängst in der show.php an, da man dort die ID eingeben muss. Diese ID landet dann in $aendern in der aendern.php, richtig ?
    Hier springt dein Script dann in den PHP-Bereich und löscht erstemal den Rechnernamen, da die Variable beim ersten Aufruf ja noch leer ist (du hast ja nur die ID mitgeschickt).
    Beim Klick auf den Button 'Ändern' werden dann die Daten an dieselbe aendern.php geschickt.
    Du hast jetzt alle deine Computerdaten vorliegen, jedoch ist nach dem Klick auf 'Ändern' deine ID weg, weil du diese Variable nicht im Formular mitschickst!... demnach ist beim 2. Aufruf $aendern='', sodass sich nichts ändern kann.

    Setzte in die aendern.php in den Formularbereich folgende Zeile:
    <input type=hidden name='aendern' value='<?php echo $aendern; ?>' size=50>

    dann wird die ID auch mitgeschleift!

    Gruß,
    Stefan
     
Thread Status:
Not open for further replies.

Share This Page