Fatal error: Call to a member function bind_param() on a non

Alles, was PHP betrifft, kann hier besprochen werden.

Fatal error: Call to a member function bind_param() on a non

Postby cjanischek » 31. August 2006 01:28

...-object in /srv/www/htdocs/eingabedb.php on line 18

Hallo,

bin noch relativ neu hier und hoffe euch nicht mit lapalien zu stören. ich kann mit der fehlermeldung nix anfangen ...ich hatte bei meinem versuch der daten-eingabe alle felder ausgefüllt ...

code der eingabedb.php:
<?php
if (isset($_POST['submit']) && isset($_POST['kontaktVorname'])&& isset($_POST['kontaktName'])&& isset($_POST['kontaktEmail'])&& isset($_POST['zahlungsmittel'])&& isset($_POST['kreditfirma'])&& isset($_POST['kontaktcomment']) && $_POST['kontaktName']!= '' && $_POST['kontaktVorname'] != '' && $_POST['kontaktEmail'] != '' && $_POST['zahlungsmittel']!= 1) {

try {
// i fr improved, verbesserte neue erweiterung
$db = new MySQLi('localhost','Benutzer','Passwort', 'Kontakte');
echo 'Verbindung offen.<br />';
$sql = 'INSERT INTO Kontakte (kontaktVorname,kontaktName,kontaktEmail,zahlungsmittel,kreditfirma,kontaktcomment) VALUES (?,?,?,?,?)';
$kommando = $db->prepare($sql);
$kommando->bind_param('sssiss',$_POST['kontaktVorname'],$_POST['kontaktName'],$_POST['kontaktEmail'],$_POST['zahlungsmittel'],$_POST['kreditfirma'],$_POST['kontaktcomment']);
$kommando->execute();
echo'SQL geschickt. <br/>';
$db->close();
echo 'Verbindung zu. <br />';
} catch (Exception $e) {// auftauchende sonderzeichen werden mit exception ausgestattet
echo 'Fehler:' .htmlspecialchars($e->getMessage());
}
$vorname = $_POST['kontaktVorname'];
$nachname = $_POST['kontaktName'];
$email= $_POST['kontaktEmail'];
$zahlungsmittel= $_POST['zahlungsmittel'];
$kreditfirma= $_POST['kreditfirma'];
$comment = $_POST['kontaktcomment'];

print "Folgende Daten wurden in der Datenbank gespeichert:<br><br>Vorname: {$kontaktVorname}<br>";
print "Nachname: {$kontaktName}<br>";
print "Email: {$kontaktEmail} ZAHLT PER {$zahlungsmittel}<br><br>";
print "Kreditkarte vom Typ: {$kreditfirma}<br>";
print "Kommentar: {$kontaktcomment}";
}

?>



code der formdb.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>formular-php</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>

<div style="padding:15px; border:1px solid #666666; background-color: #F5F5F5;">

<FORM action="eingabedb.php" method="POST" target="_parent">
<div class="form_element_div">
Vorname: <br><INPUT type="text" name="kontaktVorname" size="50" maxlength="200">
</div>
<div class="form_element_div">
Name: <br><INPUT type="text" name="kontaktName" size="50" maxlength="200">
</div>
<div class="form_element_div">
Email: <br><INPUT type="text" name="kontaktEmail" size="50" maxlength="200">
</div>
<div class="form_element_div">
Zahlung per:
<INPUT type="radio" name="zahlungsmittel" value="Keine">
Keine
<INPUT type="radio" name="zahlungsmittel" value="Nachname">
Nachname
<INPUT type="radio" name="zahlungsmittel" value="Lastschrift">
Lastschrift
<INPUT type="radio" name="zahlungsmittel" value="Kreditkarte">
Kreditkarte
</div>
<div class="form_element_div">
Kreditkartenfirma:
<SELECT name="kreditfirma">
<OPTION value="keine">Keine</OPTION>
<OPTION value="visa">Visa</OPTION>
<OPTION value="eurocard">Eurocard</OPTION>
<OPTION value="american express">American Express</OPTION>
<OPTION value="diners">Diners</OPTION>

</SELECT>
</div>
<div class="form_element_div">
Kommentar:
<textarea name="kontaktcomment" cols="50" rows="2" id="description"></textarea>
</div>

<div style="form_element_div">
<INPUT type="submit" name="submit" value="Submit Request &gt;&gt;" class="submit">
</div>

</FORM>
</div>
<?php
@include("eingabedb.php");
?>
</body>
</html>


code für sql tabelle der DB Kontakte:


CREATE TABLE `Kontakte` (
`kontaktno` INT NOT NULL,
`kontaktEmail` varchar(255) NOT NULL,
`anrede` varchar(40) NOT NULL,
`kontaktName` varchar(255) default NULL,
`kontaktVorname` varchar(255) NOT NULL,
`kontaktTelefon` varchar(12) default NULL,
`kontaktFax` varchar(12) default NULL,
`kontaktGeburtstag` date NOT NULL,
`kontaktMobil` varchar(12) default NULL,
`kontaktStrasse` varchar(60) default NULL,
`kontaktPlz` int(11) default NULL,
`kontaktOrt` varchar(25) default NULL,
`kontaktLand` varchar(40) default NULL,
`kontaktTyp` varchar(40) default NULL,
`kontaktUrl` varchar(40) default NULL,
`infoFlag` boolean default NULL,
`mediumFlag` boolean default NULL,
`customerFlag` boolean default NULL,
`artistFlag` boolean default NULL,
`infono` boolean default NULL,
`zahlungsmittel` boolean NOT NULL,
`kreditfirma` varchar(255) default NULL,
`kontaktcomment` varchar(400) default NULL,
`submit` boolean default NULL,
PRIMARY KEY (`kontaktno`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

irgendwie bin ich vor müdigkeit schon blind , habt ihr einen Einfall wie ich das problem behebe...

wäre sehr dankbar liebe grüße

tine
cjanischek
 
Posts: 20
Joined: 12. August 2006 18:38

Postby Wiedmann » 31. August 2006 11:51

Code: Select all
$sql = 'INSERT INTO Kontakte (kontaktVorname,kontaktName,kontaktEmail,zahlungsmittel,kreditfirma,kontaktcomment) VALUES (?,?,?,?,?)';
$kommando = $db->prepare($sql);
$kommando->bind_param('sssiss',$_POST['kontaktVorname'],$_POST['kontaktName'],$_POST['kontaktEmail'],$_POST['zahlungsmittel'],$_POST['kreditfirma'],$_POST['kontaktcomment']);

Fatal error: Call to a member function bind_param() on a non-object

Wenn $kommando kein Objekt enthält das bind_param() kennt, dann enthält diese Variable wohl "false", weil $db->prepare() schiefgelaufen ist.

Beim Query in $sql fällt mir im Moment auf, dass du 6 Spalten benennst, aber nur 5 Platzhalter für die Werte?
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

lösung dankeschön:)

Postby cjanischek » 02. September 2006 10:35

habe die fehler mit deiner hilfe gefunden ..

hier die verbesserte version:
Code: Select all
<?php
if (isset($_POST['submit']) && isset($_POST['kontaktVorname'])&& isset($_POST['kontaktName'])&& isset($_POST['kontaktEmail'])&& isset($_POST['zahlungsmittel'])&& isset($_POST['kreditfirma'])&& isset($_POST['kontaktcomment']) && $_POST['kontaktName']!= '' && $_POST['kontaktVorname'] != '' && $_POST['kontaktEmail'] != '' && $_POST['zahlungsmittel']!= 1) {
   
   try {
   // i fr improved, verbesserte neue erweiterung
      $db = new MySQLi('localhost','Benutzer','Passwort', 'Kontakte');
      echo 'Verbindung offen.<br />';
      $sql = 'INSERT INTO Kontakte (kontaktVorname,kontaktName,kontaktEmail,zahlungsmittel,kreditfirma,kontaktcomment) VALUES (?,?,?,?,?,?)';
      $kommando = $db->prepare($sql);
      $kommando->bind_param('ssssss',$_POST['kontaktVorname'],$_POST['kontaktName'],$_POST['kontaktEmail'],$_POST['zahlungsmittel'],$_POST['kreditfirma'],$_POST['kontaktcomment']);
      $kommando->execute();
      echo'SQL geschickt. <br/>';
      $db->close();
      echo 'Verbindung zu. <br />';
      } catch (Exception $e) {// auftauchende sonderzeichen werden mit exception ausgestattet
         echo 'Fehler:' .htmlspecialchars($e->getMessage());
      }
}
?>


die ausgabe fünktioniert zwischenzeitlich auch:

Code: Select all
<table>
   <TR>
      <th>Vorname&nbsp;&nbsp;&nbsp;</th><th>Nachname&nbsp;&nbsp;&nbsp;</th><th>Email&nbsp;&nbsp;&nbsp;</th><th>Zahlungsmittel&nbsp;&nbsp;&nbsp;</th><th>Kreditfirma&nbsp;&nbsp;&nbsp;</th><th>Kommentar&nbsp;&nbsp;&nbsp;</th>
   </TR>

<?php
   
//    try {
   // i fr improved, verbesserte neue erweiterung
      $db = new MySQLi('localhost','Benutzer','Passwort', 'Kontakte');
      echo 'Verbindung offen.<br />';
      $sql = 'SELECT * FROM Kontakte';
      $ergebnis = $db->query($sql);
      while ($zeile = $ergebnis->fetch_object()) {
         printf('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td>',
            htmlspecialchars($zeile->kontaktVorname),
            htmlspecialchars($zeile->kontaktName),
            htmlspecialchars($zeile->kontaktEmail),
            htmlspecialchars($zeile->zahlungsmittel),
            htmlspecialchars($zeile->kreditfirma),
            htmlspecialchars($zeile->kontaktcomment));      
      }
//       echo'SQL geschickt. <br/>';
      $db->close();
//       echo 'Verbindung zu. <br />';
//       // Datenbankverbindung wieder schließen
//       } catch (Exception $e) {
//       echo 'Ausnahme gefangen: ',  $e->getMessage(), "\n";
//       }

?>


lieben dank tine
cjanischek
 
Posts: 20
Joined: 12. August 2006 18:38


Return to PHP

Who is online

Users browsing this forum: No registered users and 60 guests