• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

INSERT problem

Status
Für weitere Antworten geschlossen.

Mad Dog

Mitglied
hey leute,

will einen wert in die datenbank eintragen. hier der code:
Code:
        $sql = 'INSERT INTO user
                         (Username)
                    VALUES
                         (Username = ?)';
    $result = $mysqli->prepare($sql);
    $result->bind_param("s", $Username);
    $result->execute();
    echo $mysqli->affected_rows.'<br>';

er fuehrt den befehl auch aus, nur wenn ich mir die tabelle dann anschauen, traegt er nicht den usernamen ein (zb add) sondern 0.
woran liegt das?
 
Hallo,

beim einem Prepared Statement wird nur das Fragezeichen als Platzhalter angegeben.
Code:
        $sql = 'INSERT INTO user
                         (Username)
                    VALUES
                         [COLOR="Red"](?)[/COLOR]';
    $result = $mysqli->prepare($sql);
    $result->bind_param("s", $Username);
    $result->execute();
    echo $mysqli->affected_rows.'<br>';
 
okay das klappt
aber ist es normal das ich -1 zurueckbekommen von affected_rows wenn (in meinem beispiel) der username schon verhanden ist?
wann gibt affected_rows 0 zurueck?
 
Hallo,

affected_rows liefert normalerweise die Anzahl der veränderten, neu angelegten Datensätze zurück. Null wird afaik nur bei Update Statements zurückgeliefert, wenn nichts aktualisiert wurde. Das -1 deutet auf einen Fehler hin, wenn z.B. ein Datensatz angelegt werden soll, der schon existiert. Das kann z.B. der Fall sein, wenn ein Benutzername-Feld als Unique gekennzeichnet ist und ein bereits existierender Name erneut hinzugefügt werden soll.
 
hmmm
ich alles hat geklappt wie ich will.
doch als ich das ganze in eine klasse umgeschreiben habe, gabs ne fehler:
Fatal error: Call to a member function prepare() on a non-object in ***\classRegistration.php on line 39
hier die klasse:
Code:
<?php
class Registration
{    
        private function DBconnect($Location,$User,$Password,$DBname)
        {
                $mysqli = new mysqli ($Location,
                                                              $User,
                                                          $Password,
                                                            $DBname);
                if (mysqli_connect_errno())
                {
                        return FALSE;
                        die('Konnte keine Verbindung zu Datenbank aufbauen, MySQL meldete: '.mysqli_connect_error());
                }
                else
                {
                        return TURE;
                }
        }
        
        
        public function checkFormData($Username, $Password0, $Password1, $Email0, $Email1)
        {
                if (isset($Username))
                {
                        if (!preg_match('/^[\w()[\]_.]+$/', $Username))
                        {
                                echo 'Username: Only a-z,A-Z,0-9, 3 - 30 letters, (), [] und .!<br>';
                        }
                        else
                        {
                                $this->DBconnect('localhost','root','','test');
                                if ($this->DBconnect('localhost','root','','test') == TRUE)
                                {
                                        $sql = 'INSERT INTO user
                                                          (Username)
                                                    VALUES
                                                        (?)';
                                        $result = $mysqli->prepare($sql);
                                       $result->bind_param("s", $Username);
                                    $result->execute();
                                   if ($mysqli->affected_rows == 1)
                                      {
                                             $CheckUsername = TRUE;
                                     }
                                     if ($mysqli->affected_rows == -1)
                                        {
                                           $CheckUsername = FALSE;
                                     }
                           }
                           else
                           {
                                   echo 'fehler mit verbindung!';
                           }
                        }
                }
                else
                {
                        echo 'We need at least a Username!<br>';
                }

                if (isset($Password0) AND isset($Password1))
            {
                      if (preg_match('/^\w{3,30}$/', $Password1) AND preg_match('/[a-zA-Z]/', $Password1) AND preg_match('/[0-9]/', $Password1))
                      {
                                if (!($Password0 === $Password1))
                                {
                                        echo 'Passwords arent the same!<br>';
                                }
                                else
                                {
                                        $sql = 'INSERT INTO user
                                                           (Password)
                                                    VALUES
                                                          (?)';
                                        $result = $mysqli->prepare($sql);
                                       $result->bind_param("s", $Password0);
                                    $result->execute();
                                  if ($mysqli->affected_rows == 1)
                                       {
                                             $CheckPassword = TRUE;
                                     }
                                     if ($mysqli->affected_rows == -1)
                                        {
                                           $CheckPassword = FALSE;
                                     }
                                }
                        }
                        else
                        {
                                echo 'Password: Only a-z,A-Z,0-9, min 3  max 30 letters!<br>
                                          At least one letter and one number!<br>';
                        }
                }
                else
                {
                        echo 'We need at least the passwords!<br>';
                }

                if(isset($Email0) AND isset($Email1))
            {
                        if(!($Email0 === $Email1))
                        {
                                echo 'Emails arent the same!<br>';
                        }
                        else
                        {
                                $sql = 'INSERT INTO user
                                                       (Password)
                                              VALUES
                                                      (?)';
                               $result = $mysqli->prepare($sql);
                               $result->bind_param("s", $Email0);
                              $result->execute();
                          if ($mysqli->affected_rows == 1)
                              {
                                    $CheckEmail = TRUE;
                            }
                            if ($mysqli->affected_rows == -1)
                               {
                                   $CheckEmail = FALSE;
                            }
                        }
                }
                else
                {
                    echo 'We need at least the Emails!<br>';
                }

                if ($CheckUsername === TRUE)
                {
                        if ($CheckPassword === TRUE)
                        {
                                if ($CheckEmail === TRUE)
                                {    
                                        return TRUE;
                                        echo 'All your Data is okay!';
                                }
                                else
                                {
                                        return FALSE;
                                        echo 'Something is wrong with your Email!';
                                }
                        }
                        else
                        {
                                return FALSE;
                                echo 'Something is wrong with your Password!';
                        }
                }
                else
                {
                        return FALSE;
                        echo 'Something is wrong with your Username!';
                }
        }
            
                
        function __desctruct()
        {
                $mysqli->close();
        }

}
?>
und hier wird die kasse aufgerufen:
Code:
<?php
$include = include 'classRegistration.php';

if ($include == TRUE)
{
        if ('POST' == $_SERVER['REQUEST_METHOD'])
        {
              $Username = trim($_POST['Username']);
               $Password0= trim($_POST['Password0']);
                 $Password1 = trim($_POST['Password1']);
                 $Email0 = trim($_POST['Email0']);
                 $Email1 = trim($_POST['Email1']);
                 
                 $Regi = new Registration;
                $Regi->checkFormData($Username, $Password0, $Password1, $Email0, $Email1);
                $Regi->desctruct();
        }
}
else
{
        echo 'there is some problem with the script!<br>';
        die;
}

?>
hoffe ihr koennt mir helfen!
 
Hallo,

sorry, aber dein Code ist mir zu chaotisch, um mich da jetzt großartig durchzuhangeln. Auf den ersten Blick fällt aber auf, dass Du scheinbar OOP nicht verstanden hast. Wieso wird da versucht, mehrfach Verbindungen innerhalb der Klasse zu öffnen? In Klassen gibt es niemals direkte Ausgaben oder Abbrüche, a la echo, print, exit, die. Wenn Du schon mit PHP5 arbeitest, solltest Du auch mit Exceptions Fehler abfangen und entsprechend darauf reagieren.
Auf PHP-interne Klassen greift man aus eigenen Klassen nicht einfach so zu, wie Du es probiert hast, sondern man erweitert diese (Stichwort Vererbung). Hier mal ein ganz kurzes Beispiel, wie man eine eigene Klasse um die MySQLi Funktionalität erweitert:
PHP:
class MeineKlasse extends mysqli
{
	// Nicht öffentliche Eigenschaft
	protected $ergebnis = NULL;

	// Datenbankverbindung öffnen
	public function __construct( $hostname = '', $username = '', $passwd = '', $dbname = '' )
	{
		parent::__construct( $hostname, $username, $passwd, $dbname );
	}

	// Query an die DB schicken
	public function query( $sql )
	{
		$this->ergebnis = parent::query( $sql );
	}
}

// und der externe Aufruf
$verbindung = new MeineKlasse( 'localhost', 'benutzername', 'passwort', 'datenbankname' );
$verbindung->query( "SELECT `feld` FROM `tabelle`" );
 
Status
Für weitere Antworten geschlossen.

Neueste Beiträge

Zurück
Oben