chrisss: verbindung mit ner datenbank herstellen

Hallo Leute habe da ein Problem und zwar habe ich ein Script welches ich mit ner Datenbank verbinden will.
<?php
  if (isset($_POST["v"]) &&
      isset($_POST["n"]) &&
      isset($_POST["e"]) &&
      isset($_POST["Button"]) &&
      $_POST["Button"] == "Eintragen") {
    $conn = mysqli_connect("localhost", "user", "pw");
    mysqli_select_db($conn, "Datenbankname");

$vorname = mysqli_real_escape_string($conn, $_POST["v"]);
    $nachname = mysqli_real_escape_string($conn, $_POST["n"]);
    $email = mysqli_real_escape_string($conn, $_POST["e"]);
    $sql  = "INSERT INTO kontakt ";
    $sql .= "( vorname, nachname, email) VALUES (";
    $sql .= "'$vorname', '$nachname', '$email')";

mysqli_query($conn, $sql);
    mysqli_close($conn);
    header("Location: mysql_uebersicht.php");
  }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Kontakt eintragen</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<form method="post">
Vorname: <input type="text" name="v" /><br />
Nachname: <input type="text" name="n" /><br />
E-Mail: <input type="text" name="e" /><br />
<input type="submit" name="Button" value="Eintragen" />
</form>
</body>
</html>
Wenn ich nun den Namen usw eintrage und auf eintragen klicke kommt folgende fehlermeldung:
Fatal error: Call to undefined function: mysqli_connect() in /var/www/web208/html/test/mysql_eintragen.php on line 7!
Was mache ich falsch?
Kann mir jemand helfen?
mfg chrisss

  1. Hi,

    Wenn ich nun den Namen usw eintrage und auf eintragen klicke kommt folgende fehlermeldung:
    Fatal error: Call to undefined function: mysqli_connect() in /var/www/web208/html/test/mysql_eintragen.php on line 7!

    Dann scheint wohl bei dir die MySQLi-Erweiterung fuer PHP nicht installiert zu sein.

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
    1. Hi,

      Wenn ich nun den Namen usw eintrage und auf eintragen klicke kommt folgende fehlermeldung:
      Fatal error: Call to undefined function: mysqli_connect() in /var/www/web208/html/test/mysql_eintragen.php on line 7!

      Dann scheint wohl bei dir die MySQLi-Erweiterung fuer PHP nicht installiert zu sein.

      MfG ChrisB

      Dann scheint wohl bei dir die MySQLi-Erweiterung fuer PHP nicht installiert zu sein.

      doch ist es habe nur vergessen die .htaccess-Datei zu erstellen!!
      mfg chriss

      1. So danke für die schnelle hilfe das erste Problem ist gelöst nun habe ich aber das nächste. Und zwar wie stelle ich das ein, das man sich nur einmal regestrieren kann und nicht mehrmals mit den gleichen namen usw.!
        mfg chrisss

        1. hi,

          So danke für die schnelle hilfe das erste Problem ist gelöst nun habe ich aber das nächste. Und zwar wie stelle ich das ein, das man sich nur einmal regestrieren kann und nicht mehrmals mit den gleichen namen usw.!

          In dem du prüfst, ob es den Usernamen in der Datenbank schon gibt.

          Und natürlich die Tipps für Fragende beachten.

          mfg

          --
          echo '<pre>'; var_dump($Malcolm_Beck`s); echo '</pre>';
          array(2) {
            ["SELFCODE"]=>
            string(74) "ie:( fl:) br:> va:? ls:? fo:) rl:| n4:# ss:{ de:? js:} ch:? sh:( mo:? zu:("
            ["Aight"]=>
            string(?) "I Have a Dream"
          }
          1. hi,

            So danke für die schnelle hilfe das erste Problem ist gelöst nun habe ich aber das nächste. Und zwar wie stelle ich das ein, das man sich nur einmal regestrieren kann und nicht mehrmals mit den gleichen namen usw.!

            In dem du prüfst, ob es den Usernamen in der Datenbank schon gibt.

            Und natürlich die Tipps für Fragende beachten.

            mfg

            Es gibt doch aber bestimmt auch ne Einstellung oder ein Script das das automatisch überprüft sobald sich jemand mit einen gleichen Namen usw anmeldet.
            mfg

            1. hi,

              Es gibt doch aber bestimmt auch ne Einstellung oder ein Script das das automatisch überprüft sobald sich jemand mit einen gleichen Namen usw anmeldet.

              Mir ist keine Einstellung bekannt, du kannst aber mit PHP ganz einfach einen vergleich ausführen, Beispielsweise mit der Funktion strcmp() oder vergleichbaren String-Funktionen.

              Bei mir hat schon ein ganz einfaches IF genügt, um so einen Vergleich durchzuführen:

                /*  
                 * Prüfen, ob eventuell eine Kategorie mit gleichem Namen existiert  
                 * ebenso für Target  
                */  
                if(isset($_POST['name']) AND $_POST['name'] == $Row['link_name'])  
                {  
                  $error[] = 'Dieser Name existiert bereits in der Datenbank';  
                }  
                if(isset($_POST['target']) AND $_POST['target'] == $Row['link_target'])  
                {  
                  $error[] = 'Dieser Link existiert bereits in der Datenbank';  
                }
              

              Wenn es einen Fehler gibt, habe ich diesen in dem Array $error und kann mit diesem weiterarbeiten.

              mfg

              --
              echo '<pre>'; var_dump($Malcolm_Beck`s); echo '</pre>';
              array(2) {
                ["SELFCODE"]=>
                string(74) "ie:( fl:) br:> va:? ls:? fo:) rl:| n4:# ss:{ de:? js:} ch:? sh:( mo:? zu:("
                ["Aight"]=>
                string(?) "I Have a Dream"
              }
              1. Hallo,

                Es gibt doch aber bestimmt auch ne Einstellung oder ein Script das das automatisch überprüft sobald sich jemand mit einen gleichen Namen usw anmeldet.

                Mir ist keine Einstellung bekannt,

                wie dedlfix bereits ausführte, hilft in solchen Fällen ein eindeutiger Index.
                Es ist *keine* gute Idee, zuerst nachzuschauen, ob ein bestimmter Nutzer bereits existiert. Damit erzeugst Du eine Race Condition.

                Es ist dagegen eine sehr gute Idee, einfach den neuen Datensatz einfügen zu wollen. Scheitert dies wegen einer Schlüsselverletzung, dann existierte der Name bereits und man kann die entsprechende Fehlermeldung ausgeben.

                Freundliche Grüße

                Vinzenz

                1. hi,

                  wie dedlfix bereits ausführte, hilft in solchen Fällen ein eindeutiger Index.

                  Das war auch mein erster Gedanke, nur war ich mir nicht sicher, ob dass auch mit „nur Text“ funktioniert.

                  Es ist dagegen eine sehr gute Idee, einfach den neuen Datensatz einfügen zu wollen. Scheitert dies wegen einer Schlüsselverletzung, dann existierte der Name bereits und man kann die entsprechende Fehlermeldung ausgeben.

                  Das werde ich gleich mal versuchen, ist etwas, was ich durchaus gebrauchen kann.
                  Danke für die Korrektur.

                  mfg

                  --
                  echo '<pre>'; var_dump($Malcolm_Beck`s); echo '</pre>';
                  array(2) {
                    ["SELFCODE"]=>
                    string(74) "ie:( fl:) br:> va:? ls:? fo:) rl:| n4:# ss:{ de:? js:} ch:? sh:( mo:? zu:("
                    ["Meaningful"]=>
                    string(?) "Der Sinn des Lebens ist deinem Leben einen Sinn zu geben"
                  }
        2. echo $begrüßung;

          wie stelle ich das ein, das man sich nur einmal regestrieren kann und nicht mehrmals mit den gleichen namen usw.!

          Definiere genauer was du unter registrieren letzendlich verstehst. Wenn du meinst, dass du keine doppelten Datensätze in der Tabelle haben möchtest, dafür kannst du einen Unique-Index auf die Spalte(n) setzen. Beim Insert-Versuch eines gleichen Kriteriums schlägt dieser dann fehl, was du auswerten kannst.

          echo "$verabschiedung $name";

  2. Hallo,

      
    
    > <?php  
      
    // Überprüfe, ob Dein Hoster Dir die Erweiterung mysqli überhaupt zur  
    // Verfügung stellt:  
      
    //     phpinfo();  
      
    // sollte Dir weiterhelfen  
      
    // Die Verbindungsdaten wären in einer Datei, die außerhalb der  
    // Document-Root liegt, besser aufgehoben.  
    
    >     $conn = mysqli_connect("localhost", "user", "pw");  
      
    // Bitte prüfe den Erfolg der Anweisung.  
    // Reagiere auf Fehler angemessen, d.h. lass das Skript nicht sterben.  
      
    
    >     mysqli_select_db($conn, "Datenbankname");  
    
    // Warum nutzt Du nicht den entsprechenden Parameter von mysqli_connect  
    // noch schöner mit new mysqli ...  
      
    
    >     $vorname = mysqli_real_escape_string($conn, $_POST["v"]);  
    >     $nachname = mysqli_real_escape_string($conn, $_POST["n"]);  
    >     $email = mysqli_real_escape_string($conn, $_POST["e"]);  
    >     $sql  = "INSERT INTO kontakt ";  
    >     $sql .= "( vorname, nachname, email) VALUES (";  
    >     $sql .= "'$vorname', '$nachname', '$email')";  
      
    // Die unnötige Kopiererei kannst Du Dir sparen, nutze z.B. sprintf(), um  
    // das Statement lesbarer zu halten.  
      
    
    >     mysqli_query($conn, $sql);  
    >     mysqli_close($conn);  
      
    // Ich vermisse die Fehlerbehandlung.  
      
    
    >     header("Location: mysql_uebersicht.php");  
      
    // Der Location-Header will unbedingt eine absolute URI haben. Es ist kein  
    // großer Aufwand, diesen Fehler auszumerzen.  
      
    // Ja, ich weiß: Es funzt doch. (aber nur fast immer)  
    // Ja, ich sage: Beseitige solch unnötige Fehler.  
    
    

    Fatal error: Call to undefined function: mysqli_connect() in /var/www/web208/html/test/mysql_eintragen.php on line 7!
    Was mache ich falsch?

    Du hast nicht überprüft, ob Dir mysqli überhaupt zur Verfügung steht. Du kannst ganz leicht Deine Fehlerbehandlung verbessern und ein paar weitere Fehler eliminieren.

    Freundliche Grüße

    Vinzenz

    1. Hallo,

      <?php

      // Überprüfe, ob Dein Hoster Dir die Erweiterung mysqli überhaupt zur
      // Verfügung stellt:

      //     phpinfo();

      // sollte Dir weiterhelfen

      // Die Verbindungsdaten wären in einer Datei, die außerhalb der
      // Document-Root liegt, besser aufgehoben.

      $conn = mysqli_connect("localhost", "user", "pw");

      // Bitte prüfe den Erfolg der Anweisung.
      // Reagiere auf Fehler angemessen, d.h. lass das Skript nicht sterben.

      mysqli_select_db($conn, "Datenbankname");
      // Warum nutzt Du nicht den entsprechenden Parameter von mysqli_connect
      // noch schöner mit new mysqli ...

      $vorname = mysqli_real_escape_string($conn, $_POST["v"]);
          $nachname = mysqli_real_escape_string($conn, $_POST["n"]);
          $email = mysqli_real_escape_string($conn, $_POST["e"]);
          $sql  = "INSERT INTO kontakt ";
          $sql .= "( vorname, nachname, email) VALUES (";
          $sql .= "'$vorname', '$nachname', '$email')";

      // Die unnötige Kopiererei kannst Du Dir sparen, nutze z.B. sprintf(), um
      // das Statement lesbarer zu halten.

      mysqli_query($conn, $sql);
          mysqli_close($conn);

      // Ich vermisse die Fehlerbehandlung.

      header("Location: mysql_uebersicht.php");

      // Der Location-Header will unbedingt eine absolute URI haben. Es ist kein
      // großer Aufwand, diesen Fehler auszumerzen.

      // Ja, ich weiß: Es funzt doch. (aber nur fast immer)
      // Ja, ich sage: Beseitige solch unnötige Fehler.

      
      >   
      > > Fatal error: Call to undefined function: mysqli\_connect() in /var/www/web208/html/test/mysql\_eintragen.php on line 7!  
      > > Was mache ich falsch?  
      >   
      > Du hast nicht überprüft, ob Dir mysqli überhaupt zur Verfügung steht. Du kannst ganz leicht Deine Fehlerbehandlung verbessern und ein paar weitere Fehler eliminieren.  
      >   
      >   
      > Freundliche Grüße  
      >   
      > Vinzenz  
        
        
      // Überprüfe, ob Dein Hoster Dir die Erweiterung mysqli überhaupt zur  
      // Verfügung stellt:  
        
      //     phpinfo();  
        
      // sollte Dir weiterhelfen  
      danke für diesen tipp genau daran lag es jetzt funtioniert es auch wunderbar!  
      mfg chrisss