Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehler auf Server waren nicht auf PC

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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

  • #2
    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

    Kommentar


    • #3
      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.
      **********************************

      Kommentar


      • #4
        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

        Kommentar


        • #5
          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.
          **********************************

          Kommentar


          • #6
            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.

            Kommentar


            • #7
              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.

              Kommentar


              • #8
                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.

                Kommentar


                • #9
                  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.

                  Kommentar


                  • #10
                    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 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 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.
                    **********************************

                    Kommentar

                    Lädt...
                    X