Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehlermeldung: Call to a menget function bin_param() on boolean

Einklappen

Neue Werbung 2019

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

  • Fehlermeldung: Call to a menget function bin_param() on boolean

    Schönen Guten Tag, ich probiere nun schon seit 2 Tagen rum und finde einfach keine Lösung für mein Problem. Gegoogelt und gefunden hab ich ein paar Sachen, aber nichts was mir jetzt richtig hilft. Ich bin noch recht frisch und versuche mich mit PHP auseinanderzusetzen und richtig zu verstehen.

    So nun zu meinem Vorhaben:
    Wir wollen eine Seite für einen RP Server erschaffen, wo man ein eigenes Banksystem hat. Da soll man sein Konto sehen und später auch an andere Spieler Geld senden können. Natürlich nicht mit echten Währungen, sondern alles virtuell. Aber es hapert bei mir an der Anmeldung bereits. Es soll so sein, dass ein Administrator eine Kontonummer in der Datenbank anlegt, wie geben sie dem Spieler und dann kann er sich seinen PIN selbst aussuchen. Also habe ich versucht zuerst eine Anfrage zu starten, wo ich in Erfahrung bringen möchte ob es diese Kontonummer in der Datenbank gibt. Aber er haut mir jedesmal eine Fehlermeldung raus. Ich hab gegoogelt und Videos geschaut und so viele Optionen getestet.. es geht nicht.. deshalb hoffe ich hier mal auf Rat.



    HTML-Code:
    <form action="" method="post">
    
    Deine Kontonummer: <break>
    
    <input type="text" name="kontonummer" placeholder="Kontonummer"><break>
    
    Dein Pin: <break>
    
    <input type="password" name="pin" placeholder="PIN"><break>
    
    wiederhole deinen Pin: <break>
    
    <input type="password" name="pin_wiederholen" placeholder="PIN wiederholen"><break>
    
    <input type="submit" name="absenden" value="Absenden"><break>
    
    </form>



    PHP-Code:
    <?php

    $db 
    = new mysqli("####""###""###""####");

    if (
    $db->connect_errno) {

    // beim Verbindungsaufbau ist ein Fehler aufgetreten!

    // $mysqli->connect_error stellt eine Fehlerbeschreibung bereit

    }




    if(isset(
    $_POST['absenden']));

    $Kontonummer =$_POST['kontonummer'];

    $Pin =$_POST['pin'];

    $Pin_wiederholen =$_POST['pin_wiederholen'];




    $search_user $db->prepare("SELECT * FROM konto WHERE Kontonummer = ?");

    $search_user->bind_param('i'$Kontonummer);

    $search_user->execute();

    $search_result $search_user->get_result();




    if(
    $search_result->num_rows == 1);




    else

    echo 
    'Kontonummer exestiert nicht!';




    ?>


    meine Daten hab ich mal unkenntlich gemacht, aber sonst es es alles so wie ich es drin habe.





  • #2
    Aber er haut mir jedesmal eine Fehlermeldung raus.
    Was denn für eine Fehlermeldung?

    Bitte verwende einen PHP-Block für PHP-Code. Im Editor hats so einen kleinen php-Schalter, dort draufdrücken um Sourcecode einzufügen.

    Kommentar


    • #3
      PHP-Code:
      <form action="" method="post">

      Deine Kontonummer: <break>

      <input type="text" name="kontonummer" placeholder="Kontonummer"><break>

      Dein Pin: <break>

      <input type="password" name="pin" placeholder="PIN"><break>

      wiederhole deinen Pin: <break>

      <input type="password" name="pin_wiederholen" placeholder="PIN wiederholen"><break>

      <input type="submit" name="absenden" value="Absenden"><break>

      </form>




      <?php

      $db 
      = new mysqli("####""###""###""####");

        if (
      $db->connect_errno) {

              
      // beim Verbindungsaufbau ist ein Fehler aufgetreten!

              // $mysqli->connect_error stellt eine Fehlerbeschreibung bereit

          
      }




      if(isset(
      $_POST['absenden']));

        
      $Kontonummer =$_POST['kontonummer'];

        
      $Pin =$_POST['pin'];

        
      $Pin_wiederholen =$_POST['pin_wiederholen'];




        
      $search_user $db->prepare("SELECT * FROM konto WHERE Kontonummer = ?");

        
      $search_user->bind_param('i'$Kontonummer);

        
      $search_user->execute();

        
      $search_result $search_user->get_result();




      if(
      $search_result->num_rows == 1);




      else

        echo 
      'Kontonummer exestiert nicht!';




      ?>

      Die Fehlermeldung: Call to a member function bind_param() on boolean in /var/customers/webs/ni428362_1/konto_login.php:24 Stack trace: #0 {main} thrown in /var/customers/webs/ni428362_1/konto_login.php on line 24


      Es hängt irgendwie mit dem bin_param zusammen, aber den Zusammenhang hab ich leider nicht verstanden. So nun nochmal richtig, hab die Funktion für Code nicht gesehen gehabt.

      Kommentar


      • #4
        Schaut dir mal das EVA-Prinzip an und strukturiere den Code richtig. Ein DB Connect (PHP) hat inmitten der HTML-Ausgabe nichts zu suchen. https://php-de.github.io/jumpto/eva-prinzip/

        Und error erporting beim Entwickeln aufdrehen oder Error Log anschauen. https://php-de.github.io/jumpto/faq/#debugging
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Die Fehlermeldung bedeutet, dass die Variable $search_user den Wert false hat.
          Das bedeutet, dass:
          PHP-Code:
          $db->prepare("SELECT * FROM konto WHERE Kontonummer = ?"); 
          false zurückliefert, also wohl Dein SQL fehlerhaft ist. Kann sein, dass du da etwas klein geschrieben hast was gross sein sollte. Oder umgekehrt. Oder Deine Spalte anders heisst. Oder Deine Tabelle.
          Dafür müssten wir die Tabelle haben.

          Übrigens: Verwende nicht SELECT *, sondern gebe immer die Spalten an, welche du benötigst.

          Kommentar


          • #6
            PHP-Code:
            <form action="" method="post">

            Deine Kontonummer: <break>

            <input type="text" name="kontonummer" placeholder="Kontonummer"><break>

            Dein Pin: <break>

            <input type="password" name="pin" placeholder="PIN"><break>

            wiederhole deinen Pin: <break>

            <input type="password" name="pin_wiederholen" placeholder="PIN wiederholen"><break>

            <input type="submit" name="absenden" value="Absenden"><break>

            </form>




            <?php

            $db 
            = new mysqli("####""####""###""####");

              if (
            $db->connect_errno) {

                    
            // beim Verbindungsaufbau ist ein Fehler aufgetreten!

                    // $mysqli->connect_error stellt eine Fehlerbeschreibung bereit

                
            }




            if(isset(
            $_POST['absenden']));

              
            $Kontonummer =$_POST['kontonummer'];

              
            $Pin =$_POST['pin'];

              
            $Pin_wiederholen =$_POST['pin_wiederholen'];




              
            $search_user $db->prepare("SELECT Kontonummer FROM konto WHERE Kontonummer = ?");

              
            $search_user->bind_param('i'$Kontonummer);

              
            $search_user->execute();

              
            $search_result $search_user->get_result();




               if(
            $search_result->num_rows == 1)

               {

               echo 
            'Kontonummer exestiert!';

                  if(
            $Pin == $Pin_wiederholen)

                  {

                   echo 
            'Pin ok';

                   
            $Pin =md5($passwort);

                   
            $db->prepare("INSERT INTO konto (Pin) VALUES (?)");

                   
            $insert->bind_param('i'$Pin);

                   
            $insert->execute();

                  }

                  else

                  {

                  echo 
            'Pin stimmt nicht';

                  }

               }

               else

               {

               echo 
            'Kontonummer exestiert nicht!';

               }  




            ?>
            Nun Funktioniert es komischer Weise ohne das ich was verändert habe. Wenn ich nun aber einstelle, dass er den ausgewählten PIN dann speichern soll, meckert er wieder.. ich verstehe nicht wieso es bei dem einen jetzt geht und bei dem anderen wieder nicht.. prinzipiell ist es doch das gleich oder etwa nicht?

            wenn ich das Insert ausklammere, kommt keine Fehlermeldung.. aber eine Verbindung zur DP ist ja da, sonst kann er die Kontonummer nicht abgleichen..

            Fatal error: Uncaught Error: Call to a member function bind_param() on null in /var/customers/webs/ni428362_1/konto_login.php:36 Stack trace: #0 {main} thrown in /var/customers/webs/ni428362_1/konto_login.php on line 36


            Dann hab ich noch eine Frage, er gleicht die Nummer ab und soll dann sie pin in der Zeit wo die Nummer stimmt überspeichern.. geht das so wie ich das versuche?

            und mit den Eva Prinzip und dem richtig Schreiben befasse ich mich, wenn es erstmal funktioniert ich bekomme hier schon so einen Anfall weil ich den Sinn manchmal nicht verstehe.. aber danke für die Info

            Kommentar


            • #7
              https://ibb.co/yNM5QGh

              Meine Datenbank

              Kommentar


              • #8
                Du prüfst nach dem Ausführen auch gar nicht ob irgendwelche Fehler passiert sind. Mach das mal, oder dreh - wie oben schon erwähnt - das error Reporting voll auf. Das gibt es auch für die mysqli Schnittstelle:

                https://php-de.github.io/jumpto/sql/


                befasse ich mich, wenn es erstmal funktioniert
                Und wenn es dann funtkioniert baust du alles wieder um, wirklich .. Wers glaubt... Warum nicht gleich einmal richtig machen, ist ja nicht viel Aufwand, rauf mit dem PHP-Zeugs. Die Ausgabe (HTML) zum Schluss.
                The string "()()" is not palindrom but the String "())(" is.

                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  Ich habe deine Nachrichten mit dem aufdrehen der error-Logs gelesen, nur bin ich noch ein kompletter anfänger und blicke noch nicht komplett durch.

                  Also frag ich einfach ganz doof.

                  PHP-Code:
                  if (false === mysqli_query($dblink$query)) { die(mysqli_error($dblink)); 
                  $dblink ist meine Verbindung zur Datenbank
                  aber was ist die Variable $query.. die hab ich bei mir ja nicht definiert.

                  Also frage ich mit dieser Abfrage die Richtigkeit der Datenbank ab? Liege ich da richtig? Eine Abfrage ob die Datenbank verbunden ist, hab ich ja am Anfang. Aber wie kann ich für jedes aufführen von Befehlen extra Abfragen machen? Und nicht böse aufnehmen, ich befasse mich noch nicht so lange damit und verstehe daher noch nicht alles.

                  Kommentar


                  • #10
                    Was haben denn die Wordpress-Tabellen in der Datenbank verloren?
                    Ich hoffe ja für dich, dass du dafür nicht Wordpress einsetzt.

                    Darüber hinaus ist die Tabelle fehlerhaft, Latin1 ist schon lange vorbei, bitte nutze durchgehend utf8 als Zeichenkodierung.

                    Eine Bild ist hier zudem unerwünscht als Darstellung zur Tabellenstruktur, bitte nächstes mal eine CREATE Statement einfügen. Da du phpMyAdmin im Einsatz hast kannst du das ganz einfach per Export erledigen und hier als Text mit den entsprechenden Code-Tags einfügen.

                    Aber mir scheint, dass du noch sehr am Anfang stehst und die Zusammenhänge noch gar nicht klar sind, daher ist dein Projekt eine Nummer zu gross für dich.
                    Lerne erst mal die Grundlagen in dem du einige Tutorials durcharbeitest danach fängst du mal klein an. Ein Haus baut man ja auch nicht, in dem mit dem Dach anfängt, sondern vom soliden Fundament ausgehend.

                    Kommentar


                    • #11
                      WordPress ist in der Datenbank weil ich bestimmte Darstellungen der Seite über WordPress mache um mir HTML zu sparen. Nur gibt es leider keine Plugins die den Nutzen erfüllen den ich brauche. Ich brauche einfach ein System, womit ich mich einloggen kann und Daten einfügen und Abfragen kann.

                      und ich habe an der sql Datenbank bisher nichts geändert gehabt, mir eingefügt und das war dann Standart so ausgewählt.

                      es bringt mir auch nichts jetzt zu sagen, dass ich mir ein anderes Projekt suchen soll, weil mir das nichts nützt wir brauchen für unseren Server so ein System. Und ich bin ja schon dabei mich einzuarbeiten und Zusammenhänge zu verstehen. Ich verstehe nur nicht wieso er manchmal nicht das macht was er soll.

                      Kommentar


                      • #12
                        Zitat von HaZeSh0cK Beitrag anzeigen
                        HTML-Code:
                        <form action="" method="post">
                        Deine Kontonummer: <break>
                        <input type="text" name="kontonummer" placeholder="Kontonummer"><break>
                        Dein Pin: <break>
                        <input type="password" name="pin" placeholder="PIN"><break>
                        wiederhole deinen Pin: <break>
                        <input type="password" name="pin_wiederholen" placeholder="PIN wiederholen"><break>
                        <input type="submit" name="absenden" value="Absenden"><break>
                        </form>
                        Du solltest dich erstmal mit den Grundlagen von HTML beschäftigen bevor du mit PHP anfängst:
                        - das action-Attribut darf nicht leer sein - lass es einfach weg
                        - ein break-Element gibt es nicht, du meinst br
                        - ein placeholder-Attribut das nur das wiederholt was vor dem Feld steht ist überflüssig -> weg damit
                        - es fehlen label-Elemente, so haben deine Felder keine Beschriftung
                        - das input mit type=submit wäre gerne ein <button>

                        PHP-Code:
                        if(isset($_POST['absenden'])); 
                        Wenn du die Zeile weggelassen hättest, hätte das exakt den gleichen Effekt. Mit dem Semikolon beendest du das was ausgeführt wird wenn die Bedingung erfüllt ist (bei dir garnichts), alles was nach der Zeile kommt wird immer ausgeführt, egal was die Bedingung ergibt.

                        Kommentar

                        Lädt...
                        X