| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

25-06-2010, 22:26
|
|
gsc2010
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 23
|
|
[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'] ) ? 0 : 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ä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ücksetzen</td> <td width="66%" align="right" valign="top"> <input type="submit" name="eintragen" id="eintragen" value="Eintragen" /> <input type="reset" name="button" id="" value="Eingaben löschen" /> </td> <tr> </table> </form> </body> </html>
Das ist die SQL
PHP-Code:
-- Tabellenstruktur für Tabelle `test` --
CREATE TABLE `test` ( `id` int(11) NOT NULL auto_increment, `bild` varchar(255) collate latin1_general_ci NOT NULL, `name` varchar(255) collate latin1_general_ci NOT NULL, `nickname` varchar(255) collate latin1_general_ci NOT NULL, `alter` tinyint(3) unsigned NOT NULL, `wohnort` varchar(255) collate latin1_general_ci NOT NULL, `msn` varchar(255) collate latin1_general_ci NOT NULL, `geschlecht` varchar(20) collate latin1_general_ci NOT NULL, `teampage` varchar(255) collate latin1_general_ci NOT NULL, `moderator` tinyint(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.
Geändert von gsc2010 (25-06-2010 um 23:07 Uhr)
Grund: Ich hiffe, das es nun hinhaut mit der zeichenlänge
|

25-06-2010, 22:30
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

25-06-2010, 22:33
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
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
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

25-06-2010, 22:58
|
|
gsc2010
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 23
|
|
ich hoffe, das das nun hinhaut, mit der zeichenlänge
|

25-06-2010, 23:02
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
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.
|

25-06-2010, 23:04
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
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.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

25-06-2010, 23:09
|
|
gsc2010
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 23
|
|
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
Zitat:
INSERT INTO `test`
(`bild`,`name`, `nickname`, `alter`, `wohnort`, `msn`, `geschlecht`, `teampage`, `moderator`)
VALUES( Array, '', '', 16, '', '', 'männlich', '', 1 )
|
Da sollte der Pfad stehen, zum Ordner....
Entweder habe ich jetzt einen kompletten Error im Kopf, oder ich weiss nimmer
Geändert von gsc2010 (25-06-2010 um 23:17 Uhr)
Grund: ergebnis laut print_r
|

25-06-2010, 23:20
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
Zitat:
Zitat von gsc2010
...
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 ...
__________________
Wer LESEN kann, ist klar im Vorteil!
Geändert von eagle275 (25-06-2010 um 23:25 Uhr)
|

25-06-2010, 23:25
|
|
gsc2010
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 23
|
|
Zitat:
// 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
|

25-06-2010, 23:30
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
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 ?
__________________
Wer LESEN kann, ist klar im Vorteil!
|

25-06-2010, 23:33
|
|
gsc2010
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 23
|
|
Zitat:
du willst ja nur einen der Einträge aus dem Array (vermutlich) .. also
$bild=$_FILES('bilder'][$index]; // welches ?
|
Kann ich ja eigentlich die Variable
Zitat:
|
$zielorg = "../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 ....
|

25-06-2010, 23:47
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Wie onemorenerd schon sagte: PHP: Dateiuploads mit POST - Manual
Das solltest… nein das musst du lesen.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

25-06-2010, 23:52
|
|
gsc2010
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 23
|
|
ok... Werde ich tun,
falls ich aber nicht weiter komme,
würdet ihr dann so nett sein, und mir helfen ... ??
Danke
|

26-06-2010, 00:03
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Klar, warum denn nicht? Wird aber im Idealfall nicht mehr nötig sein
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

26-06-2010, 00:09
|
|
gsc2010
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 23
|
|
ich werde mich morgen noch mal melden, habe das mit den Array´s zwar nun , dennnoch feuert das script mir immer noch fehler raus ....
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|