Lass dir endlich die Queries ausgeben!
php erkennt leeres feld nicht?
Einklappen
X
-
-
Die erste Zeile zieht einen Datensatz mit gewünschtem Firmenschalter-Wert aus der DB. Gibt es keinen solchen Datensatz, gibt queryRow() dennoch etwas zurück. Wahrscheinlich ist das NULL, könnte aber auch FALSE oder ein leeres Array sein.
Du kannst das herausfinden, indem du im WHERE mal 1 = 0 einbaust und dann ein var_dump($mandant) machst.
Um herauszufinden ob die If-Bedingung in diesem Fall wahr wird, kannst du im If-Block ein die('im IF') einsetzen.
Noch etwas: Die Logik dieses Codeschnipsels ist sehr fragwürdig. Wenn der Firmenschalter passt, wird die ID des Mandanten zurückgegeben. Wenn sie nicht passt, wird anhand eines anderen Kriteriums ein Mandant bestimmt. Aber was dann? Sollte dann nicht auch dessen ID zurückgegeben werden?Zuletzt geändert von onemorenerd; 08.07.2009, 20:05.
Kommentar
-
@ unset, muss dich leider enttäuschen, aber ich hab 0 Ahnung von php, ausserdem hab ich den code zu hause eh nicht testen.
danke onemorenerd, auf die bestätigung habe ich gewartet.
d.h. also wenn das datenbankfeld leer ist, gibt queryrow doch irgendeinen wert mit...somit kommt die if abfrage erst garnicht zum zug, wenn ich das richtig verstanden habe.
danke schonmal, ich werde das morgen am telefon mit meinem Kollegen klären.
Kommentar
-
Zitat von j4n Beitrag anzeigen@ unset, muss dich leider enttäuschen, aber ich hab 0 Ahnung von php, ausserdem hab ich den code zu hause eh nicht testen.
Ohne zu wissen, was in deinen Queries steht und was deine Klassen zurückgeben, ist das hier ein Ratespiel.
Kommentar
-
Zitat von j4n Beitrag anzeigend.h. also wenn das datenbankfeld leer ist, gibt queryrow doch irgendeinen wert mit...somit kommt die if abfrage erst garnicht zum zug
Ob sie wahr wird und deshalb der If-Block betreten wird, hängt davon ab was $mandant enthält und wie PHP das automatisch zu einem Boolean castet.
Kommentar
-
@ unset, ich progarmmiere auch erst seit bischen mehr als 2 monaten vb, komme da auch gut voran. dass es nicht nur bei vb bleiben wird ist klar, aber für den anfang kann ich auch nicht 5 programmiersprachen gleichzeitig lernen.
und das man förmlich bleiben und man mir trotz dem helfen kann zeigen hier andere
danke onemorenerd..ich werde das morgen abklären, kannst du mir als abschluss in etwa sagen, was drin stehen darf und was nicht?
Bedanke mich an der Stelle an alle hilfbereiten und wünsch allen noch einen schönen Abend.
Gruß Jan.
Kommentar
-
Zitat von j4n Beitrag anzeigen@ unset, ich progarmmiere auch erst seit bischen mehr als 2 monaten vb, komme da auch gut voran. dass es nicht nur bei vb bleiben wird ist klar, aber für den anfang kann ich auch nicht 5 programmiersprachen gleichzeitig lernen.
Gerne etwas ausführlicher:
Lass dir den entscheidenen Query ausgeben. Lass dir das Ergebnis ausgeben:
PHP-Code:$query = 'SELECT * FROM kundenlizenzen WHERE Firmenschalter = \''. $this->get['f'] .'\'';
var_dump($query);
$mandant = $db->queryRow($query);
var_dump($mandant);
if(!$mandant) {
$mandant = $db->queryRow('SELECT * FROM kundenlizenzen WHERE FB1 = \''. $this->get['fb1'] .'\'');
} else {
return $mandant['ID'];
Damit sollte dir genügend Hilfe zur Selbsthilfe gegeben worden sein.
Kommentar
-
Zitat von onemorenerd Beitrag anzeigen
Noch etwas: Die Logik dieses Codeschnipsels ist sehr fragwürdig. Wenn der Firmenschalter passt, wird die ID des Mandanten zurückgegeben. Wenn sie nicht passt, wird anhand eines anderen Kriteriums ein Mandant bestimmt. Aber was dann? Sollte dann nicht auch dessen ID zurückgegeben werden?
PHP-Code:function check_mandant()
{
$db = &singleton('database');
// Mandant anhand des Firmenschalter suchen
$mandant = $db->queryRow('SELECT * FROM kundenlizenzen WHERE Firmenschalter = \''. $this->get['f'] .'\'');
if(!$mandant) {
$mandant = $db->queryRow('SELECT * FROM kundenlizenzen WHERE FB1 = \''. $this->get['fb1'] .'\'');
} else {
return $mandant['ID'];
}
if(!$mandant) {
$ssql = 'INSERT INTO kundenlizenzen (FB1, FB2, PLZ, Firmenschalter, AngelegtAm) '.
'VALUES (\''.$this->get['fb1'].'\', \''.$this->get['fb2'].'\', \''.$this->get['p'].'\', \''.$this->get['f'].'\', NOW())';
$db->query($ssql);
$id = $db->insertId();
$this->log($this->user_id, sprintf($this->config['msg_mandant_not_found'], $this->get['fb1'], $id));
return $id;
} else {
return $mandant['ID'];
}
}
Kommentar
-
Vertausche mal if- und else-Zweig und negiere dementsprechend die if-Bedingung. Dann brauchst du auf einmal das else gar nicht mehr ...
PHP-Code:// Auswahl nach Firmenschalter
$mandant = ...;
if ($mandant) {
// hat geklappt, wir sind fertig
return $mandant['id'];
}
// Auswahl nach FB1
$mandant = ...;
if ($mandant) {
// hat geklappt, wir sind fertig
return $mandant['id'];
}
// neu anlegen
...
return $id;
Eine andere Variante wäre verschachteltes if-else.
PHP-Code:// Auswahl nach Firmenschalter
$mandant = ...;
if (!$mandant) {
// hat nicht geklappt, versuche Auswahl nach FB1
$mandant = ...;
if (!$mandant) {
// hat nicht geklappt, neu anlegen
...
return $id;
}
}
return $mandant['id'];
Zuletzt geändert von onemorenerd; 09.07.2009, 00:00.
Kommentar
-
PHP-Code:function check_mandant()
{
$db = &singleton('database');
// Mandant anhand des Firmenschalter suchen
$fschalter = str_replace(" ", "", $this->get['f']);
if(!empty ($fschalter) && strlen($fschalter) > 0){
$mandant = $db->queryRow('SELECT * FROM kundenlizenzen WHERE Firmenschalter = \''.$fschalter.'\' ');
}else{
$mandant = false;
}
if(!$mandant) {
if(!empty($this->get['fb1'])){
$mandant = $db->queryRow('SELECT * FROM kundenlizenzen WHERE FB1 = \''. $this->get['fb1'] .'\'');
}
} else {
return $mandant['ID'];
}
if(!$mandant) {
$ssql = 'INSERT INTO kundenlizenzen (FB1, FB2, PLZ, Firmenschalter, AngelegtAm) '.
'VALUES (\''.$this->get['fb1'].'\', \''.$this->get['fb2'].'\', \''.$this->get['p'].'\', \''.$this->get['f'].'\', NOW())';
$db->query($ssql);
$id = $db->insertId();
$this->log($this->user_id, sprintf($this->config['msg_mandant_not_found'], $this->get['fb1'], $id));
return $id;
} else {
return $mandant['ID'];
}
}
...habs gelöst!
in der Datenbank wurde tasächlich immer ein leerzeichen mitgegeben, warum auch immer.
Danke an alle für eure Mithilfe.
Grüße Jan
Kommentar
Kommentar