kostenloser Webspace werbefrei: lima-city


PHP or die variabel festlegen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    thwbm

    thwbm hat kostenlosen Webspace.

    Hallo, vielleicht könnt ihr mir Weiterhelfen, mein Problem:
    Ich möchte eine Variabel durch ein
    or die
    festlegen, also in etwa so, nur halt so, dass es funktioniert:
    <?php
      $verbindung = mysql_connect("server", "benutzername", "passwort")
      or die $Fehlermeldung = 1 ("Fehler");
    ?>

    Danke im Vorraus für alle Antworten,
    THWBM
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. was soll das denn für ein sinn ergeben?
    schau dir doch mal die funktion die() an!

    selbst wenn es funktionieren würde, wäre das einzige was du mit deinem script erziehlst diese zuweisung, mehr wird nicht mehr ausgeführt!

    du könntest die() weglassen.

    zb durch eine varriable error
    or $error = "errormeldung";

    generell ist es ja nicht häufig das die DB ausfällt, sonst kannst die ja trotzdem eine bedinung direkt über dein index / load script leben, die die DB connection prüft und ggf eine von dir designte fehlermeldung läd.

    falls dir das nicht hilft, schreib doch genau was du vorhast

    Beitrag zuletzt geändert: 9.9.2012 17:22:57 von dishonored
  4. keine Ahnung ob man mit or dann auch Variable zuweisen kann
    wenn ja, dann meist Du wohl in etwa so:

    $Fehlermeldung = null; 
    $verbindung = mysql_connect("server", "benutzername", "passwort") 
        or $Fehlermeldung = '1';


    ich würde es aber anders machen,
    mit if ($verbindung !== true) ... bzw. mit der Kurzform if (!$verbindung) ...

    also ... einfach als "Schalter" so:

    $verbindung = mysql_connect("server", "benutzername", "passwort"); 
    
    if (!$verbindung) { $Fehlermeldung = '1'; } 
                 else { $Fehlermeldung = null; }


    und dann
    if ( !empty($Fehlermeldung) ) { 
       echo "<br /> Es gab einen Fehler ... Fehlernummer: ".$Fehlermeldung."  \n"; 
    }


    oder die Fehlermeldung selber in Variable ablegen

    $verbindung = mysql_connect("server", "benutzername", "passwort"); 
    if (!$verbindung) { $Fehlermeldung = mysql_error(); }  
                 else { $Fehlermeldung = null; }


    und dann
    if ( !empty($Fehlermeldung) ) { 
       echo "<br /> Die Fehlermeldung lautet: <br />\n <pre>" . $Fehlermeldung . "</pre>\n"; 
    }


    Anstatt hier die $Fehlermeldung als Ausgabe mit echo
    könnte man die auch in Log-Datei schreiben (oder per eMail versenden)

    ich hoffe ich hab es richtig verstanden, was Du willst :)


    Beitrag zuletzt geändert: 9.9.2012 17:29:28 von webguide
  5. Autor dieses Themas

    thwbm

    thwbm hat kostenlosen Webspace.

    An dishonored:
    das ist nicht sinnlos, du hast einfach nur nicht verstanden was ich vor habe, aber egal, denn webguide hat mir schon helfen können.
    An webguide:
    Da hast es fast richtig verstanden, denn ich wollte eigentlich die Variabel festlegen und trotzdem den Text anzeigen, aber so wie du das gelöst hast, sollte es auch funktionieren. Ich werde es jetzt mal ausprobieren, danke!

    Beitrag zuletzt geändert: 9.9.2012 17:36:40 von thwbm
  6. @ thwbm

    du hast mich nicht verstanden!!!!!!!!!!!!!!!!!!!!!!!!!!
    es ist sinnlos mit or DIE() eine varriable festzulegen da das komplette script nach der ausführung von die() nicht mehr ausgeführt wird!!!

    das leitet sich schon ab wenn du mal "die" ins deutsche übersetzen würdest..
    mein nachposter hat im grunde das gleiche gemeint, wie er weiß ich auch nicht ob man mit or eine var zuweisen kann, theoretisch jedoch schon! machen tut es keiner, da man an bestimmter stelle die verbindung mit =true prüft!


    if ( !empty($Fehlermeldung) ) { 
       echo "<br /> Es gab einen Fehler ... Fehlernummer: ".$Fehlermeldung."  \n"; 
    }


    sollte nur sinvoll sein, wenn man einen kompletten error code hinzufügt.

    ist natürlich schematisch praktischer, die meldungen in einer db zu speichern / ggf auch gleich multi lingual
    und mit errorcodes aka
    incondig
    $error[0]!='';

    und dann error codes importieren, was aber natürlich ohne db nicht geht, wurdurch
    $error[$code]
    nutzlos würde, auchnoch ein warning angezeigt würde, was du aber bei komplettem error log usw abschalfen würdest mit
    error_reporting(0);
    .
    //nach der db_conn
    if (!$verbindung) { $error[0]=1; $code=xx; $msg=mysql_error();}


    if($error[0]='1') {echo'<layer id="error">'.$error[$code]'.</layer>';}


    oder wie man das halt realiesieren will...

    evt auchmal http://php.net/manual/de/function.error-reporting.php anschauen!!

    evt beschreibste einfach mal genauer was du möchtest, dann kann man dir auch gezielt helfen!!


    Beitrag zuletzt geändert: 9.9.2012 17:47:33 von dishonored
  7. Autor dieses Themas

    thwbm

    thwbm hat kostenlosen Webspace.

    dishonored schrieb:
    @ thwbm

    du hast mich nicht verstanden!!!!!!!!!!!!!!!!!!!!!!!!!!
    es ist sinnlos mit or DIE() eine varriable festzulegen da das komplette script nach der ausführung von die() nicht mehr ausgeführt wird!!!

    Ok, dasnn habe ich das wohl nicht so ganz verstanden, wenn das so ist, habe ich noch eine Frage, und zwar: wenn ich das "or die" weglasse, wird dann noch etwas dahinter ausgeführt?
  8. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    thwbm schrieb:
    Ok, dasnn habe ich das wohl nicht so ganz verstanden, wenn das so ist, habe ich noch eine Frage, und zwar: wenn ich das "or die" weglasse, wird dann noch etwas dahinter ausgeführt?
    Ja, da das Script dann nicht durch
    die()
    im Fehlerfall abgebrochen wird.

    Was hättest du von einer definierten Variable, wenn dann das Script abgebrochen wird? Ich verstehe den Sinn hinter deinem Vorhaben nicht...
  9. Autor dieses Themas

    thwbm

    thwbm hat kostenlosen Webspace.

    Danke hackyourlife für die Antwort, denn dann lasse ich die
    or die
    Anweisung weg. Meine Idee, die dahintersteckt war, dass ich bei einem Fehler (also über
    or die
    ) eine if abfrage starte, die dann nicht nur eine Fehlermeldung anzeigt, sondern ein weiters PHP script startet.
    PS: wie machst du das eigentlich, dass noch deinen Codes kein Zeilenumabruch kommt?
  10. thwbm schrieb:
    PS: wie machst du das eigentlich, dass noch deinen Codes kein Zeilenumabruch kommt?


    bei dem code BB den Parameter
    =inline
    einfügen

    [ code=inline ] dieser Text bleibt ohne Zeilenumbruch [ /code ]

    Nutzung natürlich ohne die Leerzeichen innerhalb der eckigen Klammern



    zum Thema ... Script ausführen nach or
    ... ja es scheint zu funktionieren ... habe mal einen Test gemacht

    im Test Beispiel gibt die Funktion bei Fehler ein FALSE zurück
    also ist sie vergleichbar mit mysql_connect()
    oder auch mit jeder anderen Funktion die FALSE im Fehler-Fall zurückgibt


    <?php
    // ----------------- Test or Zuweisung -------------- 
    
    function machwas ($erg) { 
    	if ($erg != 'ja') { return false; } else { return true; } 
    }
    
    
    $test1 = machwas('nein') or $nfo_a = 'Fehler Nr: 1'; 
    
    if (isset($nfo_a)) { echo "<br>".$nfo_a."\n"; }  // ---- Augabe kommt, also es geht wohl ----  
                  else { echo "<br>Kein Fehler im Test 1 \n"; } 
    
    
    
    $test2 = machwas('ja') or $nfo_b = 'Fehler Nr: 2'; 
    
    if (isset($nfo_b)) { echo "<br>".$nfo_b."\n"; } 
                  else { echo "<br>Kein Fehler im Test 2 \n"; } 
    
    
    
    // --------------------------------------------------
    ?>



    wenn NICHT machwas('ja') als Funktions-Aufruf übergeben wird,
    ist der RETURN = false .... dann greift das "or" und die Variable wird gesetzt

    anstatt einfach eine Variable zuweisen, sollte da dann auch anderer PHP-Code funktionieren

    aber die Pfüfung mit
    if (!$verbindung) { ... }
    finde ich trotzdem besser

    wenn man im Fehler-Fall das Script abbrechen will (wie sonst durch die()
    kann man ja auch ein exit(); machen

    if (!$verbindung) { 
      // --- hier PHP für den Fehler-Fall ---- z.B. Ausgabe der MySQL Fehlermeldung 
     exit(); // --- Script wird ab hier abgebrochen, kein weiterer Code wird ausgeführt. 
    }




    Beitrag zuletzt geändert: 9.9.2012 19:44:00 von webguide
  11. du möchtest das bei keiner datenbank verbindung ein weiteres php skript startet.
    das habe ich verstanden.
    leider habe ich daraufhin noch weitere fragen :D

    Wieso?

    Warum?

    Was für ein zweck hat das ganze?

    eig fast immer die gleiche frage....

    aber tuh uns dochn gefallen, wenn du uns einfach mal sagen würdest was du genau bezwecken willst dann haben wir bestimmt viele lösungen parat, die ggf. viel besser sind und ganz anders aussehen, auf die du einfach nicht kommst, einfach weil dir die erfahrung fehlt
  12. Autor dieses Themas

    thwbm

    thwbm hat kostenlosen Webspace.

    Danke für die weiteren Antworten,
    an webguide:
    das
    code=inline
    habe ich jetzt verstanden und ich glaube mit der Funktion kann ich auch etwas anfangen.
    an dishonored:
    Mein Ziel ist, einen Datensatz in eine MySQL Tabelle zu schreiben, die dann über auto_increment eine ID bekommt, was soweit auch funktioniert hat. Diese ID sollte dann direkt nach der Erstellung ausgelesen werden und in eine zweite Tabelle geschrieben werden. Die
    or die
    Anweisung sollte dann bezwecken, dass eine Variabel einen bestimmten Wert bekommt, wenn eine der Verbindungen fehlgeschlagen ist. Weist du vielleicht wie sich das umsetzen lässt?
  13. thwbm schrieb:
    an dishonored:
    Mein Ziel ist, einen Datensatz in eine MySQL Tabelle zu schreiben, die dann über auto_increment eine ID bekommt, was soweit auch funktioniert hat. Diese ID sollte dann direkt nach der Erstellung ausgelesen werden und in eine zweite Tabelle geschrieben werden. Die
    or die
    Anweisung sollte dann bezwecken, dass eine Variabel einen bestimmten Wert bekommt, wenn eine der Verbindungen fehlgeschlagen ist. Weist du vielleicht wie sich das umsetzen lässt?


    das erste hat doch garnichts mit dem zweiten zu tun?

    wie eine variable ein wert bekommt bei keiner db connection haben wir dir hier desöfteren gezeigt
    $verbindung = mysql_connect(); // oder ähnliches 
    if (!$verbindung) { $varriable = "wert"; }


    ich verstehe immernoch keinen sinn. wieso sollte man soetwas machen? was soll daraus resultieren?

    daten auszulesen machst du mit
    SELECT
    einfügen mit
    INSERT
    ... aber bitte erkläre doch was das ganze soll... wofür das ganze ist...
  14. dishonored schrieb:
    Wieso?
    Warum?
    Was für ein zweck hat das ganze?

    dishonored schrieb:
    ...
    wieso sollte man soetwas machen? was soll daraus resultieren?
    ... aber bitte erkläre doch was das ganze soll... wofür das ganze ist...

    Du wiederholst dich. :wink:

    Ich versteh nicht warum immer bei allen Tutorials dieses dumme or die(...) verwendet wird.
    Das ist nicht so leicht zu lesen und Anfänger kennen sich damit noch weniger aus, weshalb wir nun den Thread hier haben ...

    thwbm schrieb:
    Mein Ziel ist, einen Datensatz in eine MySQL Tabelle zu schreiben, die dann über auto_increment eine ID bekommt, was soweit auch funktioniert hat. Diese ID sollte dann direkt nach der Erstellung ausgelesen werden und in eine zweite Tabelle geschrieben werden.

    Mir fällt kein Anwendungsfall ein wo so etwas sinnvoll wäre. Außerdem widerspricht es der Normalisierung.
    Du kannst die IDs ja jederzeit in der "Originaltabelle" nachschlagen, wofür auch immer du sie dann verwendest.

    Oder sollte die ID in der zweiten Tabelle ein Foreign Key sein?
    Auch dann wäre es so nicht sinnvoll.

    Und falls es wirklich einen Anwendungfall für sowas geben sollte, dann wäre das wohl besser per PROCEDURE mit einem TRIGGER gelöst. ;)

    Beitrag zuletzt geändert: 9.9.2012 23:21:28 von philippkern
  15. :) tut mir ja sehr leid das ich mich wiederhole, nur bekomme ich wiederholt auf meine frage keine passende antwort, ich verstehe einfach den sinn der anwendung nicht, so wie du oder wohl jeder andere der hier versucht zu helfen!

    @TE nochmals...

    Was willst du genau?

    Weist du überhaupt wofür bzw was die Datenbankverbindung ist?

    Wenn du wie ich eben nocheinmal quergelesen eine anderes php script einbringen willst lautet die anweisung
    if(!$deinedbverbindung)include(deineerror.php);
    , wenn du willst das sozusagen umgeleitet wird, komplett auf eine andere datei, könntest du ein
    exit();
    oder wenns sein muss auch ein
    die()
    danach setzen. würde ich aber generell garnicht verwenden. du kannst es generell durch ein einfaches
    print();
    oder
    echo();
    ersetzen.

    generell bindet man aber keine datei ein, falls es keine datenbankverbidnung gibt. das ist eher so ein hinweiß für dich! im normalfall besteht die datenbank verbindung immer, außer man hat einen programmierfehler(was du dann warscheinlich in den nächsten min ausgebessert hast), oder der server hat ein broblem. für diesen fall reicht ein hinweiß an dich und ggf. eine benachrichtigung des users, falls er deswegen eingeschrenkt ist. dies kannst du einfach über ein error feld realiseren, zB ein DIV oder LAYER oder oder oder dieses kannst du in eine if abfrage setzen
    if(isset($error)
     {echo '<div id="error">&nbsp</div>'; }

    den div error kannste in deiner css datei dann aussehen lassen wie du willst, du könntest auch die ganze seite mit einem zweiten div ausgrauen lassen, oder es einfach dezent in den maincountent zu schreiben. falls du fragen über css hast, gibt es dort vieletutorials, es ist wirklich nicht schwer.
    das schöne ist, wenn du eine klare vorstellung hast kannst du es meist immer reallisieren.


    @@lima-city: was macht ihr derzeit mit den sever? das ist ja unglaublich langsam
    Formel: *edit: jetzt wieder schnell :)

    Beitrag zuletzt geändert: 10.9.2012 1:47:43 von dishonored
  16. b**********m

    Ich hoffe ich hab dich richtig verstanden. Bin zwar nicht so das Ass aber du könntest den mysql_error() als Ausgangspunkt nehmen und für alle Möglichen Fehlermeldungen eine eigene Variable speichern. In der DB oder hardcoded und diese bei einem etwaigen Fehler dazu ausgeben lassen
    if($fehler == true) { echo "Fehlermeldung..." . $err_msg }


    lg manuel
  17. Autor dieses Themas

    thwbm

    thwbm hat kostenlosen Webspace.

    An dishonored (1. Post):
    dishonored schrieb:
    das erste hat doch garnichts mit dem zweiten zu tun?

    Sorry, ich hab irgendwie die hälfte vergessen, mein Fehler. Ich verfollständige und korrigiere mich mal:
    Mein Ziel ist, einen Datensatz in eine MySQL Tabelle zu schreiben, die dann über auto_increment eine ID bekommt, was soweit auch funktioniert hat. Diese ID sollte dann direkt nach der Erstellung ausgelesen werden und in eine zweite Tabelle geschrieben werden, was ja aber nicht möglich wäre, wenn die erste Verbindung in die Hose gegeangen wäre. Wenn also bei der ersten Verbindung etwas schief gelaufen ist, soll eine Variabel (ich nenne sie jetz einfach mal "$Fehler") einen bestimmten Wert bekommen, der über eine einfache
    if
    Abfrage verhindert, dass die zweite Verbindung hergestellt wird. Sollte aber nur die zweite Verbindung fehlgeschlagen sein, muss $Fehler einen anderen Wert bekommen, der dann den ersten (schon eingetragenen) Datensatz wieder löscht, aber das:
    dishonored schrieb:
    wie eine variable ein wert bekommt bei keiner db connection haben wir dir hier desöfteren gezeigt
    $verbindung = mysql_connect(); // oder ähnliches 
    if (!$verbindung) { $varriable = "wert"; }


    habe ich jetzt verstanden. Danke.
    Nochmal wegen dem "SELLECT" und "INSERT": ich weis, wie ich einen Datensatz abfrage und wie ich einen hineinschreib.
    philippkern schrieb:
    Du kannst die IDs ja jederzeit in der "Originaltabelle" nachschlagen, wofür auch immer du sie dann verwendest.

    Genau das habe ich ja vor, ich will die Daten in der "Originaltabelle" auslesen und in eine zweite hineinschreiben.
    philippkern schrieb:
    Und falls es wirklich einen Anwendungfall für sowas geben sollte, dann wäre das wohl besser per PROCEDURE mit einem TRIGGER gelöst. ;)

    Cih hab grad mal ein bischen gegoogelt, aber nichts verständliches gefunden. Also habe ich zwei fragen
    1.Was ist PROCEDURE?
    2. Was ist TRIGGER ?
    An dishonored (2.Post):
    dishonored schrieb:
    Was willst du genau?

    Weist du überhaupt wofür bzw was die Datenbankverbindung ist?

    Zuerst das zweite:
    Ja, ich weiss was eine Datenbank ist, wie man sie befüllt, wozu man sie befüllt und wie und wozu man eine Verbindung zu ihr aufbaut.
    Jetzt das erste:
    Ich habe Eingabefelder (eMail, Passwort, Benutzername) die in einer Tabelle gespeichert werden, und über auto_increment eine ID bekommen. In die zweite Tabelle soll jetzt das Inventar, das über die Benutzer ID aus der ersten Tabelle identifiziert werden soll.
    Also in etwa so:
    Tabelle 1:
    _id_ |_name_|_mail________|_passwort_
    _1__|_abc___|_abc@123.de_|_123456__
    _2__|_xyz____|_xyz@123.de_|_abc123__

    Tabelle 2:
    _id__|_Gegenstand1_| Gegenstand2_|_Gegenstand3_
    __1_|______5______|_______9____|______12_____
    __2_|______0______|_______11___|______ 2______
    An buergerforum:
    Ja, du hast mich richtig verstanden, aber fast das gleiche wurde schon genannt.

    Beitrag zuletzt geändert: 10.9.2012 18:14:58 von thwbm
  18. thwbm schrieb:
    philippkern schrieb:
    Und falls es wirklich einen Anwendungfall für sowas geben sollte, dann wäre das wohl besser per PROCEDURE mit einem TRIGGER gelöst. ;)

    Cih hab grad mal ein bischen gegoogelt, aber nichts verständliches gefunden. Also habe ich zwei fragen
    1.Was ist PROCEDURE?
    2. Was ist TRIGGER ?

    Dann lassen wir das lieber.
    Außerdem hab ich grad gesehen dass auf lima-city PROCEDURE und TRIGGER eh nicht erlaubt sind.
    Offtopic: Auf meinen alten Datenbank die ich hier ersteigert habe, habe ich noch das Recht welche zu erstellen. :slant:

    So ich hab dir mal was gecodet, sogar kommentiert :D:
    <?php
    	// Datenbankverbindung aufbauen, verwende mysqli oder PDO_MySQL anstatt mysql
    	$db = new mysqli("server", "benutzername", "passwort", "datenbank_name");
    
    	// prüfen ob Verbindung erfolgreich
    	if(!$mysqli->connect_error)
    	{
    		// SQL-Befehle nicht automatisch in der Datenbank "festschreiben" lassen (dazu muss die Datenbank InnoDB verwenden!!)
    		$db->autocommit(false);
    
    		// SQL-Befehle ausführen ...
    		if($db->query("INSERT INTO tabelle1 VALUES (NULL, 'name', 'mail', 'passwort')") === true &&
    			$db->query("INSERT INTO tabelle2 VALUES (LAST_INSERT_ID(), 'Gegenstand1', 'Gegenstand2', 'Gegenstand3')") === true)
    		{
    			// ... und festschreiben falls alle erfolgreich waren ...
    			$db->commit();
    		}
    		else
    		{
    			// ... oder wieder zurück zum Anfang
    			$db->rollback();
    			
    			echo 'Konnte nichts einfuegen!';
    		}
    		
    		// Datenbankverbindung schließen
    		$db->close();
    	}
    	else
    	{
    		// Meldung bei Verbindungsfehler ausgeben
    		echo 'Verbindungsfehler (' . $mysqli->connect_errno . ') '. $mysqli->connect_error);
    	}
    
    ?>

    Damit das so funktioniert (hoffentlich), müss deine Datenbanktabellen als Engine InnoDB verwenden!
    Lässt sich leicht über google herausfinden was das ist bzw. noch wichtiger wie man sie verwendet.

    Und falls was von den PHP-Befehlen unklar ist, geh es einfach Schritt für Schritt durch und sieh dir jeweils die Dokumentation zu den einzelnen Funktionen auf php.net an.

    Bei Fragen kannst ja gerne Fragen.
  19. Autor dieses Themas

    thwbm

    thwbm hat kostenlosen Webspace.

    An philippkern:
    Das sieht sehr vielversprechend aus und ich kann soweit auch alles nachvollziehen, aber ich habe schon selber eine eigene Lösung für das Problem gefunden. Trotzdem vielen Dank an dich und an alle anderen, die mir gehofen haben oder es versucht haben.
  20. Kein Problem.
    Und nicht vergessen etwas gegen SQL-Injections einzubauen!
  21. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    thwbm schrieb:
    ... aber ich habe schon selber eine eigene Lösung für das Problem gefunden.
    Die Lösung würde sicher einige hier interessieren... ;-)

    philippkern schrieb:
    Und nicht vergessen etwas gegen SQL-Injections einzubauen!
    Das wurde schon mal erwähnt.
  22. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!