Datensätze bearbeiten bzw.löschen mit PHP/MySQL

Alles, was PHP betrifft, kann hier besprochen werden.

Datensätze bearbeiten bzw.löschen mit PHP/MySQL

Postby hilfe » 04. June 2005 16:50

Hallo,

hier habe ich ein Script das mir die Daten aus der DB anzeigt. Nun möchte ich diese Datensätze einzeln, bearbeiten und löschen können. Das mit dem löschen hat schon funktioniert. Alle Einträge in der Tabelle wurden gelöscht. Das war nicht im Sinne des Erfinders. Die Sache mit REPLACE INTO zum bearbeiten geht überhaupt nicht. Hier mein Tabellen-Killer Sript. Was muß ich machen um einzelne Datensätze löschen oder bearbeiten zu können.
Code: Select all
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Veranstaltungstermine</title>
<link rel="stylesheet" type="text/css" href="/sbo/css/blau.css" />
</head>

<body class="body">

<?php
$anzeigen = 10;

if (isset($_GET['vor']) && isset($_GET['limit'])) {
   $start = $_GET['limit'] + $anzeigen;
}
if (isset($_GET['back']) && isset($_GET['limit'])) {
   $start = $_GET['limit'] - $anzeigen;
}

if (!isset($start) || (0 > $start)) {
   $start = 0;
}

//Auslesen der Datenbankeinträge
require('connect.php');

$sql = "
SELECT SQL_CALC_FOUND_ROWS `id`, `datum`, `kurs`, `beschreibung`, `referent`, `preis`, `minteiln`
FROM `$tabellenname`
ORDER BY `id` ASC
LIMIT $start, $anzeigen
";

if (!$result = mysql_query($sql, $link)) {
   echo '
   <p>Fehler in der Abfrage: '.mysql_error().'</p>
   <p><a href="zeigen.php?section=zeigen.php">zurück zur Liste</a></p>
   </body>
   </html>';
   exit;
}

for ($i = 0; mysql_num_rows($result) > $i; $i++) {
   $ergebnis[$i] = mysql_fetch_assoc($result);
}
 
$max = mysql_result(mysql_query("SELECT FOUND_ROWS()", $link), 0);

?>
 <?php
//Einen Datensatz löschen
   $sql = " DELETE  FROM $tabellenname WHERE ID=$id";
   $ergebnis= mysql_query($sql, $link);
//Einen Datensatz ändern
   $sql="REPLACE INTO $tabellenname WHERE `datum`, `kurs`, `beschreibung`, `referent`, `preis`, `minteiln`
   $ergebnis=mysql_query($sql, $link);
 ?>

<?php
//Ausgeben der Einträge
for ($i = 0; count($ergebnis) > $i; $i++) {
   echo '
<br>
   <table class="klein" border="0" width="800" align="center">
   <tr>
   <td width=110px>'.$ergebnis[$i]['datum'].'</td>
   <td width=150px><strong>'.$ergebnis[$i]['kurs'].'</strong></td>
   <td width=300px>'.$ergebnis[$i]['beschreibung'].'</td>
    <td width80px>'.$ergebnis[$i]['referent'].'</td>
   <td width=50px><strong>'.$ergebnis[$i]['preis'].',- €</strong></td>
   <td width=20px>'.$ergebnis[$i]['minteiln'].'</td>
   <td><a href='.$PHP_SELF. "?ID=.$ergebnis[$i][$id].'>Löschen</a></td>
   <td><a href='.$PHP_SELF. "?ID=.$ergebnis[$i][$id].'>Ändern</a></td>
   </tr>
   </table>
  \n";
}

echo '<br><table class="klein" border="0" width="800" align="center"><tr><td align="left">';
if ($start >= $anzeigen) {
   echo '<a href="zeigen.php?section=zeigen&limit='.$start.'&amp;back=1">Zurück</a>';
}
echo '</td><td align="right">';

if (($start + $anzeigen) < $max) {
   echo '<a href="zeigen.php?section=zeigen&limit='.$start.'&amp;vor=1">Weiter</a>';
}
echo '</td></tr></table>'."\n";
?>

</body>
</html>



Ich möchte die Datensätze in einer Tabelle auflisten (je 10 pro Seite) und die Links zum löschen oder bearbeiten für jeden DS am Ende der Tabellenzeile haben. Wie muß ich vorgehen?
hilfe
 
Posts: 27
Joined: 16. July 2004 19:44


Postby hilfe » 05. June 2005 12:21

Wie baue ich den einen Link der beim Draufklicken genau einen Datensatz löscht bzw. ein bearbeiten des DS zuläßt?

[code
]<?
$loeschen = "DELETE FROM links WHERE id = '3'";
?>
[/code]
Code: Select all
 <?
  $loesch = mysql_query($loeschen);
  ?>


Wenn das so im Script steht wird ein DS gelöscht nehme ich an. Ich will aber ja nicht einfach nur ständig löschen. Irgendwie muß ich das ja per Mausklick kontrollieren können??
hilfe
 
Posts: 27
Joined: 16. July 2004 19:44

Postby hilfe » 05. June 2005 14:29

So jetz habe ich die Schnauze voll. Dank adi99 habe ich jede Menge Lesestoff bekommen. Habe es dann so versucht:
Code: Select all
<?php
/* Verbindung aufbauen, auswählen einer Datenbank */
require('connect.php');

/* Datensätze in einer Tabelle ausgeben */
$query = "SELECT  `datum`, `kurs`, `beschreibung`, `referent`, `preis`, `minteiln`  FROM $tabellenname ORDER BY id ASC";
$result = mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error());

/* Einen Datensatz löschen */
$query = "DELETE id, datum, kurs, beschreibung, referent, preis, minteiln   FROM $tabellenname WHERE ID=$id";
$result = mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error());

/* Einen Datensatz ändern (id ist ein auto_increment-Feld in der DB)*/
$query = "REPLACE INTO  datum, kurs, beschreibung, referent, preis, minteiln   FROM $tabellenname WHERE ID=$id";
$result = mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error())

/* Einen neuen Datensatz hinzufügen (id ist ein auto_increment-Feld in der DB) */
$query = "INSERT INTO  datum, kurs, beschreibung, referent, preis, minteiln   FROM $tabellenname WHERE ID=$id";
$result = mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error())

/* Ausgabe der Ergebnisse in HTML(soll, wenn es funktioniert, per CSS formatiert und an mein Layout angepasst werden) */
echo "<table width=800 align=center>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
   echo "\t<tr>\n";
   foreach ($line as $col_value) {
       echo "\t\t<td valign=top>$col_value</td><td><a href='.PHP_SELF.'?ID=.$result[ID][$id].>Löschen</a></td>
      <td><a href='.PHP_SELF.'?ID=.$result[ID][$id].>Editieren</a></td><td><a href='.PHP_SELF.'?ID=.$result[ID][$id].>DS hinzufügen</a></td>\n";
   }
   echo "\t</tr>\n";
}
echo "</table>\n";

/* Freigeben des Resultsets */
mysql_free_result($result);

/* schliessen der Verbinung */
mysql_close($link);
?>


Mein Ziel ist, glaube ich, ziemlich klar. Ich brauche ein Script mit dem es möglich ist Datensätze anzuzeigen,zu editieren, zu löschen und neue DS hinzuzufügen. Da es mir nicht gelingt ein solches selbst zu schreiben und ich mir alle möglichen Quellen für Scripte angesehen habe aber keine davon so arbeitet wie ich das hier brauche meine Frage :
Wer kann mir so ein Script schreiben und was kostet das? Das Script sollte eine Tabelle mit den entsprechenden Links erzeugen und per CSS an mein Layout anpassbar sein. Es müßen Leute damit arbeiten können die noch weniger Ahnung haben als ich selbst!
In meinen drei Büchern über PHP und MySQL steht überall der Vorgang beschrieben das mit dem SQL-Befehl DELETE bzw. UPDATE Datensätze gelöscht oder geändert werden können. Auch in div. Tuts im Inet steht das drin. Nirgendwo ist beschrieben wie ich das mit einem Link verknüpfe der diese Funktion dann auch ausführt. Ich habe ein Script von der PHP Resource Seite runtergeladen (ATM automatic Table Maker) das Funktioniert beim löschen und neue DS hinzufügen. Editieren geht leider nicht. Auch dieses Script hier mal zu ansehen:
Code: Select all
<html>
<head>
<title>termine</title>
</head>
<body>
<?php
$db = mysql_connect ("localhost","root","");
mysql_select_db ("sbo");
if ($submit == "action-add") {
    echo "ACTION-ADD";
    $sql = "insert into termine values ( $id , '".stripslashes($datum)."' , '".stripslashes($kurs)."' , '".stripslashes($beschreibung)."' , '".stripslashes($referent)."' , '".stripslashes($preis)."' , '".stripslashes($minteiln)."' )";
    $erg = mysql_query ($sql);
    echo mysql_error($db).$sql;
}
if ($submit == "delete") {
    echo "DELETE";
    $sql = "delete from termine where id='$what'";
    $erg = mysql_query ($sql);
    echo mysql_error($db).$sql;
}
if ($submit == "edit") {
?><form action="<?php echo $PHPSELF; ?>">
<?php
    echo "EDIT";
    $sql = "select * from termine where id=$what";
    $erg = mysql_query ($sql);
    echo mysql_error ($db).$sql;
    echo "<table><tr>";
?>
<td>id</td><td>datum</td><td>kurs</td><td>beschreibung</td><td>referent</td><td>preis</td><td>minteiln</td></tr>
<?php
    while ($row = mysql_fetch_row ($erg)) {
        echo "<tr>";
        for ($i = 0; $i < 7; $i++ ) {
            echo "<td><input type=text value=\"".$row[$i]."\"></td>";
        }
        echo "</tr>";
    }
    echo "</table>";
?><input type="submit" name="submit" value="edit2"></form><?php
}
if ($submit == "edit2") {
   echo "EDIT2";}
?>
<?php
$sql = "select * from termine";
$erg = mysql_query ($sql);
echo mysql_error ($db).$sql;
echo "<table><tr>"
?>
<td>id</td><td>datum</td><td>kurs</td><td>beschreibung</td><td>referent</td><td>preis</td><td>minteiln</td><td>&nbsp;</td></tr>
<?php
while ($row = mysql_fetch_row ($erg)) {
    echo "<tr>";
    for ($i = 0; $i < 7; $i++ ) {
        echo "<td>".$row[$i]."</td>";
    }
    echo "<td><a href=\"termine.php?submit=delete&what=".$row[0]."\">L&ouml;schen</a> - <a href=\"termine.php?submit=edit&what=".$row[0]."\">Editieren</a></td>";
    echo "</tr>";
}
echo "</table>"
?>
<h2>termine</h2><form action="termine.php" method="post">
<table>
<tr><td>id:</td><td><input name="id" type="text" value="0">(int)</td></tr>
<tr><td>datum:</td><td><input name="datum" type="text" value="0">(string)</td></tr>
<tr><td>kurs:</td><td><input name="kurs" type="text" value="0">(string)</td></tr>
<tr><td>beschreibung:</td><td><input name="beschreibung" type="text" value="0">(blob)</td></tr>
<tr><td>referent:</td><td><input name="referent" type="text" value="0">(string)</td></tr>
<tr><td>preis:</td><td><input name="preis" type="text" value="0">(string)</td></tr>
<tr><td>minteiln:</td><td><input name="minteiln" type="text" value="0">(string)</td></tr>
<tr><td colspan=2><input type="hidden" name="action" value="add"><input type="submit" name="submit" value="action-add"></td></tr>
</table></form>

</body></html>


Da ich selbst nicht programieren kann ist mir auch nicht möglich den Fehler in dem oben gezeigten Script zu finden. [Edit2] anklicken zeigt keine Wirkung. Bin völlig entnervt. Aber trotzdem Danke für die Hilfe die mir bisher von Euch gegeben wurde. MFG Frank
hilfe
 
Posts: 27
Joined: 16. July 2004 19:44

Postby TTP » 05. June 2005 17:51

Daten hinzufügen:

Code: Select all
<?
  $eintrag = "INSERT INTO links (url, urlname, name,
  banner, beschreibung) VALUES ('$url', '$hpname',
  '$name', '$banner','$beschreibung')";

  $eintragen = mysql_query($eintrag);
?>


Daten löschen:

Code: Select all
<?
  $loeschen = "DELETE FROM links WHERE id = '3'";
  $loesch = mysql_query($loeschen);
?>


Daten ändern:

Code: Select all
<?
  $aendern = "UPDATE links Set urlname = 'Schatten unter dem
  Baum' WHERE id = '4'";
  $update = mysql_query($aendern);
?>


Wieso benutzt du nicht PHPMYADMIN?
Place
ohne Apachefriends wär ich in meiner Entwicklung weiter zurück ;)
User avatar
TTP
 
Posts: 310
Joined: 30. August 2003 19:38
Location: Wolfsburg

Postby hilfe » 05. June 2005 19:22

Hallo TTP.

meiner Einer benutzt PHPmyAdmin. Hätte aber gerne eine noch simplere Oberfläche. Wirklich nur drei Buttons(Links) und eine Anzeige der Datensätze in einer Tabelle. Wenn die Leuts für die ich die Seite zu machen versuche mit PHPAdmin loslegen könnten die ganze DB`s und Tabellen vernichten. Das muß unbedingt ausgeschlossen sein. Will sagen :" Du User darfst Datensätze ansehen,Du darfst neue DS hinzufügen, Du darfst DS ändern und löschen. Du darfst nicht die Datenbank versemmeln oder Tabellen löschen."
Mein Bestreben ist es eine Bedienoberfläch zu schaffen welche unerlaubte Zugriffe weitestgehend verhindert und so einfach wie nur möglich zu bedienen ist. Dein Codebeispiel :
Code: Select all
<?
  $loeschen = "DELETE FROM links WHERE id = '3'";
  $loesch = mysql_query($loeschen);
?>

Das verdeutlicht genau mein Prob. Wie muß das ausehen wenn ich einen beliebigen DS aus einer Tab löschen will und nicht nur ID3. Wie muß ich den Link<Löschen> gestalten das auch wirklich nur ID3 oder ID7 oder...usw gelöscht bzw bearbeitet werden?
Noch gebe ich es nicht auf.
hilfe
 
Posts: 27
Joined: 16. July 2004 19:44

Postby TTP » 05. June 2005 21:08

Du kannst es ja so machen, dass du z.B. die datei hast:

löschen.php:
Code: Select all
<?
  $id = $_GET[id];
  $loeschen = "DELETE FROM links WHERE id = '$id'";
  $loesch = mysql_query($loeschen);
?>

Wenn du dann "löschen.php?id=4" aufrufst im Browser, dann löscht du den datensatz 4, hängst du ne 7 dran, dann halt datensatz 7 usw.
Place
ohne Apachefriends wär ich in meiner Entwicklung weiter zurück ;)
User avatar
TTP
 
Posts: 310
Joined: 30. August 2003 19:38
Location: Wolfsburg

Postby Stefan » 06. June 2005 20:54

Servus,

Du solltest bei diesem Vorhaben unbedingt mal nach dem Stichwort *SQL Injection* ausschau halten.

ciao, Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby TTP » 06. June 2005 20:59

Moin Stefan ;)
Place
ohne Apachefriends wär ich in meiner Entwicklung weiter zurück ;)
User avatar
TTP
 
Posts: 310
Joined: 30. August 2003 19:38
Location: Wolfsburg

Postby hilfe » 07. June 2005 21:34

Hallo TTP,

das mit der löschen.php funktioniert. Besten Dank. Wenn ich wie hier gezeigt einen Link einbaue wird erwartungsgemäß zur Seite löschen.php gewechselt. Der DS wird gelöscht. Soweit sogut.
Code: Select all
 <td>mind. '.$ergebnis[$i]['minteiln'].' Teilnehmer</td>
   <td><a href="loeschen.php?id='.$ergebnis[$i]['id'].'">DS löschen</a></td>
   </tr>
   </table>

Wie kann ich erreichen das ich auf der selben Seite bleibe, also meine Tabelle weiterhin angezeigt bleibt, nur ohne den gerade gelöschten Datensatz? Einen Link in die löschen.php einbauen der mich wieder zur Ausgangsseite zurückbringt ist wohl nicht die optimale Lösung. Geht das auch anders?
Bis dann
hilfe
 
Posts: 27
Joined: 16. July 2004 19:44


Return to PHP

Who is online

Users browsing this forum: No registered users and 12 guests