php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.07.2007, 22:59  
Gast
 
Beiträge: n/a
Standard Fehler auf Server waren nicht auf PC

Hallo Leute!

Warum kommt es zum Fehlermeldungen auf dem Server, die bei mir auf dem Rechner nicht waren. Es lief alles so schön rund.


Code:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/htdocs/web18/html/serv/reg.lies.php on line 25

Notice: Undefined variable: id in /home/htdocs/web18/html/serv/reg.lies.php on line 45
while steht hier in Zeile 25
PHP-Code:
$da=array("name","vname","email","id","pwd");
$sql=makeSelect($da,"service","pwd='$pwd' and name='$name'");
$dbh=mysql_query($sql);
while(
$zeile=mysql_fetch_array($dbh))
{
?> 
Die if-Zeile ist hier Nr.45
PHP-Code:
<?php
$email
$zeile["email"];
$name$zeile["name"];
$vname$zeile["vname"];
$id$zeile["id"];
}


if (
$id '10000')
    {

?>

Wo darf ich denn jetzt die Fehler suchen?


Der Antonius aus Riga
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 07.07.2007, 23:42  
Neuer Benutzer
 
Registriert seit: 28.05.2007
Beiträge: 26
badaxx
Standard

mysql_fetch_array() liefert einen Fehler zurück, wenn die MySQL-Query nicht ausgeführt werden konnte. Lass dir nach dem Ausführen der MySQL-Anfrage mysql_error() ausgeben, um zu sehen, wo das Problem ist.

Die Notizen kannst du mit error_reporting(E_ALL ^ E_NOTICE) abschalten.

Gruß,
badaxx
badaxx ist offline  
Alt 08.07.2007, 01:15  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Das wichtigste hat badaxx ja schon geschrieben.
(Wie hast Du eigentlich 213 eigene Beiträge geschafft, ohne hundertmal über die Frage nach "not a valid MySQL resource" zu stolpern?)

Generell musst Du selbstverständlich immer damit rechnen, dass eine SQL-Abfrage einfach mal keinen Datensatz liefert. Daher könntest Du evtl. nie in die while-Schleife reinlaufen und damit ist $id nicht initialisiert.

Was soll denn eigentlich makeSelect() anstellen? Auf den ersten Blick sieht es aus, als würde da aus dem Array und den Parametern der Query-String auf recht triviale Weise gebastelt. Nur dass es umständlicher ist.
Kann natürlich auch anders sein.

Und was auf den ersten Blick auch ganz furchtbar aussieht, ist ($id > '10000')

Das ist eine Zahl. Und eine Zahl ist eine Zahl und keine Zeichenkette. Damit haben die '' dort absolut nichts verloren. Ist nur eine schrecklich dumme Angewohntheit von PHP, jeden Unsinn zu akzeptieren.

Sollte $id keine Zahl sein, so ist die Zeile noch sinnloser.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 08.07.2007, 10:04  
Gast
 
Beiträge: n/a
Standard

Moin und Hi Gerhard... so liest man sich wieder...

Ja ich habe schon 213 Beiträge in drei Jahren geschrieben. Das sind 6 Stk./Monat oder anders gesagt alle paar Monate mal wieder was neues und alle paar Monate mehr mal was komplizierteres, wo ich hier einige oder eine Frage stelle.
Es ist zwar nicht alles weg aus dem Kopf, was ich irgendwann mal gefragt habe oder ich schaue auch häufig meine alten Fragen und Antworten nochmal durch.

Die Fehler gestern waren auf dem PC nicht da weil ich die Version von XAMPP mit PHP 5.1.2 zum Testen laufen hatte, auf meinem Server aber nur 4.3.4 läuft. Wenn ich hier XAMPP mit 4.3.2 laufen lasse, bekomme ich auch die Feher, die auf dem Server Online sind.

makeSelect() ruft eine Funktion in der eingebunden 'new.funclib.php' auf:

Die Funktion:
PHP-Code:
function makeSelect($a,$table,$bedingung)
{
$mitte=implode (",",$a);
$sql="SELECT $mitte FROM $table WHERE $bedingung";
return 
$sql;

Habe übrigens noch nichts mehr ans Laufen bekommen. Es kann auch an einer anderen Version von MySQL liegen. Denn ich mußte auch hier von 5 auf 4 beim Export reduzieren.

Guten Tag noch
 
Alt 08.07.2007, 11:03  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von ah-tonius
Die Fehler gestern waren auf dem PC nicht da weil ich die Version von XAMPP mit PHP 5.1.2 zum Testen laufen hatte, auf meinem Server aber nur 4.3.4 läuft. Wenn ich hier XAMPP mit 4.3.2 laufen lasse, bekomme ich auch die Feher, die auf dem Server Online sind.

makeSelect() ruft eine Funktion in der eingebunden 'new.funclib.php' auf:

Die Funktion:
PHP-Code:
function makeSelect($a,$table,$bedingung)
{
$mitte=implode (",",$a);
$sql="SELECT $mitte FROM $table WHERE $bedingung";
return 
$sql;

Genau so hab ich sie mir vorgestellt.
Das Vorbereiten des Arrays und der Aufruf der Funktion ist für mich umständlicher als den String gleich selber zu basteln. Ist aber egal.

Bei dieser trivialen Abfrage kann es doch schlecht an der MySQL-Version liegen. Vermutlich hast Du eher eine winzige Abweichung im Tabellen-Layout auf beiden Servern.

Aber bevor Du die mysql_error()-Augabe zeigst ist jede weitere Antwort nur reine Spekulation.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 08.07.2007, 12:51  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von Der_Gerhard
Genau so hab ich sie mir vorgestellt.
Das Vorbereiten des Arrays und der Aufruf der Funktion ist für mich umständlicher als den String gleich selber zu basteln.
Zergling-new ist offline  
Alt 08.07.2007, 15:07  
Gast
 
Beiträge: n/a
Standard

Hi Leute es waren 2 Sachen...

Die erste war, dass ich in der Tabelle der Datenbank den vorhandenen Eintrag gelöscht und einen neuen manuall eingegeben habe.
Der Autoeintrag bei der ID wurde beim Import z.B. nicht übernommen.
Danach lief alles auf dem PC unter PHP4xx

Aber auf dem Server gabs noch Probleme.
Will ich eigentlich garnicht sagen.....Ich hatte bei dem Taellennamen einen Fehler

Melde mich mal irgendwann wieder mit komischen Fragen.

Danke...mal wieder

Antonius

Wenn ihr mal Tipps braucht, weils nach Lettland gehen soll. Dann einfach mal melden.
 
Alt 08.07.2007, 18:33  
Gast
 
Beiträge: n/a
Standard

Schade, bei der Prüfung ob die id größer wie 1000 ist kommt es zur Fehlermeldung.
Denn wenn die id noch garnicht da ist, kann sie nicht ausgelesen werden.
Dann ist die id wieder nicht definiert.

Wie kann ich zum Beispiel durch IF/ELSE einen schon angemeldeten User und einen noch nicht angemeldeten User trennen.

Die ID wird bei der Anmeldung zugeteilt, die hat also der noch nicht angemeldete User noch nicht und daher kommt es zum Fehler.

Ich müßte also nur prüfen ob im Feld ID was steht und wenn dort nichts seht den User abweisen.
Bloß wie gehts....? :wink:

Bei der Anmeldung habe ich auch Zeit, Datum und IP gespeichert.

Oder wie gehts anders.
 
Alt 08.07.2007, 18:51  
Gast
 
Beiträge: n/a
Standard

Ach ist Dussel..

Habe jetzt einfach den Namen 'inta' dazu gemacht, den Inhalt von id zu übernehmen.
Vorher habe ich inta 3 zugewiesen. Wenn von id nichts kommt, steht eine 3 zur Verfügung :P

Guten Abend noch.

Antonius - Aber gerade hat es ein Gewitter gegeben... ein Wärmegewitter.
 
Alt 09.07.2007, 07:59  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von ah-tonius
Aber auf dem Server gabs noch Probleme.
Will ich eigentlich garnicht sagen.....Ich hatte bei dem Taellennamen einen Fehler Embarassed
Ich hab ja geschrieben, dass es am Tabellenlayout liegen dürfte....

Zitat:
Zitat von ah-tonius
Schade, bei der Prüfung ob die id größer wie 1000 ist kommt es zur Fehlermeldung.
Denn wenn die id noch garnicht da ist, kann sie nicht ausgelesen werden.
Dann ist die id wieder nicht definiert.
Das habe ich ja auch in meinem ersten Posting geschrieben.

Zitat:
Zitat von ah-tonius
Wie kann ich zum Beispiel durch IF/ELSE einen schon angemeldeten User und einen noch nicht angemeldeten User trennen.
Na extrem trivial.
Da Du ja hoffentlich nur maximal einen Datensatz in der Tabelle hast, auf den die Bedingung zutrifft, ist while (mysql_fetch....) reichlich sinnlos.
Mach ein if draus und alles wird gut.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] WAMP unter Windows 2000 Server oder Windows 2003 Server Mecronomecon Server, Hosting und Workstations 3 18.06.2008 09:15
Frage zu Windows Server 2003 b++ Off-Topic Diskussionen 1 03.03.2006 09:41
Lokales MySQL mit Microsoft SQL Server benpicco Datenbanken 4 06.02.2006 16:20
Connecten von einem anderen Server b++ Datenbanken 3 29.01.2006 20:38
Sql server auf root server starten? PHP Tipps 2006 1 18.01.2006 17:59
[Erledigt] verschiedene Versionen auf einem W2K3 Server betreiben PHP Tipps 2006 2 13.01.2006 17:39
mail() versucht die Mails als wwwrun an den SMTP Server zu l Server, Hosting und Workstations 3 15.06.2005 11:25
[Erledigt] Funktionssammlung auf externen Server auslagern PHP Tipps 2005 20 29.05.2005 14:04
fehler im script oder fehler beim server PHP Tipps 2005 12 21.05.2005 17:04
Neuer Strato Server apache 2 Mod Rewrite & htaccess Prob Stemmi Server, Hosting und Workstations 4 02.05.2005 00:29
Fehlermeldung - aber kein fehler... Tschuu HTML, Usability und Barrierefreiheit 16 14.03.2005 15:56
[Erledigt] mysql fehler PHP Tipps 2004 2 03.11.2004 00:32
Internal Server Error Skazi PHP Tipps 2004 2 06.10.2004 22:31
Brauch MySQL Zugriffsrechte auf einem STRATO Server??? PHP Tipps 2004 12 21.09.2004 15:04
array_push nur in begrenzter Anzahl ausführen ? PHP Tipps 2004 2 07.09.2004 09:05


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:38 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.