CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
13.12.2003, 19:18:37
|
Anfänger
|
|
Registriert seit: Aug 2003
Beiträge: 83
|
|
Ein Problem mit einer function (Diesmal ist es wirklich ernst^^")
Also, ich habe eine eigene Funktion gecodet, mit der mir mysql-Abfragen leichter fallen sollen.
Hier die Funktion:
PHP-Code:
function mysql_action($action,$sql) {
if($action == 'connect') {
mysql_connect($mysql_host,$mysql_user,$mysql_pass) OR die("Fehler :".mysql_error());
mysql_select_db($mysql_db) OR die("Fehler :".mysql_error());
}
elseif($action == 'close') {
mysql_close(mysql_action('connect')) OR die("Fehler :".mysql_error());
}
elseif($action == 'select') {
$result = mysql_query($sql) OR die("Fehler :".mysql_error());
$row = mysql_fetch_assoc($result) OR die("Fehler :".mysql_error());
}
elseif($action == 'own') {
$result = mysql_query($sql) OR die("Fehler :".mysql_error());
}
else {
mysql_query($sql) OR die("Fehler :".mysql_error());
}
}
So nun, wenn ich z.B. mich mit der Datenbank verbinden möchte erkennt er nichts (Ist so, als ob man die config.php vergessen hätte :-( )
So nun will ich also mit meinen Script etwas aufrufen:
PHP-Code:
//Hier ist $sql
mysql_action('select',$sql);
Doch gibt er mir folgende Fehlermeldung herraus:
Code:
Warning: Missing argument 2 for mysql_action() in /home/www/wev272/html/test/function.php on line 2
Notice: Undefined variable: mysql_host in /home/www/wev272/html/test/function.php on line 4
Notice: Undefined variable: mysql_user in /home/www/wev272/html/test/function.php on line 4
Notice: Undefined variable: mysql_pass in /home/www/wev272/html/test/function.php on line 4
Woran liegt dieses?
|
13.12.2003, 19:48:11
|
Junior Member
|
|
Registriert seit: Aug 2003
Ort: Fürstenau (Uckermark, Land Brandenburg)
Beiträge: 259
|
|
$mysql_host
$mysql_user
$mysql_pass
$mysql_db
stehen in der Funktion nicht zur Verfügung bzw. gibt es nicht!
----
PS: mach doch für das ganze mysql eine Classe.
Geändert von René_M (13.12.2003 um 19:50:36 Uhr)
|
13.12.2003, 21:14:15
|
Senior Member
|
|
Registriert seit: Apr 2003
Alter: 57
Beiträge: 1.236
|
|
|
14.12.2003, 09:22:05
|
Member
|
|
Registriert seit: Apr 2002
Beiträge: 821
|
|
'global' ist da eine schlechte Lösung. Übergib die Werte lieber als Parameter, und zwar am besten als 2. Parameter, wo du jetzt den SQL-Query übergibs.
PHP-Code:
<?php
function mysql_action($action, $options = array())
{
if(!is_array($options)) {
trigger_error('Zweiter Parameter ist kein Array', E_USER_ERROR);
return false;
}
switch($action) {
case 'connect':
if(count($options) < 4) {
trigger_error('Zweiter Parameter muss mindestens 4 Elemente besitzen', E_USER_ERROR);
return false;
}
if(!isset($options['host'],
$options['user'],
$options['pass'],
$options['database'])) {
trigger_error('Nötige Optionen zum Verbinden nicht vorhanden', E_USER_ERROR);
return false;
}
$conn = mysql_connect($options['host'], $options['user'], $options['pass']);
if(!$conn) {
trigger_error('Konnte keine Verbindung zum Server aufbauen: '.mysql_error(), E_USER_ERROR);
return false;
}
if(!mysql_select_db($options['database'], $conn)) {
trigger_error('Konnte die Datenbank nicht auswählen: '.mysql_error(), E_USER_ERROR);
return false;
}
return $conn;
break;
case 'close':
if(isset($options['link'])) {
$close = mysql_close($options['link']) {
} else {
$close = mysql_close();
}
if(!$close) {
trigger_error('Konnte die Verbindung nicht trennen: '.mysql_error(), E_USER_ERROR);
return false;
}
return true;
break;
case 'select':
if(!isset($options['sql'])) {
trigger_error('Es wurde kein SQL-Query übergeben', E_USER_ERROR);
return false;
}
$result = mysql_query($options['sql']);
if(!$result) {
trigger_error('SQL-Query ist Fehlerhaft: '.mysql_error().".n".
'(Query war: '.$options['sql'].')', E_USER_ERROR);
return false;
}
$ret_array = array();
while($row = mysql_fetch_assoc($result)) {
$ret_array[] = $row;
}
return $ret_array;
break;
default:
if(!isset($options['sql'])) {
trigger_error('Es wurde kein SQL-Query übergeben', E_USER_ERROR);
return false;
}
$result = mysql_query($options['sql']);
if(!$result) {
trigger_error('SQL-Query ist Fehlerhaft: '.mysql_error().".n".
'(Query war: '.$options['sql'].')', E_USER_ERROR);
return false;
}
return $result;
break;
}
}
?>
|
14.12.2003, 11:52:39
|
Senior Member
|
|
Registriert seit: Apr 2003
Alter: 57
Beiträge: 1.236
|
|
@Progman
Wann ist "global" eine gute Lösung?
|
14.12.2003, 13:35:20
|
Member
|
|
Registriert seit: Apr 2002
Beiträge: 821
|
|
spontan würde ich sagen, "bei keiner". Aber es gibt Fälle wo es nicht anders geht, wenn z.B. eine Funktion per callback aufgerufen wird, wo man keine chance hat Parameter zu übergeben.
$object->call_method('foobar');
Bei solchen Aufrufen hoffe ich immer, dass ein neuer Parameter für die Parameter hinzukommt oder solche Funktionen anders definiert werden. Aber bei sowas 'einfaches' braucht man kein global.
|
14.12.2003, 20:08:25
|
Senior Member
|
|
Registriert seit: Apr 2003
Alter: 57
Beiträge: 1.236
|
|
[OT]
@Progman
Merci für Deine Antwort.
Verwendest Du "oft" OOP in PHP?
[/OT]
|
14.12.2003, 20:57:33
|
Junior Member
|
|
Registriert seit: Jul 2003
Beiträge: 182
|
|
Zitat:
Original geschrieben von Progman
spontan würde ich sagen, "bei keiner". Aber es gibt Fälle wo es nicht anders geht, wenn z.B. eine Funktion per callback aufgerufen wird, wo man keine chance hat Parameter zu übergeben.
$object->call_method('foobar');
|
Wie meinen? Ich kann doch foobar() locker noch Parameter uebergeben.
|
14.12.2003, 21:47:48
|
Anfänger
|
|
Registriert seit: Aug 2003
Beiträge: 83
|
|
Ich will die Unterhaltung nicht stören, doch habe ich noch ein Problem mit dem ganzen
Ich habe dies jetzt alles nach Progmans Code gemacht (ich habe mich dran gehalten)
siehe:
PHP-Code:
function mysql_action($action,$sql) {
switch($action) {
case 'connect':
mysql_connect($sql['host'],$sql['user'],$sql['pass']) OR die("Fehler :".mysql_error());
mysql_select_db($sql['db']) OR die("Fehler :".mysql_error());
return true;
break;
case 'close':
mysql_close($sql['connect']) OR die("Fehler :".mysql_error());
return true;
break;
case 'select':
$result = mysql_query($sql) OR die("Fehler :".mysql_error());
$ret_array = array();
while($row = mysql_fetch_assoc($result)) {
$ret_array[] = $row;
}
return $ret_array;
break;
case 'own':
$result = mysql_query($sql) OR die("Fehler :".mysql_error());
return true;
break;
default:
mysql_query($sql) OR die("Fehler :".mysql_error());
return true;
break;
}
}
Wenn ich jetzt aber etwas selecten möchte gibt er folgende Fehlermeldung raus:
Code:
Notice: Undefined variable: row in /home/www/wev272/html/test/count.php on line 66
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/www/wev272/html/test/function.php on line 16
Also die Notice ist zum Beispiel '$row['IP']'.
|
18.12.2003, 20:31:56
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
Re: Ich will die Unterhaltung nicht stören, doch habe ich noch ein Problem mit dem ganzen
Zitat:
Original geschrieben von Slaughter
[B]Ich habe dies jetzt alles nach Progmans Code gemacht (ich habe mich dran gehalten).
|
Nein, das hast Du nicht. $sql muß ein array sein.
PHP-Code:
case 'select':
$result = mysql_query($sql) OR die("Fehler :".mysql_error());
Das verursacht aber einen SQL Fehler, weil mysql_query() einen string und kein Array erwartet.
PHP-Code:
$ret_array = array();
while($row = mysql_fetch_assoc($result)) {
$ret_array[] = $row;
}
Da Du nicht prüfst, ob Deine Abfrage ein gültiges Ergebnis hat,
ergeben sich zwangsläufig die Fehlermeldungen:
Zitat:
Notice: Undefined variable: row in /home/www/wev272/html/test/count.php on line 66
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/www/wev272/html/test/function.php on line 16
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 08:40:02 Uhr.
|