Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] PHP SQL Problem

Einklappen

Neue Werbung 2019

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

  • [Erledigt] PHP SQL Problem

    Hallo zusammen,

    ich stehe vor einem etwas komischen Problem.

    Ich habe hier eine Kundendatenbank in der ich Daten eintrage (was auch funktioniert).

    Allerdings sobald ich diese ändern will gibt mir das System einen Fehler aus.

    Hier mal die wichtigsten Codes

    Das ist die Customer.php die die Anweisungen gibt.

    PHP-Code:
    <?php
    require_once('config.php');
    if(
    $core->is_logged_in()) {
     require_once(
    'lib/class.customers.php');
     
    $customers = new customers($conn$core$errorHandler);
     
     
    $do = (isset($_GET['do']) ? $_GET['do'] : 'overview');
     
    $tpl->assign('do'$do);
     
     if(
    $do == 'overview') {
     
      
    $tpl->assign('customers'$customers->load_all_customers());
      
     } elseif(
    $do == 'view' && isset($_GET['customer_id'])) {
     
      
    $tpl->assign('customer'$customers->load_single_customer($_GET['customer_id']));
     } elseif(
    $do == 'new') {
     
      if(
    $_SERVER['REQUEST_METHOD'] == 'POST') {
       
    $customers->add($_POST['firmname'], $_POST['name'], $_POST['surname'], $_POST['email'], $_POST['address'], $_POST['zipcode'], $_POST['city'], $_POST['phone']);
       
       if(!
    sizeof($errorHandler->get())) {
        
    $tpl->assign('success''Customer added.');
       } else {
        
    $tpl->assign('errors'$errorHandler->get());
        
    $errorHandler->reset();
        
        
    $tpl->assign('post'$_POST);
       }
      }
      
     } elseif(
    $do == 'edit' && isset($_GET['customer_id'])) {
      
      if(
    $_SERVER['REQUEST_METHOD'] == 'POST') {
       
    $customers->edit($_GET['customer_id'], $_POST['firmname'], $_POST['name'], $_POST['surname'], $_POST['email'], $_POST['address'], $_POST['zipcode'], $_POST['city'], $_POST['phone']);
       
       if(!
    sizeof($errorHandler->get())) {
        
    $tpl->assign('success''Customer edited.');
       } else {
        
    $tpl->assign('errors'$errorHandler->get());
        
    $errorHandler->reset();
       }
      }
      
      
    $tpl->assign('current'$customers->load_single_customer($_GET['customer_id']));
      
     } elseif(
    $do == 'delete' && isset($_GET['customer_id'])) {
     
      
    $customers->delete($_GET['customer_id']);
      
      if(!
    sizeof($errorHandler->get())) {
       
    header('Location: customers.php');
       exit();
      } else {
       
    $tpl->assign('errors'$errorHandler->get());
       
    $errorHandler->reset();
      }
      
     } 
     
     
    $tpl->display('_head.tpl');
     
    $tpl->display('_header.tpl');
     
    $tpl->display('customers.tpl');
     
    $tpl->display('_footer.tpl');
    } else {
     
    header('Location: login.php');
     exit();
    }
    ?>
    hier die class.customer.php die alle SQL anweisungen macht!

    PHP-Code:
    <?php
    class customers {
     private 
    $conn;
     private 
    $core;
     private 
    $error;
     
     private 
    $id;
     private 
    $firmname;
     private 
    $name;
     private 
    $surname;
     private 
    $email;
     private 
    $address;
     private 
    $zipcode;
     private 
    $city;
     private 
    $phone;
     
     function 
    __construct($conn$core$errorHandler) {
      
    $this->conn  $conn;
      
    $this->core  $core;
      
    $this->error  $errorHandler;
      
      
    $this->id '';
      
    $this->firmname '';
      
    $this->name '';
      
    $this->surname '';
      
    $this->email '';
      
    $this->address '';
      
    $this->zipcode '';
      
    $this->city '';
      
    $this->phone '';
     }
     
     public function 
    add($firmname$name$surname$email$address$zipcode$city$phone) {
      
    $this->setFirmname($firmname);
      
    $this->setName($name);
            
    $this->setSurname($surname);
            
    $this->setEmail($email);
      
    $this->setAddress($address);
      
    $this->setZipcode($zipcode);
      
    $this->setCity($city);
      
    $this->setPhone($phone);
      
      if(!
    sizeof($this->error->get())) {
       
    $res $this->conn->query("INSERT INTO customers (firmname, name, surname, email, address, zipcode, city, phone, date_added) VALUES ('".$this->firmname."', '".$this->name."', '".$this->surname."', '".$this->email."', '".$this->address."', '".$this->zipcode."', '".$this->city."', '".$this->phone."', ".time().")");
       
       if(!
    $res) {
        
    $this->error->set('Couldn\'t insert customer into database.');
       }
      }
     }
     
     public function 
    edit($id$firmname$name$surname$email$address$zipcode$city$phone) {
      
    $this->setId($id);
      
    $this->setFirmname($firmname);
      
    $this->setName($name);
            
    $this->setSurname($surname);
            
    $this->setEmail($email);
      
    $this->setAddress($address);
      
    $this->setZipcode($zipcode);
      
    $this->setCity($city);
      
    $this->setPhone($phone);
      
      if(!
    sizeof($this->error->get())) {
       
    $res $this->conn->query("UPDATE customers SET firmname = '".$this->firmname."', name = '".$this->name."', surname = '".$this->surname."', email = '".$this->email."', address = '".$this->address."', zipcode = '".$this->zipcode."', city = '".$this->city."', phone = '".$this->phone."' WHERE id = ".$this->id);
       
       if(!
    $res) {
        
    $this->error->set('Couldn\'t update customer (database failure).');
       }
      }
     }
     
     public function 
    delete($id) {
      
    $this->setId($id);
      
      if(!
    sizeof($this->error->get())) {
       
    $res $this->conn->query("DELETE FROM customers WHERE id = ".$this->id);
       
       if(!
    $res) {
        
    $this->error->set('Couldn\'t delete customer (database failure).');
       }
      }
     }
     
     public function 
    load_all_customers() {
      
    $q $this->conn->query("SELECT * FROM customers ORDER BY id DESC");
      
      if(
    $this->conn->num_rows($q)) {
       while(
    $assoc $this->conn->fetch_assoc($q)) {
        
    $assoc['formatted_id'] = sprintf('%06d'$assoc['id']);
        
    $items[] = $assoc;
       }
       return 
    $items;
      }
     }
     
     public function 
    load_single_customer($customer_id) {
      
    $this->setId($customer_id);
      
      if(!
    sizeof($this->error->get())) {
       
    $q $this->conn->query("SELECT * FROM customers WHERE id = ".$this->id." LIMIT 1");
       
       if(
    $this->conn->num_rows($q)) {
        
    $assoc $this->conn->fetch_assoc($q);
        
    $assoc['date_added'] = $this->core->format_date($assoc['date_added']);
        
    $assoc['formatted_id'] = sprintf('%06d'$assoc['id']);
        
        return 
    $assoc;
       }
      }
     }
     
     private function 
    setId($id) {
      if(
    ctype_digit($id)) {
       
    $this->id $id;
      } else {
       
    $this->error->set('Invalid id.');
      }
     }
     
      private function 
    setFirmname($firmname) {
      
    $firmname $this->core->escape($firmname);
      if(
    preg_match('/^[a-z0-9-\s]+$/i'$firmname) AND $firmname != '' AND strlen($firmname) <= 90) {
       
    $this->firmname $firmname;
      } else {
       
    $this->error->set('Invalid Firmname.');
      }
     }
     
     private function 
    setName($name) {
      
    $name $this->core->escape($name);
      if(
    preg_match('/^[a-z0-9-\s]+$/i'$name) AND $name != '' AND strlen($name) <= 30) {
       
    $this->name $name;
      } else {
       
    $this->error->set('Invalid name.');
      }
     }
     
     private function 
    setSurname($surname) {
      
    $surname $this->core->escape($surname);
      if(
    preg_match('/^[a-z0-9-\s]+$/i'$surname) AND $surname != '' AND strlen($surname) <= 50) {
       
    $this->surname $surname;
      } else {
       
    $this->error->set('Invalid surname.');
      }
     }
     
     private function 
    setEmail($email) {
      
    $email $this->core->escape($email);
      if(
    filter_var($emailFILTER_VALIDATE_EMAIL) AND $email != '' AND strlen($email) <= 255) {
       
    $this->email $email;
      } else {
       
    $this->error->set('Invalid e-mail.');
      }
     }
     
     private function 
    setAddress($address) {
      
    $address $this->core->escape($address);
      if((
    preg_match('/^[a-z0-9-\s]+$/i'$address) AND strlen($address) <= 90) OR $address == '') {
       
    $this->address $address;
      } else {
       
    $this->error->set('Invalid address.');
      }
     }
     
     private function 
    setZipcode($zipcode) {
      
    $zipcode $this->core->escape($zipcode);
      if((
    preg_match('/^[a-z0-9-\s]+$/i'$zipcode) AND strlen($zipcode) <= 10) OR $zipcode == '') {
       
    $this->zipcode $zipcode;
      } else {
       
    $this->error->set('Invalid zipcode.');
      }
     }
     
     private function 
    setCity($city) {
      
    $city $this->core->escape($city);
      if((
    preg_match('/^[a-z-\s]+$/i'$city) AND strlen($city) <= 30) OR $city == '') {
       
    $this->city $city;
      } else {
       
    $this->error->set('Invalid city.');
      }
     }
     
     private function 
    setPhone($phone) {
      
    $phone $this->core->escape($phone);
      if((
    preg_match('/^[0-9+-\s]+$/i'$phone) AND strlen($phone) <= 25) OR $phone == '') {
       
    $this->phone $phone;
      } else {
       
    $this->error->set('Invalid phone.');
      }
     }
    }
    ?>
    Im Prinzip geht es um den Firmennamen, in die SQL Datenbank wir er eingetragen, aber ändern lässt er sich nicht mehr über das Frontend.

    Seht ihr evtl. den Fehler?!

  • #2
    Zitat von chinty Beitrag anzeigen
    Allerdings sobald ich diese ändern will gibt mir das System einen Fehler aus.

    ...
    Seht ihr evtl. den Fehler?!
    Und warum verheimlichst du, um welchen Fehler es sich handelt? Oder soll das hier ein Quiz sein?
    Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

    Kommentar


    • #3
      Es geht darum das wenn ich den Kunden erstelle (über das Frontend) dieser erfolgreich in die Datenbank eingetragen wird. Allerdings wenn ich diesen ändern will über die Frontend Edit Funktion gibt er mir einen Fehler aus

      Invalid Firmname

      Und ich kann nichts speichern und der Firmenname wird aus der Datenbank gelöscht.

      Das ist der Fehler.

      Kommentar


      • #4
        Das ist ein Fehler generiert durch die Anwendung, entsprechend diese Zeile:
        preg_match('/^[a-z0-9-\s]+$/i', $firmname) AND $firmname != '' AND strlen($firmname) <= 90
        Hast du dich denn überhaupt schon auf Fehlersuche begeben?
        "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

        Kommentar


        • #5
          Zitat von chinty Beitrag anzeigen
          PHP-Code:
          $customers->edit($_GET['customer_id'], $_POST['firmname'], $_POST['name'], $_POST['surname'], $_POST['email'], $_POST['address'], $_POST['zipcode'], $_POST['city'], $_POST['phone']); 
          Schau mal vor obiger Zeile, was du überhaupt an Daten per POST bekommen hast:
          PHP-Code:
          echo '<pre>' var_export($_POSTtrue) . '</pre>'
          Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

          Kommentar


          • #6
            Zitat von mimomamu Beitrag anzeigen
            Schau mal vor obiger Zeile, was du überhaupt an Daten per POST bekommen hast:
            PHP-Code:
            echo '<pre>' var_export($_POSTtrue) . '</pre>'
            Sobald ich das eingebe erhalte ich folgendes

            PHP-Code:
            array () 
            Auf Fehlersuche habe ich mich begeben aber ich bin entweder Blind oder ich finde den Fehler nicht

            Kommentar


            • #7
              Ich hab dir doch die Bedingung gepostet, die den Fehler verursacht. Woran scheiterst du?
              "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

              Kommentar


              • #8
                Zitat von Chriz Beitrag anzeigen
                Ich hab dir doch die Bedingung gepostet, die den Fehler verursacht. Woran scheiterst du?
                Sorry ich bin kein Profi ich doktere gerade an einem Skript rum und sehe den Fehler wirklich nicht.

                PHP-Code:
                f(preg_match('/^[a-z0-9-\s]+$/i'$name) AND $name != '' AND strlen($name) <= 30) { 
                ist das selbe eine Zeile drunter wieso soll das dann bei Firm scheitern?!

                Kommentar


                • #9
                  Dein Screenshort zeigt
                  Invalid Firmname.
                  In deinem Quellcode ist also offenbar diese Methode dafür verantwortlich:
                  PHP-Code:
                  private function setFirmname($firmname) {
                    
                  $firmname $this->core->escape($firmname);
                    if(
                  preg_match('/^[a-z0-9-\s]+$/i'$firmname) AND $firmname != '' AND strlen($firmname) <= 90) {
                     
                  $this->firmname $firmname;
                    } else {
                     
                  $this->error->set('Invalid Firmname.'); // HIER WIRD DER FEHLER GESETZT
                    
                  }
                   } 
                  Da du in den else-Block gelangst, sind die if-Bedingungen zusammen offenbar nicht TRUE. Das heißt, entweder ist $firmname leer ($firmname != ''), $firmname hat mehr als 90 Byte (strlen($firmname) <= 90) oder der der Inhalt von $firmname hat Zeichen, die nicht erlaubt sind (erlaubt sind A-Z, a-z, 0-9, der Bindestrich (-) und Whitespace (also Leerzeichen, Zeilenumbruch etc.).

                  Wenn dir das als Hilfe nicht ausreicht, solltest du dein PHP etwas auffrischen.
                  "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

                  Kommentar


                  • #10
                    Zitat von Chriz Beitrag anzeigen
                    Dein Screenshort zeigt


                    In deinem Quellcode ist also offenbar diese Methode dafür verantwortlich:
                    PHP-Code:
                    private function setFirmname($firmname) {
                      
                    $firmname $this->core->escape($firmname);
                      if(
                    preg_match('/^[a-z0-9-\s]+$/i'$firmname) AND $firmname != '' AND strlen($firmname) <= 90) {
                       
                    $this->firmname $firmname;
                      } else {
                       
                    $this->error->set('Invalid Firmname.'); // HIER WIRD DER FEHLER GESETZT
                      
                    }
                     } 
                    Da du in den else-Block gelangst, sind die if-Bedingungen zusammen offenbar nicht TRUE. Das heißt, entweder ist $firmname leer ($firmname != ''), $firmname hat mehr als 90 Byte (strlen($firmname) <= 90) oder der der Inhalt von $firmname hat Zeichen, die nicht erlaubt sind (erlaubt sind A-Z, a-z, 0-9, der Bindestrich (-) und Whitespace (also Leerzeichen, Zeilenumbruch etc.).

                    Wenn dir das als Hilfe nicht ausreicht, solltest du dein PHP etwas auffrischen.
                    Weder noch, ich habe alles versucht und gemacht, aber es sollte alles TRUE sein. Das Feld ist nicht leer oder erfüllt sonst eine negative Bedingung das diese dann im Else Block endet.

                    Kunden kann ich ja anlegen die dann auch perfekt in der Datenbank landen.

                    Sobald ich den Kunden ändern will (Firmenname ändern) geht das nicht!

                    Kommentar


                    • #11
                      Was steht in $firmname? Relevant ist nicht was du eingetragen hast oder darin vermutest, sondern was var_dump() ausgibt! Wenn alles so laufen würde wie von dir behauptet, müsste es ja gehen. Tut es ja aber offenbar nicht ...
                      "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

                      Kommentar


                      • #12
                        preg_match('/^[a-z0-9-\s]+$/i', $firmname) AND $firmname != ''
                        In dieser Reihenfolge machen die Bedingungen ohnehin nicht viel SInn.
                        [COLOR="#F5F5FF"]--[/COLOR]
                        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                        [COLOR="#F5F5FF"]
                        --[/COLOR]

                        Kommentar


                        • #13
                          Zitat von chinty Beitrag anzeigen
                          Sobald ich das eingebe erhalte ich folgendes
                          PHP-Code:
                          array () 
                          Und jetzt übeleg mal, was das wohl heißen mag.

                          Zitat von Chriz Beitrag anzeigen
                          Was steht in $firmname?
                          Nichts, weil $firmname kommt von
                          PHP-Code:
                          $customers->edit($_GET['customer_id'], $_POST['firmname'], $_POST['name'], $_POST['surname'], $_POST['email'], $_POST['address'], $_POST['zipcode'], $_POST['city'], $_POST['phone']); 
                          und $_POST ist leer.

                          Oder mache ich zu große Schritte für chinty?
                          Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

                          Kommentar


                          • #14
                            Hi Chinty,

                            die Antworten hier sind zwar ein bischen schnippisch aber doch sehr aufschlussreich. Finde ich immer wieder interessant, wie Leute mit Megaklassen hantieren, dann aber die Basics nicht ganz drauf haben.

                            Also, die Validierung sagt 'nicht valide', wenn der Wert leer ist. Nun ist die Frage: Warum ist der Wert leer. Mein Tip: Schau Dir mal Dein Formular an. Vielleicht ist Deine form method auf GET gestellt und daher kein POST.
                            [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

                            Kommentar


                            • #15
                              Ja ich muss gestehen das ich wirklich nicht mitkomme.
                              Ich mache das ganze gerade für einen Freund von mir und naja is ist halt nicht so easy wie gedacht hier etwas zu erledigen.

                              Dennoch frage ich mich warum der Insert in die Datenbank funktioniert aber ein Update nicht?!

                              Denn bei den anderen Klassen seis Name oder Email funktioniert dies ja auch?!

                              Nein mein Formular ist auf POST gestellt

                              <h2 class="icon icon-pencil">Kunden bearbeiten</h2>
                              <form class="wide" action="" method="post"><fieldset>

                              <div class="fieldset">
                              <h5>Firmenname <span class="red">*</span></h5>
                              <input type="text" name="Firmname" maxlength="90" size="25" value="{$current.firmname|escape|stripslashes}" />

                              Kommentar

                              Lädt...
                              X