php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 27.11.2004, 11:28  
Erfahrener Benutzer
 
Registriert seit: 27.11.2004
Beiträge: 149
nsane
nsane eine Nachricht über ICQ schicken
Standard Bestimmten Wert aus Array löschen ??

Hi,
ich schreibe gerade an einem Gästebuch, und will nun im Admin-Menu per GET-Variante Daten aus der TExtdatei löschen. In der Textdatei steht je Zeile ein Eintrag.

Ich hab das jetzt so gemcaht:

PHP-Code:

<?php
if ($_GET["id"]) {
$idzumkillen $_GET['id'];
$array=file($file);

if (
$_GET["id"]==and count($array)==1) {
unlink($file);
echo 
"
Der "
.$_GET['id']." Eintrag wurde aus der Datenbank gelöscht";
}
else {
// Die gelinkte ID über GET löschen:
unset($array[$_GET['id']]);
echo 
"
Der "
.$_GET['id']." Eintrag wurde aus der Datenbank gelöscht";
// Neues Array in Datei schreiben:
unlink($file);
$fp=fopen($file"a+");
fputs($fp$array);
fclose($fp);

// Wieder in Array einlesen:
$array=file($file);
}
// Hier wieder ausgeben
// Mit einer For-Schleife
}
else {

// Hier dann die Einträge auflisten, mit einem löschen-Link
}

und ich weiß nicht, warum das nicht funktioniert. angenommen, ich lösche den Eintrag 1 (ID=0), dann macht er garnix, und wenn ich irgendeinen anderen Eintrag lösche, dann geht das zwar, aber irgendwie hab ich dann in meiner Textdatei nur noch stehetn:

PHP-Code:
]Array 
]

Aber das verstehe ich auch nicht, weil ich speicher doch per fputs in meine neue Datei (vorher unlinked) das $array, aus dem die bestimmte ID gelöscht worden ist.
nsane ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 27.11.2004, 11:53  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Das ist in dem Fall so, weil du versuchst mit fputs einen Array zu schreiben.
Zitat:
Zitat von http://de3.php.net/manual/de/function.fputs.php
int fputs ( resource handle, string str [, int length])
Deshalb musst du zuerst aus dem Array einen String machen. Un dann öffne deine Datei zum Schreiben und nicht zum anhängen.
PHP-Code:
...
        
$fp=fopen($file'w');
        
$str implode('\r\n'$array);  // Zutrffender Zeilenumbruch
        
fputs($fp$str);
... 
__________________
Gruss
L
lazydog ist offline  
Alt 27.11.2004, 12:01  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hm .. ich dachte immer, dass man mit unset() keine bestimmten elemente aus einem array löschen kann. war ich da auf dem holzweg? ich hab das immer auf die 'umständliche' art und weise gemacht.

PHP-Code:
<?php


    $_array 
= array( 'hallo',
                     
'juhu',
                     
'welcome',
                     
'bon soir',
                     
'und so weiter',
                     
'und so fort' );
                     
    if( isset(
$_GET['id'])
        &&
        
is_numeric($_GET['id'])
        &&
        ( 
$_GET['id'] > 0
          
&&
          
$_GET['id'] <= count($_array)
        )

      )
    {
        
// Wir löschen $_GET['id'] - 1, da die Arrayindizierung bei 0 anfängt.
        
$_array deleteElement$_array$_GET['id']-1);
        
        
// Ausgabe des Arrays nach dem Löschen des Elements
        
pre($_array);
    }
    else
    {
        
// Ausgabe des Ursprungsarrays
        
pre($_array);
        
        
// Als Beispiel löschen wir den zweiten Eintrag  ( $_GET['id'] ist 2 )
        
echo '[url="' $_SERVER['PHP_SELF'] . '?id=2"]Löschen des zweiten Eintrags[/url]';
        
    }




    function 
deleteElement$_array$id )
    {
        
$_dummy = array();
        
        for( 
$i 0$i count($_array); $i++ )
        {
            if( 
$i != $id )
            {
                
$_dummy[] = $_array[$i];
            }
        }
        
        return 
$_dummy;
    }
    
    
    function 
pre$_array )
    {
        echo 
'<pre>';
        
print_r($_array);
        echo 
'</pre>';
    }


?>
grüße ben ...


edit:
http://de2.php.net/unset
Zitat:
PHP-Code:
// Einzelnes Array-Element löschen
unset($bar['quux']); 
imported_Ben ist offline  
Alt 27.11.2004, 12:05  
Erfahrener Benutzer
 
Registriert seit: 27.11.2004
Beiträge: 149
nsane
nsane eine Nachricht über ICQ schicken
Standard

was ich jetzt grad garnet mehr verstehe, ist, warum ich jetzt eine Fehlermeldung bekomme:
Parse error: parse error, unexpected $ in c:\programme\foxserv\www\gb\admin.php on line 85

Obwohl in dieser Zeile doch nur ?> steht:

PHP-Code:
<?php
include('config.inc.php');
define('time_start'array_sum(explode(' 'microtime())));
?>
<html>
<link href='style.css' rel='stylesheet' type='text/css'><body link=black vlink=black alink=black>
<div align='center'>
<center><h2>Admin</h1>


<center>[url="gb.php"]<div style=\"font-size: 10px;\">Ins Gästebuch zurück[/url]
<?php
if ($_GET["id"]) {
$idzumkillen $_GET['id'];
$array=file($file);

    if (
$_GET["id"]==and count($array)==1) {
        
unlink($file);
        echo 
"
Der "
.$_GET['id']." Eintrag wurde aus der Datenbank gelöscht";
    }
    else {
        
// Die gelinkte ID über GET löschen:
        
unset($array[$_GET['id']]);
        echo 
"
Der "
.$_GET['id']." Eintrag wurde aus der Datenbank gelöscht";
        
        
// Neues Array in Datei schreiben:
        
$str implode('\r\n'$array);  // Zutreffender Zeilenumbruch 
        
unlink($file);
        
$fp=fopen($file"a+");
        
fputs($fp$str);
        
fclose($fp);

        
// Wieder in Array einlesen:
        
$array=file($file);
    } 
    
    
// Jetzt wieder den neuen Stand ausgeben:
    
$temp=count($array)-1;
    
$r=count($array);
    for (
$i=$temp;$i>=0;$i--) {                
                
$element=explode("%"$array[$i]);
                
                
// Wieder die Slashes entfernen:
                
$e0=stripslashes($element[0]); // Element 0 = Datum

                
$e1=stripslashes($element[1]); // Element 1 = Name
                
$e2=stripslashes($element[2]); // Element 2 = Nachricht
                
$e3=stripslashes($element[3]); // Element 3 = Titel
                
$e4=stripslashes($element[4]); // Element 4 = Mail
                
                
echo "
"
.$r.". Eintrag am ".$e0." von ".$e1;
                echo 
"
Titel:"
.$e3;
                echo 
"
Mail: "
.$e4;
                echo 
"
Nachricht: "
.$e2;
                echo 
"
"
;
                
$id=$r-1;
                echo 
"[url='admin.php?id=$id']löschen[/url]


"
;
                
$r--;
    } 

if (!
$_GET["id"]) {
    if (
file_exists($file)) {
        
$array=file($file);
        
$r=count($array);
        
$temp=count($array)-1;
            for (
$i=$temp;$i>=0;$i--) {
                
$element=explode("%"$array[$i]);
                
                
// Wieder die Slashes entfernen:
                
$e0=stripslashes($element[0]);
                
$e1=stripslashes($element[1]);
                
$e2=stripslashes($element[2]);
                
$e3=stripslashes($element[3]);
                
$e4=stripslashes($element[4]);

                echo 
"
"
.$r.". Eintrag am ".$e0." von ".$e1;
                echo 
"
Titel:"
.$e3;
                echo 
"
Mail: "
.$e4;
                echo 
"
Nachricht: "
.$e2;
                echo 
"
"
;
                
$id=$r-1;
                echo 
"[url='admin.php?id=$id']löschen[/url]


"
;
                
$r--;
            }    
    }
    else {echo 
"

noch keine Einträge vorhanden"
;
    }
}
?>

edit1:
-------
sry, ich hab nachdem ich ersteinaml eine Mäglichkeit auskommentiert hatte, und dann wieder ereingenommen habe, das } zeichen der ersten If-Abfrage vergessen !!!

edit2:
-------
Hm, jetzt mekkert der schon wieder rum. Also wenn ich irgendwas mit ?id=xxx anhänge, dann gehts, und wenn net, dann kommt der selbe fgehler wieder !!!


edit3:
-------
ok, soweit geht jetzt alles, nur wenn ich irgendeinen Datensatz lösche, dann bleibt dort immer eine Zeile zuviel:

also wenn ich Eintrag 3 lösche, dann stehen in meinem Gästebuch noch 2 Einträge, aber wenn ich dann noch einen schreibe, dann ist der 3. Eintrag komplett leer, und der 4. Eintrag ist der eben geschriebene. Gibt es da irgendeine funktion, die vllt noch die leeren Elmente eines Arrays löscht, oder brauche ich hier etwas ganz anderes ??


edit by ben:
man muss nicht vier beiträge hintereinander schreiben .. man kann auch die editier-funktion verwenden.
nsane ist offline  
Alt 27.11.2004, 12:32  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von nsane
Gibt es da irgendeine funktion, die vllt noch die leeren Elmente eines Arrays löscht, oder brauche ich hier etwas ganz anderes ??
bei meinem code wird ein element gelöscht und die indizierung neu vergeben.

du musst ihn nur noch um das lesen und schreiben aus und in die datei erweitern.

das array erhälst du ja mit file(). reinschreiben sollte dann kein problem sein.

grüße ben.
imported_Ben ist offline  
Alt 27.11.2004, 13:19  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von nsane
was ich jetzt grad garnet mehr verstehe, ist, warum ich jetzt eine Fehlermeldung bekomme:
Parse error: parse error, unexpected $ in c:\programme\foxserv\www\gb\admin.php on line 85

Obwohl in dieser Zeile doch nur ?> steht:
Der Fehler kann auch verschleppt sein. Beim Überfliegen ist mir spontan auch nichts aufgefallen, nur eins:
Du schreibst echo "<a href='.......$var.....
im restlichen Teil des Skriptes ist der Stil aber anders (richtig)
echo "Text".$var."....
 
Alt 27.11.2004, 13:23  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von Juscho
Der Fehler kann auch verschleppt sein.
es wäre eventuell günstig, wenn du den gesamten beitrag lesen würdest ... unten steht nämlich im EDIT, dass das problem gelöst ist ..
imported_Ben ist offline  
Alt 27.11.2004, 13:33  
Gast
 
Beiträge: n/a
Standard

lol danke Ben, man sollte wohl wirklich alles komplett lesen...
 
Alt 27.11.2004, 13:46  
Erfahrener Benutzer
 
Registriert seit: 27.11.2004
Beiträge: 149
nsane
nsane eine Nachricht über ICQ schicken
Standard

Erst mal ein großes Dankeschön an Ben, deine Funktion klappt super, und es funktioniert auch alles super. Das mit den überflüssigen Zeilenumbrüchen habe ich so gelöst (da ich das array eh in einen String umwandeln musst, damit ich den in eine Datei schjreiben kann):

PHP-Code:
$str trim(implode('\n\r'$_array)); 
wobei $_array das vorherige Array ist, welches dann noch mit deiner Funktoin überarbeitet wurde. Jetzt noch ne kleine Frage, soweit verstehe ich zwar deine Funktion, aber müsste es nicht theoretisch gesehen so heißen:

PHP-Code:
 function deleteElement$_array$id )
    {
        
$_dummy = array();
        
        for( 
$i 0$i count($_array); $i++ )   // $i<count($array)-1
        
{
            if( 
$i != $id )
            {
                
$_dummy[] = $_array[$i];
            }
        }
        
        return 
$_dummy;
    } 
da wo ich ein Kommentar hingemacht habe. Weil man fängt ja bei 0ß statt eins an, also ja auch < count($array)-1 oder ??


Edit: Nein, du hast recht, es müsste denk ich mal nur count($array)-1 heißen, wenn man auch schreiben würde $i<= , aber du hast ja geschrieben $i < count($array), also hört es ja auch eins früher auf !!!
nsane ist offline  
Alt 27.11.2004, 17:20  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

exakt. aber gut, dass du dir gedanken machst. find ich super ... *THUMBS UP*
imported_Ben ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
[Erledigt] Hat ein Array einen Wert? silver_surfer PHP Tipps 2008 6 22.06.2008 12:20
Keys aus Array löschen die keinen Wert beinhalten? PHP Tipps 2006 7 06.04.2006 16:07
Array schlüssel über wert finden Dave Waterstone PHP-Fortgeschrittene 3 29.03.2006 17:54
Array auslesen andrew22 PHP Tipps 2006 3 21.01.2006 23:06
Array Formatierung PHP Tipps 2006 3 17.01.2006 19:12
array verarbeitung (schlag auf den hinterkopf) PHP Tipps 2007 9 16.11.2005 11:37
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Einem Array einen Wert hinzufügen PHP Tipps 2005-2 5 14.10.2005 14:50
Problem beim vergleichen von 2 Arrays PHP Tipps 2005-2 1 06.10.2005 14:25
Zugriff auf einen bestimmten wert in einem Array PHP Tipps 2005 1 08.02.2005 18:09
[Erledigt] Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31
Abfrage mit id aus anderer Tabelle suter PHP Tipps 2004-2 15 16.12.2004 14:25
[Erledigt] Wert aus einem Array löschen PHP Tipps 2004 1 29.08.2004 22:49

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php wert aus array entfernen, wert aus array löschen, php bestimmten wert aus array entfernen, eintrag aus array löschen wo wert, daten aus array löschen, bestimmten wert aus array löschen, wert aus array entfernen php, eintrag aus array entfernen, bestimmten wert aus array entfernen php, php array einträge löschen pattern, php wert aus array löschen und in datei speichern, zeilen mit bestimmten inhalt löschen array, datenbankeintrag nach einer bestimmten id löschen, wert aus array löschen und in neues array, datei mit id löschen mit get php, element mit bestimmtem wert aus array löschen, $_get variable leeren php, php array mit bestimmten wert suchen und löschen, wert aus array entfernen, php einzelnen wert aus datenbank löschen

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:43 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.