PHP or die variabel festlegen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
benutzername
code
dank
datenbank
datensatz
eintrag
email
fehler
fehlermeldung
frage
http
index
problem
server
tabelle
trigger
url
verbindung
zweite tabelle
-
Hallo, vielleicht könnt ihr mir Weiterhelfen, mein Problem:
Ich möchte eine Variabel durch ein
festlegen, also in etwa so, nur halt so, dass es funktioniert:or die
<?php $verbindung = mysql_connect("server", "benutzername", "passwort") or die $Fehlermeldung = 1 ("Fehler"); ?>
Danke im Vorraus für alle Antworten,
THWBM -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
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 -
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 -
@ 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
nutzlos würde, auchnoch ein warning angezeigt würde, was du aber bei komplettem error log usw abschalfen würdest mit$error[$code]
.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 -
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? -
thwbm schrieb:
Ja, da das Script dann nicht durch
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?
im Fehlerfall abgebrochen wird.die()
Was hättest du von einer definierten Variable, wenn dann das Script abgebrochen wird? Ich verstehe den Sinn hinter deinem Vorhaben nicht... -
Danke hackyourlife für die Antwort, denn dann lasse ich die
Anweisung weg. Meine Idee, die dahintersteckt war, dass ich bei einem Fehler (also überor die
) eine if abfrage starte, die dann nicht nur eine Fehlermeldung anzeigt, sondern ein weiters PHP script startet.or die
PS: wie machst du das eigentlich, dass noch deinen Codes kein Zeilenumabruch kommt? -
thwbm schrieb:
PS: wie machst du das eigentlich, dass noch deinen Codes kein Zeilenumabruch kommt?
bei dem code BB den Parameter
einfügen=inline
[ 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
finde ich trotzdem besserif (!$verbindung) { ... }
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 -
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 -
Danke für die weiteren Antworten,
an webguide:
das
habe ich jetzt verstanden und ich glaube mit der Funktion kann ich auch etwas anfangen.code=inline
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
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?or die
-
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
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?or die
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
einfügen mitSELECT
... aber bitte erkläre doch was das ganze soll... wofür das ganze ist...INSERT
-
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.
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 -
:) 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
, wenn du willst das sozusagen umgeleitet wird, komplett auf eine andere datei, könntest du einif(!$deinedbverbindung)include(deineerror.php);
oder wenns sein muss auch einexit();
danach setzen. würde ich aber generell garnicht verwenden. du kannst es generell durch ein einfachesdie()
oderprint();
ersetzen.echo();
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"> </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
Beitrag zuletzt geändert: 10.9.2012 1:47:43 von dishonored -
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 -
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
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:if
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 -
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.
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. -
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. -
thwbm schrieb:
Die Lösung würde sicher einige hier interessieren...
... aber ich habe schon selber eine eigene Lösung für das Problem gefunden.
philippkern schrieb:
Das wurde schon mal erwähnt.
Und nicht vergessen etwas gegen SQL-Injections einzubauen! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage