PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : unset() Fehler


Said
28.02.2007, 11:01:36
Uhm hallo alle zusammen :) ich bins nochmal mit wiedermal wahrscheinlich einem so kleinen Problem und doch bin ich anscheinen echt zu blöd.

Es geht um ein Formular.
In meinen Abfragen werden verschiedene $msg texte definiert die je nach status dann ausgegeben werden mit if else schleifen usw.

Jetzt passieren manchmal merkwürdige dinge wenn man verschiede aktionen macht im Formular mit den Benachrichtigungen und er behält einfach messages vom vorherigen tun bei wenn man neu auf den Senden Button klickt. Ich dachte mir ok lösch ich halt die Message jedesmal nach der Ausgabe usw. aber nein es ändert nichts :( wieso??? was mach ich falsch?



<?php
#Beispiel für meine ganzen abfragen
if($submit != ''){
if($allesklar == "alles klar"){
$msg = "Das und das wurde gemacht<br>";
}else{
$msg = "Geht nicht<br>";
}
if($file == ''{
$msg .= "- Du hast keine Datei gewählt<br>";
}else{
$msg .= "Datei wurde erfolgreich hochgeladen<br>";
}
}
#und so weiter natürlich mit sinnvollerem als dem kram jetzt hier war nur als beispiel

#langer HTML etc.
?>

<?php
if($msg != ''){?>
<tr>
<td colspan="5" align="center" class="filter_list"><span ><?php echo $msg;unset($msg);
?></span></td>
</tr>
...

Andes
28.02.2007, 11:38:14
Hast du schon mal etwas von einer Prüfung auf leer(empty) nicht leer (!empty) gelesen? Wahrscheinlich nicht, sonst würdest du nicht so prüfen.
Besser
//wenn Variable nicht leer sein darf
if(!empty($submit)) { }
//oder, wenn nur geprüft werden soll, ob die Variable existiert
if(isset($submit)) { }
//wenn $submit dein Absendebutton ist
if(isset($_POST['submit'])) { }
Benutzt du $_POST oder $_GET um deine Formulardaten zu empfangen?
Wie wird überhaupt dein Formular versandt?
Es ist immer besser das eigentliche Script zu posten als irgendwelche Beispiele. Da können sich auch wieder Fehler einschleichen. Die in deinem eigentlichem Script nicht existieren.
Also poste mal dein richtiges Script sonst kann man nicht all zu viel sagen.

Edit: Was soll dies eigentlich sein? Und wo wird die Variable definiert.
if($allesklar == "alles klar")
Besser ist mit boolen (true, false) Werten zu arbeiten.

if(true === $allesklar) { }

Said
28.02.2007, 13:24:31
Mh Hallo Andes,

Danke für deine Hilfe vorab

Das script ist ziemlich lang und unsauber lol deswegen hab ich das bissel abgekürzt und vom system her ähnliche Beispiele genommen.

Ich hab in meiner PHP ini register_globals auf ON deswegen benutze ich $_GET[] usw nicht. habe auf dem Server Seiten von früher liegen die ich dann erst alle umschreiben müsste und dafür bin ich ehrlich gesagt zu faul :)

Hm wie soll ich den fehler erklären: also ich habe zum beispiel folgende datei mit der ich ein Forum erstelle bearbeite usw.

Wenn ich jetzt zum Beispiel ein Forum lösche dann gibt mir $msg aus "Das Forum wurde erfolgreich gelöscht blah blah". Wenn ich dann aber direkt ein neues erstelle Dann bleibt $msg auf dem löschen stand und wird nicht mit der neuen Meldung definiert. Irgendwie hat sich da n fehler eingeschlichen.

Beispiel PHP Bereich forum.php

<?php
session_start();
$sessid = md5(uniqid(rand(), TRUE));;
if (!isset($admin) or !isset($passwort)){
header("Location:login.php");
}
include("conf.php");

if($sort == ''){
$sort = "katid";
}else{
$sort = $sort;
}
if($seite == ''){
$seite = "module";
}else{
unset($seite);
$seite = "module";
}

//Foren reseten
if($aktion == "reset"){
$x = 1;
$forenholen = mysql_query("SELECT * FROM forum_kat WHERE threadstatus = '1' AND sprachid='$sprache' ORDER BY 'id' ASC");
while($schleife = mysql_fetch_array($forenholen)){
$forenid = $schleife['id'];
$forenupdate = "Update forum_kat SET reihenfolge = '$x' WHERE id='$forenid'";
$ausführen = mysql_query($forenupdate);
$x++;
}
}



//Neues Forum eintragn
if($Submit == "Forum eintragen"){
//Kategoriebild hochladen
if($katbild != ''){
$einmalig = md5(uniqid(rand(), TRUE));
@copy($katbild,"$bilderordner"."forum/$einmalig"."$katbild_name");
$kat_vorschaubild = "$url/bilder/forum/$einmalig"."$katbild_name";
}else{
$kat_vorschaubild = $download_vorschaubild;
}

//Reihenfolgeprüfen
if($reihenfolge != ''){
if($reihenfolge != "erstes" && $reihenfolge != "letztes"){
$forenupdate = "Update forum_kat SET reihenfolge = (reihenfolge+1) WHERE threadstatus = '1' AND reihenfolge > '$reihenfolge' AND sprachid='$neue_sprache'";
$ausführen = mysql_query($forenupdate);
$reihenfolge = $reihenfolge+1;
}else{
if($reihenfolge == "erstes"){
$forenupdate = "Update forum_kat SET reihenfolge = (reihenfolge+1) WHERE threadstatus = '1' AND sprachid='$neue_sprache'";
$ausführen = mysql_query($forenupdate);
$reihenfolge=1;
}
if($reihenfolge == "letztes"){
$kat_holen = mysql_query("Select * From forum_kat WHERE threadstatus = '1' AND sprachid='$neue_sprache'");
$forum = mysql_num_rows($kat_holen);
$reihenfolge= $forum+1;
}
}
}

//Datenbankeintrag vornehmen
$eintragen = "INSERT INTO forum_kat VALUES ('0','$forumname','$spaw1','1','0','','0','0','$forumstatus','$kat_vor schaubild','$reihenfolge','$neue_sprache')";
if($result = mysql_query($eintragen)){
$msg = "Das Forum <strong>$forumname</strong> wurde erfolgreich in die Datenbank eingetragen";
}else{
$msg = "<font color=\"0000FF\">Es trat ein Fehler beim eintragen in die Datenbank auf.<br> Das Forum wurde nicht hinzugefügt!</font>";
}
}




// Forum löschen
if($loeschid != ''){
//Forum auslesen
$datenholen = mysql_query("Select * From forum_kat WHERE id = '$loeschid'");
$loeschen = mysql_fetch_array($datenholen);
$forum_reihenfolge = $loeschen['reihenfolge'];
$neue_sprache = $loeschen['sprachid'];
// Alle anderen reihenfolgen neu einrichten
$forenupdate = "Update forum_kat SET reihenfolge = (reihenfolge-1) WHERE threadstatus = '1' AND reihenfolge > '$forum_reihenfolge' AND sprachid='$neue_sprache'";
$ausführen = mysql_query($forenupdate);

$download_vorschaubild_alt = $loeschen['bild'];
$name = $loeschen['name'];
//datei und vorschaubild Löschen
$bildcheck = mysql_query("Select * From forum_kat WHERE bild = '$download_vorschaubild_alt'");
$anzahlbild = mysql_num_rows($bildcheck);
if($anzahlbild == 1){
$losch = $download_vorschaubild_alt;
$ersetzenlosch = array("$url" => "..");
$bildlöschen = strtr($losch,$ersetzenlosch);
@unlink($bildlöschen);
}
// Aus der Datenbank entfernen
$loesches = "DELETE from forum_kat WHERE id = '$loeschid'";
$result = mysql_query($loesches);
$msg = "Das Forum <strong>$name</strong> wurde erfolgreich aus der Datenbank entfernt";

}


// Forum updaten
if($Submit == "Forum updaten"){
// Link zum Vorschaubild erstellen
if($katbild != ''){
//altest vorschaubild Löschen
$bildcheck = mysql_query("Select * From forum_kat WHERE bild = '$download_vorschaubild_alt'");
$anzahlbild = mysql_num_rows($bildcheck);
if($anzahlbild == 1){
$losch = $download_vorschaubild_alt;
$ersetzenlosch = array("$url" => "..");
$bildlöschen = strtr($losch,$ersetzenlosch);
@unlink($bildlöschen);
}
$einmalig = md5(uniqid(rand(), TRUE));
copy($katbild,"$bilderordner"."forum/$einmalig"."$katbild_name");
$download_vorschaubild = "$url/bilder/forum/$einmalig"."$katbild_name";
}else{
$download_vorschaubild = $download_vorschaubild;
}

if($sprache != $neue_sprache){
$forenupdate = "Update forum_kat SET reihenfolge = (reihenfolge+1) WHERE threadstatus = '1' AND sprachid='$neue_sprache'";
$ausführen = mysql_query($forenupdate);
$reihenfolge=1;
$Submit = "ok";
$sprache_ändern = $neue_sprache;
$forenupdate = "Update forum_kat SET reihenfolge = (reihenfolge-1) WHERE threadstatus = '1' AND reihenfolge > '$forum_reihenfolge' AND sprachid='$sprache'";
$ausführen = mysql_query($forenupdate);
}else{

//Reihenfolgeprüfen
if($reihenfolge != ''){
if($reihenfolge != "erstes" && $reihenfolge != "letztes"){
$forenupdate = "Update forum_kat SET reihenfolge = (reihenfolge+1) WHERE threadstatus = '1' AND reihenfolge > '$reihenfolge' AND sprachid='$neue_sprache'";
$ausführen = mysql_query($forenupdate);
if($reihenfolge > $forum_reihenfolge){
$reihenfolge = $reihenfolge;
}else{
$reihenfolge = $reihenfolge+1;
}
$forenupdate = "Update forum_kat SET reihenfolge = (reihenfolge-1) WHERE threadstatus = '1' AND reihenfolge > '$forum_reihenfolge' AND sprachid='$neue_sprache'";
$ausführen = mysql_query($forenupdate);
}else{
if($reihenfolge == "erstes"){
$forenupdate = "Update forum_kat SET reihenfolge = (reihenfolge+1) WHERE threadstatus = '1' AND reihenfolge < '$forum_reihenfolge' AND sprachid='$neue_sprache'";
$ausführen = mysql_query($forenupdate);
$reihenfolge=1;
}
if($reihenfolge == "letztes"){
$forenupdate = "Update forum_kat SET reihenfolge = (reihenfolge-1) WHERE threadstatus = '1' AND reihenfolge > '$forum_reihenfolge' AND sprachid='$neue_sprache'";
$ausführen = mysql_query($forenupdate);
$kat_holen = mysql_query("Select * From forum_kat WHERE threadstatus = '1' AND sprachid='$neue_sprache'");
$forum = mysql_num_rows($kat_holen);
$reihenfolge= $forum;
}
}
}
}

//daten bank updaten
$update = "UPDATE forum_kat SET name = '$forumname',beitrag='$spaw1',status='$status',bild='$download_vorscha ubild',reihenfolge='$reihenfolge',sprachid='$neue_sprache' WHERE id='$upid'";
$result = mysql_query($update);
$msg = "Das Forum <strong>$name</strong> wurde erfolgreich geupdated";
$newsedit = '';
}
?>


Im bereich wo die message ausgegeben werden soll :

<?php
if($msg != ''){?>
<tr>
<td colspan="4" align="center" class="filter_list"><span ><?php echo $msg;
?></span></td>
</tr>
<?php }unset($msg);?>


Ich weiss alles ein wenig leicht geschrieben und man hätt es vielleicht kürzer und schneller machen können aber ich habs mir früher so angewöhnt und seitdem nicht weitergelernt da ich noch zuviel andere sachen lerne.

MFG Said

|Coding
28.02.2007, 13:52:13
Das Problem ist nicht unset(), sondern das Script selbst. Ich halte es für besser wenn Du das Ding noch Mal stark überarbeitest. Alleine das hier ist schon sehr sinnfrei:

if($sort == ''){
$sort = "katid";
}else{
$sort = $sort;
}

Andes
28.02.2007, 14:26:28
Ich geh mal nicht weiter auf die Programmierung ein.
Setz halt mal nach jeder Bedingung ein echo $msg. Da siehst du ja wo sie überschrieben wird und wo sie noch den richtigen Wert(String) enthält.
Da du ja auch nicht prüfst ob der Datensatz auch wirklich gelöscht wurde, reicht es wenn die Bedingung $loeschid != '' erfüllt ist. Dann wird die Meldung halt ausgegeben.
Setz halt auch mal an den Anfang deines Scripts error_reporting(E_ALL).

Said
28.02.2007, 17:14:49
@coding
Ja ich bin ja noch am scripten und das war noch von vorher von ne funktion die ich jetzt anders gemacht hab. :) hab ich noch nicht entfernt :)

Mh also der Fehler tritt immer nur auf wenn ich was gelöscht habe :) ab da an ist msg irgendwie fest auf den löschtext definiert.
Na ja ich fummel mal weiter.
by the way gibts ne einfache möglichkeit meine alten scripte umzuschreiben auf $_POST[] $_GET[] usw format?? oder muss ich wirklich jede variable per hand ändern?

|Coding
01.03.2007, 13:49:31
by the way gibts ne einfache möglichkeit meine alten scripte umzuschreiben auf $_POST[] $_GET[] usw format??

Du musst doch nur Deinen Code durchgehen und schauen wo etwas per post, get, cookie usw. rein kommt. So aufwendig kann das doch nicht sein.

Said
02.03.2007, 00:25:51
hallo coding :)
mh doch teilweise ist das aufwendig hab mehrere internet projekte und wenn ich das überall gucken will geht da schon ne menge zeit bei drauf.

Vielen danke nochmal mit den if(isset(soundso)) tips :) Habe das script nochmal umgeschrieben und dabei auch gleich Fehlermeldungen etc mit variable gemacht. das kommt davon wenn man einfach drauf loslegt ohne konzept usw :) dann mussm an jedes script 10 mal ändern. Na ja jedenfalls läufts jetzt damit.
Also Vielen dank nochmal.

Mit freundlichen grüssen
Said