[PHP] Benötige Hilfe bei einem Script [Newbie]

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

  • [PHP] Benötige Hilfe bei einem Script [Newbie]

    Hallo Boardies,
    ich bin erst seit heute bei euch registriert, und habe mich durch verschiedene Tutorials gelesen.
    Und komme dennoch keinen Meter mehr weiter.

    Mein Vorhaben:
    Teampage mit Bildupload in eine Datenbank mit späteren Auslesen.

    Mein Problem:
    Das Formular funktioniert soweit,
    jedoch,es können keine Daten an die Datenbank geschickt werden,
    Grund : ich denke, das ich einen Fehler drin habe. Nur weiss ich nicht mehr weiter.
    PHP-Code:
    <?php
    ###### Config-Datei
    $db_host "localhost";  // Datenbank-Server
    $db_user "root";       // Benutzer
    $db_pass "";           // Passwort
    $db_name "test";       // Datenbank-Name
    /// Hier noch den Zielordner angeben
    $zielorg "../teampage/uploads/";
    /// Ab hier ist nichts mehr zu ändern!
    if (isset( $_POST['eintragen'] ))
    {
    // Maskierende Slashes aus POST entfernen
    $_POST get_magic_quotes_gpc() ? array_map'stripslashes'$_POST ) : $_POST;
    // Inhalte der Felder aus POST holen
    $bild $_FILES['bild'];
    $name $_POST['name'];
    $nickname $_POST['nickname'];
    $alter = (int) $_POST['alter'];
    $wohnort $_POST['wohnort'];
    $msn $_POST['msn'];
    $geschlecht $_POST['geschlecht'];
    $teampage $_POST['teampage'];
    $member = isset( $_POST['moderator'] ) ? 1;
    ##
    ##Check ob alles passt
    ##

    // Sind alle Eingaben durch die Validierung gekommen werden sie in die DB geschrieben
    // Verbindung oeffnen und Datenbank ausweahlen
    $conID mysql_connect$db_host$db_user$db_pass )
    or die( 
    "Die Datenbank konnte nicht erreicht werden!" );
    if (
    $conID)
    {
    mysql_select_db$db_name$conID );
    }
    // Anfrage zusammenstellen der an die DB geschickt werden soll
    $sql "INSERT INTO `test`
    (`bild`,`name`, `nickname`, `alter`, `wohnort`, `msn`, `geschlecht`, `teampage`, `moderator`)
    VALUES(
    .$bild",
    '" 
    .mysql_real_escape_string$name ). "',
    '" 
    .mysql_real_escape_string$nickname ). "',
    .$alter",
    '" 
    .mysql_real_escape_string$wohnort ). "',
    '" 
    .mysql_real_escape_string$msn ). "',
    '" 
    .mysql_real_escape_string$geschlecht ). "',
    '" 
    .mysql_real_escape_string$teampage ). "',
    .$member"
    )"
    ;
    // Schickt die Anfrage an die DB und schreibt die Daten in die Tabelle
    mysql_query$sql );
    // Pruefen ob der neue Datensatz tatsaechlich eingefuegt wurde
    if (mysql_affected_rows() == 1)
    {
    echo 
    "<h3>Der Datensatz wurde hinzugefügt!</h3>";
    // Hier kann weiterer Code stehen der ausgefuehrt werden soll
    // wenn ein Eintrag erfolgreich war. z.B. Email an den Admin schicken
    // der ueber den neuen Eintrag informiert
    }
    else
    {
    echo 
    "<h3>Der Datensatz konnte <strong>nicht</strong> hinzugefügt werden!</h3>";
    // Hier koennen Massnahmen ergriffen werden die ueber den Misserfolg informieren
    // wie z.B. den Benutzer darueber zu informieren, dem Admin eine Mail schicken
    // damit er sich um den Fehler kuemmern kann, etc pp
    }
    }
    function 
    uploader($fotofile$fotofile_name$fotofile_type)
    {
    if(
    $fotofile_type != 'image/jpeg' && $fotofile_type != 'image/pjpeg')
    {
    return 
    $upload_log 'Die Datei '.$fotofile_name.' ist nicht vom Typ Jpeg, sondern $fotofile_type!';
    }
    // Angabe Dateiendung
    $datei_ende '.jpg';

    // Foto speichern
    $zielorg .= substr($fotofile_name,0,strrpos($fotofile_name,'.')).$datei_ende;
    if(
    file_exists($zielorg))
    {
    return 
    $upload_log 'Die Datei '.$fotofile_name.' exsitiert schon auf dem Server!';
    }
    if(!
    move_uploaded_file($fotofile$zielorg))
    {
    return 
    $upload_log 'Ein Fehler beim Kopieren der Datei '.$fotofile_name.' ist aufgetreten!';
    }

    return 
    $upload_log $zielorg;
    }
    ?>

    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Formularinhalt in eine Datenbank schreiben</title>
    </head>

    <body>
    <?
    echo
    '<form name="formular" enctype="multipart/form-data" action="'.$_SERVER['PHP_SELF'].'?action=upload"
    method="post" name="formular" id="formular">';
    ?>

    <table border="1" bordercolor="#000" cellspacing="1" cellpadding="2" width="100%">
    <tr>
    <td width="34%" align="left" valign="top">Bild-Datei</td>
    <td width="66%" align="right" valign="top">
    <input name="bild" type="file" id="bild" size="28">
    </td>
    <tr>
    <td width="34%" align="left" valign="top">Name:</td>
    <td width="66%" align="right" valign="top">
    <input type="text" name="name" id="name" size="50" maxlength="60" value="" />
    </td>
    <tr>
    <td width="34%" align="left" valign="top">Nickname:</td>
    <td width="66%" align="right" valign="top">
    <input type="text" name="nickname" id="nickname" size="50" maxlength="60" value="" />
    </td>
    <tr>
    <td width="34%" align="left" valign="top">Altersangabe:</td>
    <td width="66%" align="right" valign="top"><select name="alter" id="alter">
    <?php for ($i=16$i<60$i++) { echo "<option>{$i}</option>"; } ?></select>
    </td>
    <tr>
    <td width="34%" align="left" valign="top">Wohnort :</td>
    <td width="66%" align="right" valign="top">
    <input type="text" name="wohnort" id="wohnort" size="50" maxlength="60" value="" />
    </td>
    <tr>
    <td width="34%" align="left" valign="top">MSN-Nickname :</td>
    <td width="66%" align="right" valign="top">
    <input type="text" name="msn" id="msn" size="50" maxlength="60" value="" />
    </td>
    <tr>
    <td width="34%" align="left" valign="top">Geschlechtsangabe:</td>
    <td width="66%" align="right" valign="top">
    <input type="radio" name="geschlecht" id="geschlecht_1" value="männlich" checked="checked" />
    M&auml;nnchen
    <input type="radio" name="geschlecht" id="geschlecht_2" value="weiblich" />
    Weibchen</td>
    <tr>
    <td width="34%" align="left" valign="top">Link zur Nickpage :</td>
    <td width="66%" align="right" valign="top">
    <input type="text" name="teampage" id="teampage" size="50" maxlength="60" value="" />
    </td>
    <tr>
    <td width="34%" align="left" valign="top">Moderator [ja / nein]</td>
    <td width="66%" align="right" valign="top">
    <b><u>J</u></b>a
    <input type="checkbox" name="member" id="member" /></td>
    <tr>
    <td width="34%" align="left" valign="top">Eintragen | Eingaben zur&uuml;cksetzen</td>
    <td width="66%" align="right" valign="top">
    <input type="submit" name="eintragen" id="eintragen" value="Eintragen" />
    &nbsp;&nbsp; <input type="reset" name="button" id="" value="Eingaben l&ouml;schen" />
    </td>
    <tr>
    </table>
    </form>
    </body>
    </html>
    Das ist die SQL
    PHP-Code:
    -- Tabellenstruktur für Tabelle `test`
    --

    CREATE TABLE `test` (
      `
    idint(11NOT NULL auto_increment,
      `
    bildvarchar(255collate latin1_general_ci NOT NULL,
      `
    namevarchar(255collate latin1_general_ci NOT NULL,
      `
    nicknamevarchar(255collate latin1_general_ci NOT NULL,
      `
    altertinyint(3unsigned NOT NULL,
      `
    wohnortvarchar(255collate latin1_general_ci NOT NULL,
      `
    msnvarchar(255collate latin1_general_ci NOT NULL,
      `
    geschlechtvarchar(20collate latin1_general_ci NOT NULL,
      `
    teampagevarchar(255collate latin1_general_ci NOT NULL,
      `
    moderatortinyint(1) default NULL,
      
    PRIMARY KEY  (`id`)
    ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=35 ;

    --
    -- 
    Daten für Tabelle `test`
    -- 
    Das ist mein kompletter Quellcode, und ich würde mich freuen, wenn ihr mir helfen könntet.
    Zuletzt geändert von gsc2010; 25.06.2010, 23:07. Grund: Ich hiffe, das es nun hinhaut mit der zeichenlänge

  • #2
    1. Bitte Code umbrechen!
    2. http://peterkropff.de/tutorials/php_...php_fehler.htm
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Hallo und willkommen im Forum,

      bitte zuerst die Forenregeln lesen und deinen Beitrag daran anpassen. Siehe auch den roten Link in meiner Signatur.

      Gruß,

      Amica
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar


      • #4
        ich hoffe, das das nun hinhaut, mit der zeichenlänge

        Kommentar


        • #5
          Mach mal ein var_dump($_FILES['bild']) gleich zu Beginn deines Scripts. Dann siehst du, dass das ein Array ist und es sollte dir klar sein, dass man ein solches Array nicht so in eine SQL-Query einbauen kann, wie du es machst.

          Lies dazu auch mal im PHP-Manual das Kapitel file upload.

          Kommentar


          • #6
            Sieh mal mit print_r nach, was in $bild (bzw. in $_FILES['bild']) wirklich drin steht. Darum solltest du auch die Forenregeln lesen, weil da unter anderem drin steht, wie man Fehler in SQL-Abfragen erkennt und behandelt.

            Edit: Ach Rik, du bist mir heute zu schnell.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              ich hoffe, das ich das heute noch hinbekomme...
              Vllt könnt ihr mir einen kleinen Tipp geben:
              das mit print_r
              verstehe ich schon, dennoch würde mich interessieren:
              a) ist mein script, so wie es da steht, über haupt läuffähig ?
              b) ist es nur ein Flüchtiger Fehler, den ich eingebaut habe, oder ein schwerer ?

              Danke der Antworten
              INSERT INTO `test`
              (`bild`,`name`, `nickname`, `alter`, `wohnort`, `msn`, `geschlecht`, `teampage`, `moderator`)
              VALUES( [COLOR="red"]Array[/COLOR], '', '', 16, '', '', 'männlich', '', 1 )
              Da sollte der Pfad stehen, zum Ordner....
              Entweder habe ich jetzt einen kompletten Error im Kopf, oder ich weiss nimmer
              Zuletzt geändert von gsc2010; 25.06.2010, 23:17. Grund: ergebnis laut print_r

              Kommentar


              • #8
                Zitat von gsc2010 Beitrag anzeigen
                ...
                Grund : ich denke, das ich einen Fehler drin habe. Nur weiss ich nicht mehr weiter.
                ich mach mal die Änderungen direkt in deinem Code ..
                PHP-Code:
                <?php
                ...
                // Es wundert mich ein wenig, dass du ohne Passwort auf deine DB zugreifst
                // ...ich hoff mal es ist kein Produktiv-System, sondern steht bei dir im Zimmer ohne Internet-Verbindung
                        // Anfrage zusammenstellen der an die DB geschickt werden soll
                        // Nach meiner Erfahrung ist es besser solche langes INSERT anders aufzubauen....
                        
                $sql "INSERT INTO test SET "// ID ist autowert
                        
                $sql.=" bild='{$bild}', ";
                        
                $sql.=" name='{mysql_real_escape_string( $name )}', ";
                        
                $sql.=" nickname='{mysql_real_escape_string( $nickname )}', ";
                        
                $sql.=" alter='{$alter}', "// sieht merkwürdig aus, klappt aber
                        
                $sql.=" wohnort='{mysql_real_escape_string( $wohnort )}', ";
                        
                $sql.=" msn='{mysql_real_escape_string( $msn )}', ";
                        
                $sql.=" geschlecht='{mysql_real_escape_string( $geschlecht )}', ";
                        
                $sql.=" teampage='{mysql_real_escape_string( $teampage )}', ";
                        
                $sql.=" moderator='{$member}' ";
                    
                        echo 
                $sql."<br>"// der berühmte Echo-Debugger ^^
                        // Schickt die Anfrage an die DB und schreibt die Daten in die Tabelle
                        
                $erfolg=mysql_query$sql );
                        
                // Pruefen ob der neue Datensatz tatsaechlich eingefuegt wurde
                        
                if ($erfolg===TRUE//besser als affectedRows  
                        
                {
                                echo 
                "<h3>Der Datensatz wurde hinzugefügt!</h3>";
                                ...
                        }
                        else
                        {
                                echo 
                "<h3>Der Datensatz konnte <strong>nicht</strong> hinzugefügt werden!</h3>";
                                ...
                        }
                    }
                ...
                das mit INSERT INTO x SET erleichtert dir das Einfügen von Daten in große Tabellen erheblich, weil mal leicht durcheinander kommt mit der richtigen Reihenfolge der Datenspalten die INSERT INTO x () VALUES () erfordert .. und die Schreibweise mit Backticks erzeugt bei mir ne Gänsehaut unter den Fußsohlen ^^

                Den Echo-Debugger darfst du selbstverständlich auskommentieren / löschen, sobald dein Script fehlerfrei macht, was du willst ...
                Zuletzt geändert von eagle275; 25.06.2010, 23:25.
                [font=Verdana]
                Wer LESEN kann, ist klar im Vorteil!
                [/font]

                Kommentar


                • #9
                  // Es wundert mich ein wenig, dass du ohne Passwort auf deine DB zugreifst
                  // ...ich hoffmal es ist kein Produktiv-System, sondern steht bei dir im Zimmer ohne Internet-Verbindung
                  Test-System ohne Zugriff von Ausserhalb ...
                  Deswegen ohne PW ....

                  Ich werde mal deinen Lösungsvorschlag ausprobieren...
                  Melde mich gleich wieder...
                  Danke

                  Kommentar


                  • #10
                    eehhhmm.. das mit $bild solltest du tatsächlich anpassen ..

                    du willst ja nur einen der Einträge aus dem Array (vermutlich) .. also

                    $bild=$_FILES('bild'][$index]; // welches ?
                    [font=Verdana]
                    Wer LESEN kann, ist klar im Vorteil!
                    [/font]

                    Kommentar


                    • #11
                      du willst ja nur einen der Einträge aus dem Array (vermutlich) .. also

                      $bild=$_FILES('bilder'][COLOR="red"][$index][/COLOR]; // welches ?
                      Kann ich ja eigentlich die Variable
                      [COLOR="red"]$zielorg[/COLOR] = "../teampage/uploads/";
                      eintragen,
                      und es soll nur der Verzeichnispfad in die SQL eingetragen werden und dann soll später das Script dieses komplett auslesen, aber im 2.ten Script...
                      Ich denke, das ich nun auf dem richtigen Wege bin,
                      man sieht ja manchmal den Wald vor lauter Bäumen nimmer ....

                      Kommentar


                      • #12
                        Wie onemorenerd schon sagte: PHP: Dateiuploads mit POST - Manual

                        Das solltest… nein das musst du lesen.
                        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                        Super, danke!
                        [/COLOR]

                        Kommentar


                        • #13
                          ok... Werde ich tun,
                          falls ich aber nicht weiter komme,
                          würdet ihr dann so nett sein, und mir helfen ... ??

                          Danke

                          Kommentar


                          • #14
                            Klar, warum denn nicht? Wird aber im Idealfall nicht mehr nötig sein
                            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                            Super, danke!
                            [/COLOR]

                            Kommentar


                            • #15
                              ich werde mich morgen noch mal melden, habe das mit den Array´s zwar nun , dennnoch feuert das script mir immer noch fehler raus ....

                              Kommentar

                              Lädt...
                              X