tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Milliongame
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
397
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    m_topic m_topic ist offline Mitglied Bronze
    Registriert seit
    Jun 2006
    Beiträge
    37
    Hallo Leute
    ich versuch gerade mit dem video2brain Tutorial die Grundlagen des PHPs zu erlernen.
    In diesem Tutorial sind auch Codeschnipsel erhalten. So z.B steht im Kapitel „Datenbank füllen“ folgendes:


    PHP-Code:
    <?php
    if (isset($_POST['submit']) && isset($_POST['titel']) && isset($_POST['trainer']) && 
        isset(
    $_POST['dauer']) && $_POST['titel'] != '' && $_POST['trainer'] != '' &&
        (int)
    $_POST['dauer'] > 0) {
      try {
        
    $db = new MySQLi('localhost''root''''php');
        echo 
    'Verbindung offen.<br />';
        
    $sql 'INSERT INTO trainings (titel, trainer, dauer) VALUES (?, ?, ?)';
        
    $kommando $db->prepare($sql); 
        
    $kommando->bind_param('ssi'$_POST['titel'], $_POST['trainer'], $dauer);
            if (!
    $kommando) {
              echo 
    $db->error;
        } 
        
    $dauer = (int)$_POST['dauer'];
        
    $kommando->execute();
        echo 
    'SQL geschickt. <br />';
        echo 
    $kommando->affected_rows ' Zeilen betroffen. <br />';
        
    $db->close();
        echo 
    'Verbindung zu.<br />';
      } catch (
    Exception $e) {
        echo 
    'Fehler: ' htmlspecialchars($e->getMessage());
      }
    }
    ?>
    HTML-Code:
    <form method="POST">
      Thema des Trainings: <input type="text" name="titel" /><br />
      Name des Trainers: <input type="text" name="trainer" /><br />
      Dauer des Trainings: <input type="text" size="2" name="dauer" /><br />
      <input type="submit" name="submit" value="Eintragen!" />
    </form>
    SQL:
    Code :
    1
    2
    3
    4
    5
    6
    7
    
    create table trainings (
    ´id´ int not null auto_increment,
    ´titel´ varchar(50) not null,
    ´trainer´ varchar(50) not null,
    ´dauer´ int not null,
    primary key(´id´)
    )ENGINE=InnoDB;


    Nun bekomme ich den Fehler:
    Code :
    1
    
    Fatal error: Call to a member function bind_param() on a non-object in C:\xampp\htdocs\pr\dbs.php on line 10

    Zeile 10:
    PHP-Code:
    $kommando->bind_param('ssi'$_POST['titel'], $_POST['trainer'], $dauer); 
    Mittlerweile vermute ich dass der Fehler daran liegt da $kommando kein Objekt ist. Habe ohne erfolg nach lösungen gesucht. Ich hoffe Ihr könnt mir helfen.

    Für alle Fälle habe ich meinen php.ini drangehängt, villeicht ist da was falsch konfiguriert. Ich gehe eigentlich davon aus dass diese Codeschnipsel fehlerfrei sein sollten.
    Angehängte Dateien Angehängte Dateien
     

  2. #2
    Milliongame Milliongame ist offline Mitglied Bronze
    Registriert seit
    Oct 2007
    Beiträge
    31
    Werden Dir standardmäßig alle Fehler anzeigt? Sprich Error-Reporting-Level -1 ? Mach' mal ein var_dump() auf $db und $kommando und stell das ganze hier rein.

    Spontan würde ich vermuten, dass die Verbindungsdaten nicht korrekt sind.
     

  3. #3
    m_topic m_topic ist offline Mitglied Bronze
    Registriert seit
    Jun 2006
    Beiträge
    37
    Denke schon dass alle fehler angezeigt werden.
    Error_reporting = E_ALL | E_STRICT
    (Show all errors, warnings and notices including coding standards.)

    PHP-Code:
    <?php
    if (isset($_POST['submit']) && isset($_POST['titel']) && isset($_POST['trainer']) && 
        isset(
    $_POST['dauer']) && $_POST['titel'] != '' && $_POST['trainer'] != '' &&
        (int)
    $_POST['dauer'] > 0) {
      try {

          
        
    $db = new MySQLi('localhost''root''''php');
        echo 
    'Verbindung offen.<br /><br />';
        
    $sql 'INSERT INTO trainings (titel, trainer, dauer) VALUES (?, ?, ?)';
        
    $kommando $db->prepare($sql);
        
        echo 
    'var_dump $komando: <br />';
        
    var_dump($kommando);
        echo 
    '<p>';
        echo 
    'var_dump $db: <br />';
        
    var_dump($db);
        echo 
    '<p>';

        
    $kommando->bind_param('ssi'$_POST['titel'], $_POST['trainer'], $dauer);
        
    $dauer = (int)$_POST['dauer'];
        
    $kommando->execute();
        echo 
    'SQL geschickt. <br />';
        echo 
    $kommando->affected_rows ' Zeilen betroffen. <br />';
        
    $db->close();
        echo 
    'Verbindung zu.<br />';
      } catch (
    Exception $e) {
        echo 
    'Fehler: ' htmlspecialchars($e->getMessage());
      }
    }
    ?>
    Liefert:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    Verbindung offen.
     
    var_dump $komando:
    bool(false)
     
    var_dump $db:
    object(mysqli)#1 (17) { ["affected_rows"]=> int(-1) ["client_info"]=> string(50) "mysqlnd 5.0.8-dev - 20102224 - $Revision: 310735 $" ["client_version"]=> int(50008) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(1054) ["error"]=> string(38) "Unknown column 'titel' in 'field list'" ["field_count"]=> int(0) ["host_info"]=> string(20) "localhost via TCP/IP" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(6) "5.5.16" ["server_version"]=> int(50516) ["sqlstate"]=> string(5) "42S22" ["protocol_version"]=> int(10) ["thread_id"]=> int(122) ["warning_count"]=> int(0) }
     
     
    Fatal error: Call to a member function bind_param() on a non-object in C:\xampp\htdocs\pr\dbs.php on line 20

    Wenn ich die Überprüfung unterhalb der Zeile
    PHP-Code:
    $kommando->bind_param('ssi'$_POST['titel'], $_POST['trainer'], $dauer); 
    mache, kommt nur:

    Code :
    1
    2
    3
    
    Verbindung offen.
     
    Fatal error: Call to a member function bind_param() on a non-object in C:\xampp\htdocs\pr\dbs.php on line 12
    Geändert von m_topic (05.12.11 um 14:28 Uhr)
     

  4. #4
    Milliongame Milliongame ist offline Mitglied Bronze
    Registriert seit
    Oct 2007
    Beiträge
    31
    Dein Query ist so nicht korrekt, "Unknown column 'titel' in 'field list'", sprich die Spalte ist in der Tabelle nicht vorhanden, daher konnte keine Prepared Statement erstellt werden.

    Das Error-Reporting-Level -1 erfasst auch alle zukünftigen, siehe PHP-Manual (http://de3.php.net/manual/de/functio...eporting-notes)
     

  5. #5
    m_topic m_topic ist offline Mitglied Bronze
    Registriert seit
    Jun 2006
    Beiträge
    37
    Komisch, denn das Feld ´titel´ existiert eigentlich in der mySQL. Und zwar wurde es so erzeugt:

    Code :
    1
    2
    3
    4
    5
    6
    7
    
    create table trainings (
    ´id´ int not null auto_increment,
    ´titel´ varchar(50) not null,
    ´trainer´ varchar(50) not null,
    ´dauer´ int not null,
    primary key(´id´)
    )ENGINE=InnoDB;

    Muss ich villeicht die Tabelle anrest anlegen?
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken mySQLi füllen, bind_param() Fehler-sql.jpg  
     

  6. #6
    Milliongame Milliongame ist offline Mitglied Bronze
    Registriert seit
    Oct 2007
    Beiträge
    31
    Ich weiß nicht, ob das bei diesem Design von PhpMyAdmin gewollt ist, aber alle Spalten stehen schon in Hochkommata, bearbeite mal eine Spalte und schaue, ob die Spalte immer noch in Hochkommata steht, wenn ja entferne diese und versuch das ganze jetzt noch einmal.
    m_topic bedankt sich. 

  7. #7
    m_topic m_topic ist offline Mitglied Bronze
    Registriert seit
    Jun 2006
    Beiträge
    37
    Das wars! Super, danke viel mal.
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 19.03.12, 10:00
  2. mysqli bind_param error
    Von TMM im Forum PHP
    Antworten: 5
    Letzter Beitrag: 28.09.11, 16:10
  3. mysql Fehler prepare() und bind_param()
    Von crimes im Forum PHP
    Antworten: 5
    Letzter Beitrag: 28.04.11, 13:08
  4. MYSQLi - bind_param für MIN(FELD)?
    Von Trash im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 16.03.11, 20:09
  5. Antworten: 9
    Letzter Beitrag: 20.12.10, 12:47