Fehlermeldungen bei insert Data beim Server

marcaurel

Mitglied
hey,

ich hab ein Problem mit zwei insertbefehlen wenn ich versuche diese auf einen Server betreiben. zunächst der erste quellcode:

Code:
<?php
include("connect.php");
 
$email = mysqli_real_escape_string($connect, $_POST['email']);
$passwort = mysqli_real_escape_string($connect, $_POST['passwort']);
$name = mysqli_real_escape_string($connect, $_POST[name]);

if($email == "" || $passwort == "" || $name == "" ||)
{
echo "Bitte f&uuml;llen Sie alle Felder aus!";
}
else
{
if($passwort != $_POST['passwort2'])
{
echo "Die Passwörter stimmen nicht überein!";
}
else
{
$dname = explode(".",$_FILES["datei"]["name"]);
$dnamesize = count($dname);
$upfile_ext = $dname[$dnamesize-1];
   
if($_FILES["datei"]["size"]>0 && $upfile_ext=="pdf")
{
$sql = "INSERT INTO daten (email, passwort, name) VALUES ('$email', '$passwort', '$name')";
if($connect->query($sql) === TRUE) {
$last_id = $connect->insert_id;

    copy($_FILES["datei"]["tmp_name"],"anz/$last_id.pdf");
    echo "Die Daten wurden erfolgreich hochgeladen  ";
}
else
{
    echo "Sie können Nur PDFs hochladen";
}
}
else
{
    echo "Sie können nur PDFs hochladen!";
}
}
}
?>

Hier bekomme ich jedesmal angezeigt, dass nur pdfs hochgeladen werden können, auch wenn ich im Formular ein solches auswähle.
Der zweite Code:

Code:
<?php
include("connect.php");
$id = mysqli_real_escape_string($connection, $_POST['id']); 
$vorname = mysqli_real_escape_string($connection, $_POST['vorname']);
$name = mysqli_real_escape_string($connection, $_POST['name']);
if($id == "" || $name == "" )
{
echo "Bitte f&uuml;llen Sie alle Felder aus!";
}
else
{
$sql = "INSERT INTO daten2 (id, vorname, name) VALUES ('$id', '$vorname', '$name')";
if($connection->query($sql) === TRUE) {

    echo "Die Daten wurden erfolgreich hochgeladen  ";
   
}
}
?>

Hier bekomme ich immer die Meldung zurück, dass ich alle Felder ausfüllen soll, auch wenn alle ausgefüllt wurden.

Bei beiden Codes bekomme ich nachdem ich sie auf einen Server hochgeladen habe Fehlermeldungen, obwohl beide bei Apache auf dem Pc funktioniert haben. Hat jemand vill eine Idee wo der Fehler liegen könnte?
 
Hi

zu Code1:

Die Meldung gibts zweimal. Es wäre hilfreich zu wissen, wo der Fehler auftritt (eine der Meldungen hat sowieso nichts mit PDF zu tun, sondern mit einem DB-Fehler ... einfach umschreiben)

Sonstiges:
Mehr konsistente Einrückung würde dir wahrscheinlich auch helfen. zB. zurzeit schauts wirklich so aus, als wären beide PDF-Meldungen bei dem PDF-if.
dnamesize kann 0 sein, dann hat man in der nächsten Zeile ein Problem mit dem -1 - Index
Statt für jedes Ding, was schiefgehen kann, ein weiteres else-Level machen, könnte man im Fehlerfall mit return/exit/die abbrechen und sonst einfach ohne else weitermachen.
Passwörter einfach so in DB speichern ist böse. Auch wenn dein Fall evt. nicht wichtig genug ist, um irgendwelche sinnvollen Sicherheitsmaßnahmen zu haben: Denk daran, dass viele Leute das selbe Passwort für mehrere Sachen verwenden. Siehe password_hash, bcrypt, Salts.

Zu Code 2:
Was gibt ein var_dump($_POST) aus?
 
hey, ich habe beides nun ausgetestet, zunächst zum 1. Code: hier wird von den beiden pdffehlermeldungen die obere von beiden immer angezeigt :/ und ich weiß nicht wie ich die wegbekommen kann.
beim zweiten Code bekomme ich folgendes zurück:
bei vardump bekomm ich folgendes zurück array(3) { ["id"]=> string(1) "1" ["vorname"]=> string(6) "Ludwig" ["name"]=> string(6) "Erhard" }
das bedeutet ja er erkennt dass alle Felder da ausgefüllt worden sind, warum gibt es dann trotzdem die Fehlermeldung :(?
 
und ich weiß nicht wie ich die wegbekommen kann.
Wie bereits gesagt gehts dort ja eigentlich um einen DB-Fehler ... ausgeben mit http://php.net/manual/de/mysqli.error.php

Übrigens hab ich noch was vergessen: $_POST[name] im ersten Code mit $_POST['name'] ersetzen

Und noch was fällt mir grad auf: Verwende UTF8, dann kannst du dir Sachen wie &uuml; sparen.
a) mit header() und b) im Editor einstellen

Zum zweiten Code ... hm. Was ergibt ein Dump der drei einzelnen Variablen ($id usw.)? Evt. gibts gar keine Connection...
 
ich hätte noch eine frage, bei dieser aktion soll ja ein pdf in ein Verzeichnis auf dem Server hochgeladen werden, der Server ist aber passwortgeschützt, muss daher irgendwo in dem phpdoc auf das serverpasswort verwiesen werden?:(
 
"Der Server ist passwortgeschützt" sagt leider nicht viel aus. Ich könnte da jetzt vermutlich mehrere hundert Dinge aufzählen, die auf Webservern Passwörter haben können...
Wenn du es manuell machen willst, wann und wo gibst du ein Passwort ein, um was zu machen?
 
sorry das war grad bissi unpräzise :D bin gefrustet weil ich den ganzen tag dran sitze :(

also der zweite Code ist abgeschlossen, da war es wirklich ein fehler bei der Connection (fehler beim benutzernamen in der connectdatei).

Bei dem ersten Code hab ich einige Probleme, da immer die Fehlermeldung mit Verbindung zur Datenbank kommt. daher war meine frage: der Webserver bei einsundeins, wenn ich dort etwas hochladen will, muss ich mich ja mit Passwort einloggen. Wenn also jemand anderes über das Formular ein pdf in ein Verzeichnis auf dem Server ablegen will, muss dann das PHPscript an irgendeiner stelle auch das Serverpasswort enthalten damit das funktioniert?
 
ich habs nochmal umgebaut aber ich bekomme den Fehler nicht hin, noch einmal die codes:
connectcode:
Code:
<?php
header("Content-Type: text/html; Charset-utf-8");

$dbhost = "xxx";
$dbuser = "xxx";
$dbpass = "xxx";
$dbname = "xxx";

$connection = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
    if(mysqli_connect_errno())
    {
    echo '<p>Verbindung zum MySQL Server fehlgeschlagen: '.mysqli_connect_error().'</p>';
    }
    else
    {
    echo '<p>Verbindung zum MySQL Server erfolgreich aufgebaut.</p>';
    }
?>

und das php:
Code:
<?php
include("connect.php");
  
$email = mysqli_real_escape_string($connection, $_POST['email']);
$passwort = mysqli_real_escape_string($connection, $_POST['passwort']);
$name = mysqli_real_escape_string($connection, $_POST['name']);
if($email == "" || $passwort == "" || $name == "" )
   { 
   echo "Bitte füllen Sie alle Felder aus!"; 
   } 
else
   {
   if($passwort != $_POST['passwort2'])
       { 
       echo "Die Passwörter stimmen nicht überein!"; 
        }
     else
        {
         $dname = explode(".",$_FILES["datei"]["name"]);
         $dnamesize = count($dname);
          $upfile_ext = $dname[$dnamesize-1];
          if($_FILES["datei"]["size"]>0 && $upfile_ext=="pdf")
           {
            $sql = "INSERT INTO daten (email, passwort, name) VALUES ('$email', '$passwort', '$name')";
             if($connection->query($sql) === TRUE) {
                   $last_id = $connection->insert_id;
                   copy($_FILES["datei"]["tmp_name"],"anz/$last_id.pdf");
                  echo "Die Daten wurden erfolgreich hochgeladen ";
                  }
                  else
                   {
                         echo "Sie können Nur PDFs hochladen!";
                    }
             }
             else
             {
                 echo "Fehler beim Datenbankladen";
              }
         }
   } 
?>

Wenn ich hier alle Felder ausfülle und ein PDF versuche hochzuladen bekomme ich die Fehlermeldung: fehler beim Datenbankladen angezeigt. Darüber steht aber die Meldung aus der Connect: Verbindung zum MySQL Server erfolgreich aufgebaut. :D beides ist irgendwie ein Widerspruch für mich und ich schaffe es nicht diesen zu beheben :/
 
Das mit dem Passwort ist nicht klarer,...

Zu den Fehlermeldungen: Wenn du meine Ratschläge befolgen würdest, hättest du gemerkt, dass du wieder mal eine falsch beschriftete Fehlermeldung erzeugt hast.
Dein "Nur PDFs hochladen!" ist ein Datenbankfehler (kein Datenbankladefehler, was auch immer das sein soll), und dein "Fehler beim Datenbankladen" ist eine ungültige hochgeladene Datei.

Dabei gibts das schon erwähnte Problem mit -1, außerdem ist da kein trim, kein strtolower (PDF vs pdf vs pDf), und außerdem gibts auch PDF-Dateien deren Name nicht mit .pdf endet (und .pdf-Dateien, die innen nicht PDF sind): Eine Mimetyp-Kontrolle wäre angebrachter.

(Und mit SQL-Injections und plain Passwörtern, wie schon erwähnt, geht mir grad die Motivation in diesem Thread aus.)

Bitte mir einfach glauben, dass man mit PHP schnell was hat was funktionierend ausschaut, aber trotzdem in jeder Hinsicht falsch ist.
 
Verzeihung ich glaube dir das, die Passwörter sind so vollkommen unsicher. die Sache ist nur die dass die Passwörter bei meiner Homepage nach einigen umbauten eignetl ziemlich nutzlos geworden sind und ich eher überlege die ganz rauszuwerfen und daher darauf keine mühe verwende.

Code:
<?php
function mime_to_ext($mime_type)
{
$_mimetypes['application/pdf'] = 'pdf';

if (isset($_mimetypes[$mime_type]))
{
return $_mimetypes[$mime_type];
}
 
return false;
 
}
?>

Eine mimetypkontrolle wäre dann soetwas?
 

Neue Beiträge

Zurück