Daten aus einer Tabelle ändern

CreativPur

Erfahrenes Mitglied
Hi,

ich habe eine Tabelle mit verschiedenen Einträgen..
HTML:
<form name='form' id="form_aendern" method='post' action='#'>
<h1>Unsere Events ändern oder löschen</h1>
<table class="table table-hover" width="100%" border="0" style="text-align:left;">
        <thead>
                <tr style="color:blue;">
                        <th width="10">ID</th>
                        <th>Datum:</th>
                        <th>Bild-Datei:</th>
                        <th>Label:</th>
                        <th>Text:</th>
                        <th>Link:</th>
                        <th align="right" style="text-align:right;">
                            <a href="javascript:void(0)" onclick="top.window.location.reload(true)" target="_self">
                            <button type="submit" name="del_items" class="btn btn-default btn-xs">
                            <span class="glyphicon glyphicon-trash" style="padding:3px 3px 3px 3px; color:red;"></span>
                            </button>
                            </a>
                        </th>
                        <th align="right" style="text-align:right;">Update</th> 
                 </tr>
        </thead> <? foreach($userdata as $key => $datas) : ?> 
        <tbody>
       
                <td width="10" style="padding:10px"><strong><input name="id" type="text" value="<?=$datas["id"]?>" /></strong></td>
                <td style="padding:10px"><input name="datum" type="text" value="<?=$datas["datum"]?>" /></td>
                <td style="padding:10px"><input name="bild" type="text" value="<?=$datas["bild"]?>" /></td>
                <td style="padding:10px"><input name="label" type="text" value="<?=$datas["label"]?>" /></td>
                <td style="padding:10px"><textarea name="text" type="text"><?=$datas["text"]?></textarea></td>
                <td style="padding:10px"><input name="links" type="text" value="<?=$datas["links"]?>" /></td>
                <td align="center"><input style="margin-top:1px;" type="checkbox" name="items[<?=$key?>]" value="<?=$key?>" /></td>
                <td align="right"><button type='submit' id='aendern' name='aendern' class="btn btn-default btn-xs"><span class="glyphicon glyphicon-refresh" style="color:green;"></span></button>&nbsp;&nbsp;</td>
        </tbody><? endforeach ?>  
</table>

</form>

Diese möchte ich gern ändern, bzw. auch löschen können..
Das löschen der einzelnen Zeilen funktioniert bereits..
PHP:
<?php
if(isset($_POST["del_items"]) and count($_POST["items"])) {
                         $del_keys = implode(",",$_POST["items"]);
                         $sql = "DELETE FROM Events WHERE id IN (".$del_keys.")";
                         $res = mysql_query($sql,$conn);
                        }
                       
                       
    $update = "UPDATE Events SET datum = '{$_POST['datum']}', bild = '{$_POST['bild']}', label = '{$_POST['label']}', text = '{$_POST['text']}', links = '{$_POST['links']}' WHERE '{$_POST['id']}'"; 
    echo $update."<br>";
    $updaten = mysql_query($update) or die(mysql_error());
               
                       
$result=$sql = "select date_format( datum, '%d.%m.%Y' ) AS datum, id, bild, label, text, links FROM Events";
                        $res = mysql_query($sql,$conn);
                        if (mysql_num_rows($res)) {
                         while ($row = mysql_fetch_assoc($res)) {
                          $userdata[$row["id"]] = array("id" => $row["id"], "datum" => $row["datum"], "bild" => $row["bild"], "label" => $row["label"], "text" => $row["text"], "links" => $row["links"]);
                         }
                        }
$data=mysql_fetch_assoc($result);

?>

Wenn ich aber etwas ändern möchte, wird nur der letzte Datensatz berücksichtigt..
Wo liegt da der Fehler ?

ps: zum Schluss schließe ich alles..
PHP:
<?php
$db->Close();
?>
 
Finde die 10 Unterschiede

Code:
WHERE id IN (".$del_keys.")"
WHERE '{$_POST['id']}'"
Beim zweiten solltest du nicht nur einfach eine ID in den Where schreiben sondern auch dem SQL sagen, dass es die ID ist.
Zudem ist eine ID normalerweise eine Zahl und kein String. Also weg mit den '

Siehe auch http://wiki.yaslaw.info/doku.php/php/tutorials/debugmysqliqueries

und zu guter letzt. Es ist erstaunlich wie schnell dass sich Unwahrheiten im Netz verbreiten und wie langsam wirklich wichtige Dinge,
mysql_x ist seit ewigkeiten veraltet. Neue PHP-Versionen kennen den Befehl endlich nicht mehr.
Also weg mit mysql_query

selbst auf der PHP-Home-Page (http://www.php.net/mysql_query) steht gross in Bunt
Warnung
Diese Erweiterung ist seit PHP 5.5.0 als veraltet markiert und wurde in PHP 7.0.0 entfernt werden. Verwenden Sie stattdessen die Erweiterungen MySQLi oder PDO_MySQL. Weitere Informationen finden Sie im Ratgeber MySQL: Auswahl einer API und den zugehörigen FAQ. Alternativen zu dieser Funktion umfassen:

 
Jetzt habe ich versucht, alles in Mysqli umzuschreiben..
Resultat:
Im Update Zeile 10 ein Fehler, den ich nicht finde und die Funktionen Datensätze löschen und ändern funktionieren immer noch nicht...

Aber Zumindest wird die Tabelle und die Daten schon mal ordentlich ausgegeben... lol

PHP:
<?php
include("test_db.php");

if(isset($_POST["del_items"]) and count($_POST["items"])) {
$del_keys = implode(",",$_POST["items"]);
$sql = $mysqli -> real_escape_string('DELETE FROM Events WHERE id IN ("$del_keys") ');
$res = mysql_query($sql,$conn);
}

$sql = $mysqli -> real_escape_string('UPDATE Events SET datum = '{$_POST['datum']}', bild = '{$_POST['bild']}', label = '{$_POST['label']}', text = '{$_POST['text']}', links = '{$_POST['links']}' ');
$updaten = $mysqli($update) or die(mysql_error());
  

// Abfragen
$sql = $mysqli -> real_escape_string('SELECT datum, id, bild, label, text, links FROM Events');

if($result = $mysqli -> query($sql)) {
?>

<div class="container" style="margin-top:50px;">

        <h1>Unsere Events ändern / löschen</h1>
<form name='form' id="form_aendern" method='post' action='#'>      
        <?php  
            echo "<table class='table table-hover'>
                        <thead>
                            <tr style='color:blue;'>
                                <th>ID:</th>
                                <th>Datum:</th>
                                <th>Bild-Datei:</th>
                                <th>Label:</th>
                                <th>Text:</th>
                                <th>Link:</th>
                                <th>&nbsp;</th>
                                <th>ändern</th>
                                <th>
                                        <a href='javascript:void(0)' onclick='top.window.location.reload(true)' target='_self'>
                                        <button type='submit' name='del_items' class='btn btn-default btn-xs'>
                                        <span class='glyphicon glyphicon-trash' style='padding:3px 3px 3px 3px; color:red;'></span>
                                        </button>
                                        </a>
                                </th>                                        
                            </tr>
                        </thead>";
            while($row=$result->fetch_array(MYSQLI_ASSOC)) {
                echo
                        "<tbody>
                                <tr>
                                    <td>".$row['id']. "</td>
                                    <td><input class='form-control' name='datum' type='text' value='".$row['datum']. "' /></td>
                                    <td><input class='form-control' name='bild' type='text' value='".$row['bild']. "' /></td>
                                    <td><input class='form-control' name='label' type='text' value='".$row['label']. "' /></td>
                                    <td><textarea class='form-control' name='text' type='text'>".$row['text']. "</textarea></td>
                                    <td><input class='form-control' name='text' type='text' value='".$row['links']. "' /></td>
                                    <td>&nbsp;</td>
                                    <td align='center'><button type='submit' id='aendern' name='aendern' class='btn btn-default btn-xs'><span class='glyphicon glyphicon-refresh' style='color:green;'></span></button>
                                    </td>
                                    <td align='center'><input style='margin-top:1px;' type='checkbox' name='items[<?=$key?>]' value='<?=$key?>' /></td>
                                  
                                </tr>
                        </tbody>";
            }
            echo "</table>";
    }

else {
    echo 'Fehler ('.$mysqli -> sqlstate.'): '.$mysqli -> error;
}

?>
      
</form>      
      
        <hr />
        <a href="test_ausgabe.php" target="_self">
        <button type="button" class="btn btn-info btn-xs">Neue Events einfügen</button>
        </a>

</div>

<?php
$mysqli -> close();
?>
 
  • Du hast noch immer einige mysql_ - Funktionen drin
  • Die Variable $mysqli wird nirgends angelegt
  • Es gibt keinen Verbindungsaufbau etc.
  • Eine ganze SQL-Abfrage escapen macht überhaupt keinen Sinn
  • Prepared Statements
  • $mysqli($update) ?? Auch bei anderen Funktionen besser nochmal prüfen, ob die übergebenen Parameter so wie erwartet sind.
 
Zurück