| 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! |
 |
|

26-06-2010, 00:14
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von gsc2010
dennnoch feuert das script mir immer noch fehler raus ....
|
… die du uns dann bitte immer mitteilst, inkl. der darin erwähnten Codezeile und ihrem näheren Kontext (ca. 3–5 Zeilen davor und danach).
__________________
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:15
|
|
gsc2010
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 23
|
|
bevor ich aber gehe, ich habe dann doch noch ne Frage :
PHP-Code:
// Maskierende Slashes aus POST entfernen $_POST = get_magic_quotes_gpc() ? array_map( 'stripslashes', $_POST ) : $_POST; // Inhalte der Felder aus POST holen $bild = $_FILES['bild'][$zielorg]; $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;
PHP-Code:
#### Funktion Datenbank-Eintragen if($_GET['action'] == 'upload') { $upload = uploader($_FILES['foto']['tmp_name'], $_FILES['foto']['name'], $_FILES['foto']['type']); if(substr($upload, strlen($upload)-4, 4) != '.jpg') { echo $upload; } else { $sql = "INSERT INTO `test` (`bild`,`name`, `nickname`, `alter`, `wohnort`, `msn`, `geschlecht`, `teampage`, `moderator`) VALUES ( " .$upload. ", '" .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. " )"; $result = mysql_query($sql); }}
Wäre dieser Ansatz denn richtig ?
Geändert von gsc2010 (26-06-2010 um 00:42 Uhr)
|

26-06-2010, 00:17
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Ob das richtig ist, hängt von der konkreten Implementierung der Funktion uploader ab.
Bitte keine Zitate für Code benutzen.
__________________
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:22
|
|
gsc2010
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 23
|
|
So habe ich die Funktion deklariert...
PHP-Code:
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 Jpg, 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; }
Der Rest ist nur noch html....
Geändert von gsc2010 (26-06-2010 um 00:41 Uhr)
|

26-06-2010, 00:29
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
zur besseren Lesbarkeit für dich und uns .. vermeide bitte 'blabla $variable ' ... das ist einfach schlechter Stil .. 'blabla '.$variable.' ...' ist meist besser lesbar - zumal meines Wissens nach php die Ersetzung in Zeichenketten mit ' ' gar nicht durchführt, sondern nur in Zeichenketten mit " " - dein Code würde also $variable im Text ergeben, statt durch den Wert der Variablen ersetzt zu werden
__________________
Wer LESEN kann, ist klar im Vorteil!
|

26-06-2010, 00:47
|
|
gsc2010
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 23
|
|
nachdem ich nun den Code mal umgewandelt habe,
also in das lesbare php hier im forum,
ich habe nun alle funktionen aus meinem Script drin, also hier im Forum.
Zum schluss ist das alles nur noch html...
wobei ich glaube,
das ich hier
PHP-Code:
<? echo '<form name="formular" enctype="multipart/form-data" action="'.$_SERVER['PHP_SELF'].'?action=upload" method="post" name="formular" id="formular">'; ?>
auch noch einen Denkfehler bestimmt habe.
Was mich irgendwie wundert, ist die Tatsache,
das ich 2x die sql-db abfrage,
ich denke mal,das das falsch ist...
Sorry der merkwürdigen Fragen aus eurer Sicht,
ich arbeite viel mehr mit Photoshop, und programmiere
sehr selten, wollte nur nicht auf vorgefertigte Sachen
zurückgreifen und mich dann damit rühmen....
Vllt könntet ihr mir den Weg in die richtige Richtung aufzeigen...
Vielen dank
|

26-06-2010, 00:48
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Zitat:
Zitat von eagle275
zumal meines Wissens nach php die Ersetzung in Zeichenketten mit ' ' gar nicht durchführt, sondern nur in Zeichenketten mit " "
|
Aber auch mit " werden nur Variablen ersetzt, es wird kein PHP-Code ausgeführt und somit funktioniert das oben vorgeschlagene
PHP-Code:
$sql.=" name='{mysql_real_escape_string( $name )}', ";
nicht.
|

26-06-2010, 01:02
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
und wie das funktioniert ....onemorenerd ...
ich verwende es in einem Import-Script für CSV-Daten einige 10tausend Mal - und jedesmal sieht der erzeugte $sql-String exakt so aus, wie man ihn sich wünscht ..
wobei es nochmal bedeutend an lesbarkeit gewinnt, wenn man analog zum englischen PHP-Manual folgendes tut
PHP-Code:
<?php
class sqlescaper {
function __get($value) {
return mysql_real_escape_string($value);
}
}
....
// im eigentlichen Code
$check=new sqlescaper;
...
// dann siehts so aus
$sql.=" name='{$check->$name}', ";
...
und @gsc
PHP-Code:
echo '<form name="formular" enctype="multipart/form-data" action="'.$_SERVER['PHP_SELF'].'?action=upload"
method="post" id="formular">';// einmal name="xyz" reicht völlig
__________________
Wer LESEN kann, ist klar im Vorteil!
Geändert von eagle275 (26-06-2010 um 01:22 Uhr)
|

26-06-2010, 01:09
|
|
gsc2010
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 23
|
|
so, eigentlich wollte ich ja raus gehen,
aber mein Ehrgeiz packte mich zur letzten Tat,
Für heute....
so sieht das komplette Script aus
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'][$zielorg]; $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; ## Überprüfung ## ist alles ok..? ## wenn ja, dann weiter ## 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 ); } ## Upload function uploader( $fotofile, $fotofile_name, $fotofile_type) { if($fotofile_type != 'image/jpeg' && $fotofile_type != 'image/pjpeg') { return $upload_log = 'Die Datei '.$fotofile_name.' Datei - Typ falsch!'; } // 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; } #### Ende
#### Funktion Datenbank-Eintragen if($_GET['action'] == 'upload') { $upload = uploader($_FILES['foto']['tmp_name'], $_FILES['foto']['name'], $_FILES['foto']['type']); if(substr($upload, strlen($upload)-4, 4) != '.jpg') { echo $upload; } else { $sql = "INSERT INTO `test` (`bild`,`name`, `nickname`, `alter`, `wohnort`, `msn`, `geschlecht`, `teampage`, `moderator`) VALUES ( " .$upload. ", '" .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. " )"; $result = mysql_query($sql); }} ## Ende ## Anfrage zusammenstellen der an die DB geschickt werden soll $sql = "INSERT INTO `test` (`bild`,`name`, `nickname`, `alter`, `wohnort`, `msn`, `geschlecht`, `teampage`, `moderator`) VALUES( " .$upload. ", '" .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
} else { echo "<h3>Der Datensatz konnte <strong>nicht</strong> hinzugefügt werden!</h3>"; print_r($sql); } }
?>
<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>
Und nun bin ich mit meinem Latein am Ende ... 
Frank
|

26-06-2010, 01:30
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
sehr abenteuerlich ..
warum schreibst du 2mal den quasi gleichen Datensatz in die Datenbank ?
und warum haben deine Formularbestandteile sowohl ein name-Attribut als auch ein ID-Attribut ...
PHP benutzt soweit ich weiß das name-Attribut ....
name="xyz" erzeugt mit POST abgeschickt einen Eintrag in $_POST['xyz'] mit dem Wert aus dem Eingabefeld dessen name eben xyz ist
__________________
Wer LESEN kann, ist klar im Vorteil!
Geändert von eagle275 (26-06-2010 um 01:35 Uhr)
|

26-06-2010, 01:34
|
|
gsc2010
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 23
|
|
wie gesagt, das ist ist mir auch aufgefallen...
ich hoffe mal, das es nicht zu abenteuerlich ist, bin in sachen php doch erst ein richtiger Anfänger - dennoch, und ich glaube das es der richtige Weg ist, ist es besser, wenn ich selber was versuche, anstatt irgendwelche vorgefertigten dinge, möchte das ja lernen...
würde mich dennoch freuen, wenn ihr eine konkrete Hilfe, bzw, einen lösungsansatz geben könntet, würde mich sehr freuen
[Edit]
Werde nun doch zu Bett gehen ...
Vllt fällt mir noch ne lösung ein, ich möchte an dem script nicht verzeweifeln...
und ich würde mich echt freuen, wenn ihr mir ein wenig Hilfe geben könntet,
Danke
[Edit ende]
Gute Nacht
Geändert von gsc2010 (26-06-2010 um 01:45 Uhr)
|

26-06-2010, 03:18
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Zitat:
Zitat von eagle275
und wie das funktioniert ....onemorenerd ...
|
Zitat:
PHP: Strings - Manual
When a string is specified in double quotes or with heredoc, variables are parsed within it.
|
Im Klartext: In double quoted strings werden Variablen durch ihren momentanen Inhalt (zu String gecastet) ersetzt. Es werden keine Funktionen aufgerufen oder sonstiger PHP-Code evaluiert.
Zitat:
|
ich verwende es in einem Import-Script für CSV-Daten einige 10tausend Mal - und jedesmal sieht der erzeugte $sql-String exakt so aus, wie man ihn sich wünscht ..
|
Das kann nicht sein.
Zitat:
wobei es nochmal bedeutend an lesbarkeit gewinnt, wenn man analog zum englischen PHP-Manual folgendes tut
PHP-Code:
$sql.=" name='{$check->$name}', ";
|
Hier ist $check eine Variable, $name ebenfalls. PHP ersetzt $name durch den Inhalt dieser Variablen und angenommen der wäre 'foo', dann ersetzt PHP $check->foo durch den Inhalt der Property foo des Objekts $check.
Das ist etwas völlig anderes als
PHP-Code:
$sql.=" bla {time()} bla";
wie du es weiter oben vorgeschlagen hast.
|

26-06-2010, 10:30
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
tja... nur das die Class sqlescaper gar kein Attribut / Property $name hat .. sondern über die __get($value)-Methode doch eine Funktion ausgeführt wird...
__________________
Wer LESEN kann, ist klar im Vorteil!
|

26-06-2010, 12:42
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Spielt doch gar keine Rolle, es ist trotzdem eine Variable, keine Funktion!
|
|
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
|