Anzeige

 kein Input in Datenbank


Anacondi

Erfahrenes Mitglied
#1
Hallo liebe PHP Gemeinde.
Habe ein Problem beim Input in Datenbank.
Die seite wird nach dem Submit mit einem Fehler angezeigt.
--->
kann diese Anfrage momentan nicht verarbeiten.
HTTP ERROR 500
----->
Hier mal ein Code:
PHP:
<?php
  $db = @new mysqli( "localhost", "Benutzername", "passwort", "Table" );
     if(!$db)
   {
    echo "<div class=\"meldung-fehler\">";
    echo "Verbindung zur Datenbank im Augenblick nicht möglich";
    echo "</div>";
    die();
   }
if($_POST["Eintragen"]==1)
   {  $titel = $_POST["Titel"];
      $beschreibung=$_POST["Beschreibung"];
      $kategorie=$_POST["Kateg"];
      $anzahl=$_POST["Anzahl"];
      $kosten=$_POST["Kosten"];
      $link=$_POST["Link"];
   
     $sql = "INSERT INTO images ('titel', 'beschreibung', 'kategorie', 'link', 'anzahl', 'kosten') VALUES (?,?,?,?,?,?)";

     $eintrag = $db->prepare( $sql );
     $eintrag->bind_param( 'ssssss', $titel, $beschreibung, $kategorie, $link, $anzahl, $kosten );
     $eintrag->execute();
     // Pruefen ob der Eintrag efolgreich war
        if ($eintrag->affected_rows == 1)
       {
       echo 'Der neue Eintrage wurde hinzugef&uuml;gt.';
       }
       else
      {
      echo 'Der Eintrag konnte nicht hinzugef&uuml;gt werden.';
      }
    }
?>
 

Kalito

Erfahrenes Mitglied
#2
ohne weitere Hinweise musst du den Code Abschnitt für Abschnitt durchtesten. 500 bedeutet, dass etwas syntaktisch nicht korrekt ist. Spontan würde ich auf den Verbindungsaufbau tippen.
 

EuroCent

KlappStuhl 2.0
#3
Kleiner Tipp:
PHP:
<?php
/* DEINE VARIABLE */
printf('<pre>%s</pre>', print_r('DEINEVARIABLE', true));

/* POST VARIABLE */
printf('<pre>%s</pre>', print_r($_POST, true));

/* $db VARIABLE */
printf('<pre>%s</pre>', print_r($db, true));
?>
Mit der Abfrage, debugge Ich sehr häufig und nimmt viel Arbeit bei der Suche nach Fehlern ab. :)
 

Anacondi

Erfahrenes Mitglied
#4
Ich habe jede einzelne Zeile ausgetestet.
der fehler scheint in diesem Abschnitt zu liegen. finde aber keinen...

PHP:
$sql = "INSERT INTO images ('titel', 'beschreibung', 'kategorie', 'link', 'anzahl', 'kosten') VALUES (?,?,?,?,?,?)";

     $eintrag = $db->prepare( $sql );
     $eintrag->bind_param( 'ssssss', $titel, $beschreibung, $kategorie, $link, $anzahl, $kosten );
     $eintrag->execute();
     // Pruefen ob der Eintrag efolgreich war
        if ($eintrag->affected_rows == 1)
       {
       echo 'Der neue Eintrage wurde hinzugef&uuml;gt.';
       }
       else
      {
      echo 'Der Eintrag konnte nicht hinzugef&uuml;gt werden.';
      }
ohne diesen Abschnitt gibt's keine Fehlermeldung. Zugriff auf Datenbank geht, hab mal ne testabfrage gemacht.
in der Datenbank gibt's in der Images Tabelle folgende untertabellen:
id (Autoincrement)
titel
bechreibung
kategorie
link
anzahl
kosten
Auch die Posts werden ornungsgemäß übertragen laut abfrage
 

Anacondi

Erfahrenes Mitglied
#7
Ich habe das ganze jetzt mal auf meinem alten Linux Server mit PHP5 getestet. da funktioniert es einwandfrei.
habe hier einen neuen Cloud Server mit php7 und da geht es nicht.
kann es sein, das man da bei php7 irgendwas umstellen muß, das man von aussen Daten eintragen kann?
Denn Datenbank Abfragen funktionieren, nur insert nicht.
Wenn ich aber direkt in der datenmank mit Benutzer root Daten eingebe geht es.
 

EuroCent

KlappStuhl 2.0
#8
Kommen nur Strings oder auch anderen Werte wie Integer oder Double?

Du deklarierst mit bind_param immer nur Strings. :)
Wenn Du wirklich alles an Strings hast, dann sollte er es genau so umsetzen.

Ist es PDO oder mySQLi?
 

Anacondi

Erfahrenes Mitglied
#9
Ich habe nun alles versucht und finde keine Lösung um ein Insert in die Datenbank zu bekommen.
Damit ihr einen überblick habt, was genau ich mache stelle ich mal alles genau vor.
1. Die Datenbank:
db.jpg

die Index.php :
PHP:
<?php
session_start();
$pdo = new PDO('mysql:host=localhost;dbname=XXXXX', 'XXX Benutzer', 'XXX Passwort');

    $email = $_POST['email'];
    $passwort = $_POST['passwort'];
    $passwort2 = $_POST['passwort2'];

  $passwort_hash = password_hash($passwort, PASSWORD_DEFAULT);
  $statement = $pdo->prepare("INSERT INTO users (email, passwort) VALUES (:email, :passwort)");
  $result = $statement->execute(array('email' => $email, 'passwort' => $passwort_hash));

      
        if($result) {     
            echo 'Du wurdest erfolgreich registriert. <a href="login.php">Zum Login</a>';
          
        } else {
            echo 'Beim Abspeichern ist leider ein Fehler aufgetreten<br>';
        }
?>

     <form action="" method="post">
     E-Mail:<br>
     <input type="email" size="40" maxlength="250" name="email"><br><br>

     Dein Passwort:<br>
     <input type="password" size="40"  maxlength="250" name="passwort"><br>

     Passwort wiederholen:<br>
     <input type="password" size="40" maxlength="250" name="passwort2"><br><br>

     <input type="submit" value="Abschicken">
     </form>
eine abfrage der per Hand eingefügten Daten aus der Datenbank funktioniert mit :
PHP:
 $sql = "SELECT * FROM users WHERE id = 1";
    foreach ($pdo->query($sql) as $row) {
      echo $row["email"];
    }
Datebnbank zugriff geht also.
Könnt ihr erkennen, wo der Fehler liegt ?
es kommt immer nur die Meldung: 'Beim Abspeichern ist leider ein Fehler aufgetreten
 

Kalito

Erfahrenes Mitglied
#11
Die Syntax sollte eigentlich passen.

Was kommt bei folgender Abfrage raus:
PHP:
$statement = $pdo->prepare("INSERT INTO users (email, passwort) VALUES (:email, :passwort)");
 $result = $statement->execute(array('email' => $email, 'passwort' => $passwort_hash));
var_dump($statement-> errorInfo());
hast du mal ein Insert nur mit E-Mail und Passwort auf der DB probiert?
 

Anacondi

Erfahrenes Mitglied
#12
dein Vorschal gab aus:
array(3) { [0]=> string(5) "HY000" [1]=> int(1364) [2]=> string(44) "Field 'vorname' doesn't have a default value" }

und ja ein insert mit nur Name und passwort ging auch nicht
 

Anacondi

Erfahrenes Mitglied
#13
Hmmm... ich verstehs gerade nicht. hab mal auf deinen Vorschlag hin alles aus der Datenbank genommen ausser emal und Passwort, und siehe da, der eintrag geht.

Aber die anderen einträge in der Datenbank brauch ich auch.
 

Anacondi

Erfahrenes Mitglied
#14
Rätsels Lösung endlich gefunden.
Es müssen bei allen Feldern, die in der Datenbank sind, und die nicht in dem Insert angesprochen werden von vorneherein Werte angegeben werden.


Danke für Eure Hilfe
Kann geschlossen werden.
 
Anzeige

Neue Beiträge

Anzeige