Hallo ihr, möchte in einer Datenbank neue User anlegen und über den Button löschen in der entstandenen Tabelle die Möglichkeit nutzen, auch wieder User zu löschen. Funktioniert leider nicht. Wollte das Ganze so gestalten, das alles mit Leerzeichen überschrieben wird. Findet jemand meinen Fehler? (PHP Version 4.3)
Danke pegmen
<html>
<head>
<title>Mini Datenbank</title>
</head>
<body>
Anlegen von Usern:
<form action=db.php" method="get">
<table>
<tr><td>Vorname:</td>
<td><input type="Text" name="vorname"></td></tr>
<tr><td>Nachname:</td>
<td><input type="Text" name="nachname"></td></tr>
<tr><td>Login:</td>
<td><input type="Text" name="login"></td></tr>
<tr><td>Passwort:</td>
<td><input type="Text" name="pass"></td></tr>
<tr><td>autom. ID:</td>
<td><input type="Text" name="id" value ="<?php echo time();?>"></td></tr>
<tr><td>Userlevel:</td>
<td><select name="userlevel">
<?php for($i=1; $i<21; $i++) { ?>
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
<?php } ?>
</select></td></tr>
<tr><td colspan="2">
<input type="Submit" name="submit" value="User Speichern"></td></tr>
</table>
</form>
<?php
/* Anlegen eines Datenbank-Arrays $csv_array zum auslesen der Einträge. */
function csv_write ( $csv_array, $fp ){
$zeile = implode(",",$csv_array)."\r\n";
fputs($fp,$zeile);
}
function read_csv($fp){
while ( !feof ( $fp ) ) {
$zeile = fgetcsv ( $fp, 4096 );
if ( count ( $zeile ) == 6 ) {
$csv_array[]= $zeile;
}
}
return $csv_array;
}
if ($HTTP_GET_VARS["submit"] == "User Speichern") {
$fpr = @fopen("db.txt","r");
if ( $fpr == true ) {
$inhalt = false;
while ( !feof ( $fpr ) ) {
$lieszeichen = fgetc ( $fpr );
if ( ( ord ( $lieszeichen ) != 0 ) && ( ord ( $lieszeichen ) != 10 ) && ( ord ( $lieszeichen ) != 13 ) &&
( ord ( $lieszeichen ) != 32 ) ) {
$inhalt = true;
break;
}
}
fclose ( $fpr );
}
if ( $inhalt == true ) {
$fp = fopen("miniDb.txt","a+");
if ($fp == true ) {
$allewerte = true;
$datensatz = array ( $HTTP_GET_VARS["vorname"],
$HTTP_GET_VARS["nachname"],
$HTTP_GET_VARS["login"],
$HTTP_GET_VARS["pass"],
$HTTP_GET_VARS["userlevel"],
$HTTP_GET_VARS["id"] );
foreach ( $datensatz as $val ){
if ( $val == "" ) {
echo ( "Bitte alle Werte ausfüllen");
$allewerte = false;
break;
}
}
if ( $allewerte == true ){
csv_write($datensatz,$fp);
}
fclose($fp);
}
}
if ( $inhalt == false ) {
$fp = fopen("miniDb.txt","w+");
if ($fp == true ) {
$allewerte = true;
$datensatz = array ( $HTTP_GET_VARS["vorname"],
$HTTP_GET_VARS["nachname"],
$HTTP_GET_VARS["login"],
$HTTP_GET_VARS["pass"],
$HTTP_GET_VARS["userlevel"],
$HTTP_GET_VARS["id"] );
foreach ( $datensatz as $val ) {
if ( $val == "" ) {
echo ( "Bitte alle Werte ausfüllen");
$allewerte = false;
break;
}
}
if ( $allewerte == true ){
csv_write($datensatz,$fp);
}
fclose($fp);
}
}
}
$fp = @fopen("miniDb.txt","r");
if ($fp == true) {
?>
Folgende User sind bereits vorhanden:
</p>
<form action="miniDB.php" method="get">
<table cellspacing="0" cellpadding="2" border="1" bordercolor="Black" width="75%">
<tr>
<td>Vorname</td>
<td>Nachname</td>
<td>Login</td>
<td>Passwort</td>
<td>Userlevel</td>
<td>Löschen</td>
</tr>
<?php
$zeile = read_csv($fp);
for ( $i = 0; $i < count ( $zeile ) ; $i++ ) {
echo "<tr>";
for ( $j = 0; $j < count ( $zeile[$i] ); $j++ ) {
if ( $j < count($zeile[$i]) -1 ) {
echo "<td>".$zeile[$i][$j]."</td>";
}else {
echo "<td>";
?>
<input type="checkbox" name="loesch[]" value="<?php echo $zeile[$i][$j];?>">
<?php
echo "</td>";
}
}
echo "</tr>";
}
?>
<tr>
<td colspan="7">
<input type="submit" name="submit" value="User loeschen"></td>
</tr>
</table>
</form>
<?php
fclose($fp);
}
if ( $HTTP_GET_VARS["submit"] == "User loeschen" ){
$fp = @fopen("miniDb.txt","r+");
if ( $fp == true ) {
$leer = " ";
$leerstring = " ";
$gelesen = 0;
$geloescht = 0;
$zeile = read_csv($fp);
for ( $i = 0; $i < count($zeile); $i++ ){
$gelesen += strlen(implode(",",$zeile[$i]));
for ( $j = 0; $j < count($zeile[$i]); $j++ ) {
if ( is_array ( $HTTP_GET_VARS["loesch"] ) ) {
foreach ( $HTTP_GET_VARS["loesch"] as $key => $value ){
if ( $zeile[$i][$j] == $value ){
$row = implode(",",$zeile[$i] );
$geloescht += strlen($row);
for ( $k = 0; $k < strlen($row); $k++ ){
$leer .= str_replace(substr($row,$k,1)," ",$row);
$leerstring .= substr($leer,strpos($leer," ",$k),1);
}
fseek ( $fp, $gelesen - strlen($row) );
/*Jetzt wird ab der gesetzen Zeigerposition $leerstring geschrieben und ein "\r\n" angehängt.
Das ist der Zeilenumbruch unter Windows. Leider stimmt danach das Ergebnis nicht mehr
*/
fputs($fp,$leerstring,strlen($leerstring));
fputs($fp,"\n");
fseek($fp, - strlen($leerstring)-2,SEEK_CUR);
}
}
}else{
echo "Bitte markieren Sie die Benutzer die Sie löschen wollen"."
";
$loeschnone = true;
break;
}
}
if ( $loeschnone == true ){
break;
}
}
}
@fclose($fp);
}
?>
</body>
</html>
Danke pegmen
<html>
<head>
<title>Mini Datenbank</title>
</head>
<body>
Anlegen von Usern:
<form action=db.php" method="get">
<table>
<tr><td>Vorname:</td>
<td><input type="Text" name="vorname"></td></tr>
<tr><td>Nachname:</td>
<td><input type="Text" name="nachname"></td></tr>
<tr><td>Login:</td>
<td><input type="Text" name="login"></td></tr>
<tr><td>Passwort:</td>
<td><input type="Text" name="pass"></td></tr>
<tr><td>autom. ID:</td>
<td><input type="Text" name="id" value ="<?php echo time();?>"></td></tr>
<tr><td>Userlevel:</td>
<td><select name="userlevel">
<?php for($i=1; $i<21; $i++) { ?>
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
<?php } ?>
</select></td></tr>
<tr><td colspan="2">
<input type="Submit" name="submit" value="User Speichern"></td></tr>
</table>
</form>
<?php
/* Anlegen eines Datenbank-Arrays $csv_array zum auslesen der Einträge. */
function csv_write ( $csv_array, $fp ){
$zeile = implode(",",$csv_array)."\r\n";
fputs($fp,$zeile);
}
function read_csv($fp){
while ( !feof ( $fp ) ) {
$zeile = fgetcsv ( $fp, 4096 );
if ( count ( $zeile ) == 6 ) {
$csv_array[]= $zeile;
}
}
return $csv_array;
}
if ($HTTP_GET_VARS["submit"] == "User Speichern") {
$fpr = @fopen("db.txt","r");
if ( $fpr == true ) {
$inhalt = false;
while ( !feof ( $fpr ) ) {
$lieszeichen = fgetc ( $fpr );
if ( ( ord ( $lieszeichen ) != 0 ) && ( ord ( $lieszeichen ) != 10 ) && ( ord ( $lieszeichen ) != 13 ) &&
( ord ( $lieszeichen ) != 32 ) ) {
$inhalt = true;
break;
}
}
fclose ( $fpr );
}
if ( $inhalt == true ) {
$fp = fopen("miniDb.txt","a+");
if ($fp == true ) {
$allewerte = true;
$datensatz = array ( $HTTP_GET_VARS["vorname"],
$HTTP_GET_VARS["nachname"],
$HTTP_GET_VARS["login"],
$HTTP_GET_VARS["pass"],
$HTTP_GET_VARS["userlevel"],
$HTTP_GET_VARS["id"] );
foreach ( $datensatz as $val ){
if ( $val == "" ) {
echo ( "Bitte alle Werte ausfüllen");
$allewerte = false;
break;
}
}
if ( $allewerte == true ){
csv_write($datensatz,$fp);
}
fclose($fp);
}
}
if ( $inhalt == false ) {
$fp = fopen("miniDb.txt","w+");
if ($fp == true ) {
$allewerte = true;
$datensatz = array ( $HTTP_GET_VARS["vorname"],
$HTTP_GET_VARS["nachname"],
$HTTP_GET_VARS["login"],
$HTTP_GET_VARS["pass"],
$HTTP_GET_VARS["userlevel"],
$HTTP_GET_VARS["id"] );
foreach ( $datensatz as $val ) {
if ( $val == "" ) {
echo ( "Bitte alle Werte ausfüllen");
$allewerte = false;
break;
}
}
if ( $allewerte == true ){
csv_write($datensatz,$fp);
}
fclose($fp);
}
}
}
$fp = @fopen("miniDb.txt","r");
if ($fp == true) {
?>
Folgende User sind bereits vorhanden:
</p>
<form action="miniDB.php" method="get">
<table cellspacing="0" cellpadding="2" border="1" bordercolor="Black" width="75%">
<tr>
<td>Vorname</td>
<td>Nachname</td>
<td>Login</td>
<td>Passwort</td>
<td>Userlevel</td>
<td>Löschen</td>
</tr>
<?php
$zeile = read_csv($fp);
for ( $i = 0; $i < count ( $zeile ) ; $i++ ) {
echo "<tr>";
for ( $j = 0; $j < count ( $zeile[$i] ); $j++ ) {
if ( $j < count($zeile[$i]) -1 ) {
echo "<td>".$zeile[$i][$j]."</td>";
}else {
echo "<td>";
?>
<input type="checkbox" name="loesch[]" value="<?php echo $zeile[$i][$j];?>">
<?php
echo "</td>";
}
}
echo "</tr>";
}
?>
<tr>
<td colspan="7">
<input type="submit" name="submit" value="User loeschen"></td>
</tr>
</table>
</form>
<?php
fclose($fp);
}
if ( $HTTP_GET_VARS["submit"] == "User loeschen" ){
$fp = @fopen("miniDb.txt","r+");
if ( $fp == true ) {
$leer = " ";
$leerstring = " ";
$gelesen = 0;
$geloescht = 0;
$zeile = read_csv($fp);
for ( $i = 0; $i < count($zeile); $i++ ){
$gelesen += strlen(implode(",",$zeile[$i]));
for ( $j = 0; $j < count($zeile[$i]); $j++ ) {
if ( is_array ( $HTTP_GET_VARS["loesch"] ) ) {
foreach ( $HTTP_GET_VARS["loesch"] as $key => $value ){
if ( $zeile[$i][$j] == $value ){
$row = implode(",",$zeile[$i] );
$geloescht += strlen($row);
for ( $k = 0; $k < strlen($row); $k++ ){
$leer .= str_replace(substr($row,$k,1)," ",$row);
$leerstring .= substr($leer,strpos($leer," ",$k),1);
}
fseek ( $fp, $gelesen - strlen($row) );
/*Jetzt wird ab der gesetzen Zeigerposition $leerstring geschrieben und ein "\r\n" angehängt.
Das ist der Zeilenumbruch unter Windows. Leider stimmt danach das Ergebnis nicht mehr

fputs($fp,$leerstring,strlen($leerstring));
fputs($fp,"\n");
fseek($fp, - strlen($leerstring)-2,SEEK_CUR);
}
}
}else{
echo "Bitte markieren Sie die Benutzer die Sie löschen wollen"."
";
$loeschnone = true;
break;
}
}
if ( $loeschnone == true ){
break;
}
}
}
@fclose($fp);
}
?>
</body>
</html>
Kommentar