Eingabeformular - Problemchen
Steffi
- php
Hi,
ich habe ein Formular gebastelt bzw. gefunden, indem man via php/mysql Formulareingaben in die Datenbank schreiben, lesen usw. kann. Habe mir dazu einen localen Server (xampp) installiert, klappt auch alles wunderbar, nur hakt es an einer mir nicht bekannten Stelle.
Ich vermute folgender Abschnitt ist nicht richtig und verstehen tu ich ihn auch nicht, hoffentlich kann mir einer dabei helfen, insbesondere möchte ich wissen was dieser Abschnitt machen soll:
if(!(@copy($file["tmp_name"],dirname($_SERVER['PATH_TRANSLATED'])."/".$img.$id.$img_format_info))){
echo $error_goback; ..........
Danke im Voraus
:-)
Hallo Forum,
Ich vermute folgender Abschnitt ist nicht richtig und verstehen tu ich ihn auch nicht, hoffentlich kann mir einer dabei helfen, insbesondere möchte ich wissen was dieser Abschnitt machen soll:
if(!(@copy($file["tmp_name"],dirname($_SERVER['PATH_TRANSLATED'])."/".$img.$id.$img_format_info))){
echo $error_goback; ..........
Überlege dir folgendes:
Was gibt copy in welchem Fall zurück?
Welche Argumente nimmt copy?
Was steht innerhalb des bedingten Blocks?
Was wird also in welchem Fall dem Benutzer mitgeteilt?
Gruß
Alexander Brock
if(!(@copy($file["tmp_name"],dirname($_SERVER['PATH_TRANSLATED'])."/".$img.$id.$img_format_info))){
echo $error_goback; ..........Überlege dir folgendes:
Was gibt copy in welchem Fall zurück?
Welche Argumente nimmt copy?
Was steht innerhalb des bedingten Blocks?
Was wird also in welchem Fall dem Benutzer mitgeteilt?Gruß
Alexander Brock
Versteh ich immer noch nicht, weil ich nicht weiß was $_SERVER und
PATH_TRANSLATED bedeutet. ich hab zuerst überlegt ob es nicht $db_server heißen soll, weil $_SERVER gibts nicht in dem Script.
Mir ist (ein bisschen) klar, daß das eine if-abfrage ist und das wohl der file-eintrag, also dann die img, irgendwo hinkopiert werden soll...
Hi,
Versteh ich immer noch nicht, weil ich nicht weiß was $_SERVER und
PATH_TRANSLATED bedeutet.
nach was hast Du in der PHP-Dokumentation gesucht?
ich hab zuerst überlegt ob es nicht $db_server heißen soll, weil $_SERVER gibts nicht in dem Script.
Doch, gibt es. Garantiert.
Cheatah
Hi,
Versteh ich immer noch nicht, weil ich nicht weiß was $_SERVER und
PATH_TRANSLATED bedeutet.nach was hast Du in der PHP-Dokumentation gesucht?
ich hab zuerst überlegt ob es nicht $db_server heißen soll, weil $_SERVER gibts nicht in dem Script.
Doch, gibt es. Garantiert.
Cheatah
Ne, gibt es nicht, ehrlich. :-) Ich habe $db_server = "localhost" gefunden.
Ich nehme an, daß irgendwie der Pfad nicht stimmt. Soll ich mal anstelle von $_SERVER dann lieber "localhost" mal versuchen?
Hi,
nach was hast Du in der PHP-Dokumentation gesucht?
bitte beantworte diese Frage.
ich hab zuerst überlegt ob es nicht $db_server heißen soll, weil $_SERVER gibts nicht in dem Script.
Doch, gibt es. Garantiert.
Ne, gibt es nicht, ehrlich. :-)
Doch, gibt es, ehrlich. Das ist nicht abhängig vom Script, sondern von der PHP-Version. Ab einem - in ferner Vergangenheit liegenden - Punkt liegt in *jedem* Script $_SERVER vor.
Ich nehme an, daß irgendwie der Pfad nicht stimmt. Soll ich mal anstelle von $_SERVER dann lieber "localhost" mal versuchen?
Nein. Du sollst in der PHP-Doku nach $_SERVER suchen, und nach all den anderen Dingen, die Du nicht verstehst. Das ist der *Zweck* einer Dokumentation. Übrigens meine ich mit "suchen" _nicht_, dass Du ins Eingabefeld den Begriff eingibst, Enter drückst und aufgibst, falls nicht sofort das richtige Ergebnis kommt.
Cheatah
Jaaaaaannnnnnh! :-)
Ich hab noch nicht gesucht. Also gibt es da dann doch $SERVER, dann weiß ich nicht mehr weiter...
Vielleicht ein Gedanke noch: In dem Script wird einige Male
$file["tmp_name"] angegeben, weiter oben steht aber:
$file = $_FILES["file"]; Muß da nicht dann stehen:
$file = $_FILES["tmp_name"]; ???
Hi,
Ich hab noch nicht gesucht.
tue das bitte, bevor Du in einem Forum - egal in welchem - eine Frage stellst, und zwar immer. Ein Forum ist kein Dokumentationsersatz.
Also gibt es da dann doch $SERVER,
Nein, $_SERVER.
Vielleicht ein Gedanke noch: In dem Script wird einige Male
$file["tmp_name"] angegeben, weiter oben steht aber:
$file = $_FILES["file"]; Muß da nicht dann stehen:
$file = $_FILES["tmp_name"]; ???
'=' steht für eine Substitution. Du kannst das eine gleichwertig durch das andere ersetzen. Tust Du genau dies in der ersten Zeile, indem Du '$file' durch '$_FILES["file"]' ersetzt, was erhältst Du dann?
Cheatah
Vielleicht ein Gedanke noch: In dem Script wird einige Male
$file["tmp_name"] angegeben, weiter oben steht aber:
$file = $_FILES["file"]; Muß da nicht dann stehen:
$file = $_FILES["tmp_name"]; ???'=' steht für eine Substitution. Du kannst das eine gleichwertig durch das andere ersetzen. Tust Du genau dies in der ersten Zeile, indem Du '$file' durch '$_FILES["file"]' ersetzt, was erhältst Du dann?
Ich weiß nicht was eine Substitution ist, ich dachte immer das = bedeutet, daß das wie eine Variable gehandhabt wird.
Ich wollte $file = $_FILES["file"]; löschen und dafür
$file = $_FILES["tmp_name"]; hinschreiben, in der Hoffnung das es dann funktioniert.
Hi,
Ich weiß nicht was eine Substitution ist,
Mädchen, ich tippe mir hier die Finger mit "Wonach hast Du gesucht?" wund, und Du begreifst es immer noch nicht. Wenn Du etwas nicht verstehst, dann sollte Deine erste (ja, die erste!) Reaktion sein, eine geeignete Suchmaschine damit zu füttern - die der jeweiligen Dokumentation, die von SelfHTML, oder auch eine ganz allgemeine wie beispielsweise Google. Der erste Treffer dort bei der Suche nach "Substitution" führt bei mir zu Wikipedia, wo der Begriff ausführlich erklärt wird.
Ich wollte $file = $_FILES["file"]; löschen und dafür
$file = $_FILES["tmp_name"]; hinschreiben, in der Hoffnung das es dann funktioniert.
Nein, wild rumzuraten hilft nie. Solange Du nicht verstehst, was vor sich geht, ganz besonders nicht.
Cheatah
Nein, wild rumzuraten hilft nie. Solange Du nicht verstehst, was vor sich geht, ganz besonders nicht.
Ich verstehe, daß es besser geht wenn ichs verstehe. Das mach ich auch ganz Gewissenhaft mit meiner Homepage. Manchmal möchte ich aber einfach nur experemtieren und ein bisschen rumraten. :-) So zum Beispiel mit den Datenbanken.
Es ist ja so, daß dieses Script, welches aus mehreren besteht, soweit funktioniert, nur dieses eine script funktioniert nicht und ich weiß nicht warum.
Kannst Du mal drüber schauen?
Es handelt sich um ein Bilder-Voting-System. Funktioniert auch alles, nur ich bekomme immer die Ausgabe: "Dein Bild konnte nicht hochgeladen werden..............
<?
@include("config.php");
@mysql_connect($db_server,$db_user,$db_password) or die("Datenbankverbindung fehlgeschlagen");
@mysql_select_db($db_name) or die("Datenbankauswahl fehlgeschlagen");
echo $header;
echo "
<form action="create_new.php" enctype="multipart/form-data" method="post">
<table border="0" cellpadding="0" cellspacing="15" width="$img_width">
<tr>
<td colspan="2">";
if($_POST["submit"]){
$file = $_FILES["file"];
$name = $_POST["name"];
$email = $_POST["email"];
$comment = $_POST["comment"];
$error = false;
$error_file = false;
if(strlen($name) < 3){
$name = "<b>Mindestens drei Zeichen.</b>";
$error = true;
}
if(!ereg('[1]+@([-a-z0-9]+(.[-a-z0-9]+)*.[-a-z0-9]{2,6}|[[0-9]{1,3}(.[0-9]{1,3}){3}])$',$email)){
$email = "<b>Muss gültig sein.</b>";
$error = true;
}
if($file == ""){
$file = "<b>Keine Datei ausgewählt.</b>";
$error_file = true;
$error = true;
}
if(strlen($comment) < 3){
$comment = "<b>Mindestens drei Zeichen.</b>";
$error = true;
}
if(!$error_file){
$file_info = getimagesize($file["tmp_name"]);
$file_size = filesize($file["tmp_name"]);
if($file_info[0] > $img_width){
$message_width = "<b>{$file_info[0]} - Bild um ".($file_info[0] - $img_width)." Pixel zu breit.</b>";
$error = true;
}
else{
$message_width = $file_info[0]." Pixel - OK";
}
if($file_info[1] > $img_height){
$message_height = "<b>{$file_info[1]} - Bild um ".($file_info[1] - $img_height)." Pixel zu hoch.</b>";
$error = true;
}
else{
$message_height = $file_info[1]." Pixel - OK";
}
if($file_info[2] != $img_format){
$message_type = "<b>Bildformat muss $img_format_info sein.</b>";
$error = true;
}
else{
$message_type = $img_format_info." - OK";
}
if($file_size > $img_size){
$message_size = "<b>".number_format($file_size/1024,0,",","")." - Datei um ".number_format(($file_size - $img_size) / 1024,0,",","")." KB zu groß.</b>";
$error = true;
}
else{
$message_size = number_format($file_size/1024,0,",","")." KB - OK";
}
}
echo " </td>
</tr>
<tr>
<td>Name:</td>
<td>$name</td>
</tr>
<tr>
<td>E-Mail-Adresse:</td>
<td>$email</td>
</tr>
<tr>
<td>Bilddatei:</td>";
if(!$error_file){
echo "
<td> </td>
</tr>
<tr>
<td> - Breite:</td>
<td>$message_width</td>
</tr>
<tr>
<td> - Höhe:</td>
<td>$message_height</td>
</tr>
<tr>
<td> - Typ:</td>
<td>$message_type</td>
</tr>
<tr>
<td> - Größe:</td>
<td>$message_size</td>
</tr>";
}
else{
echo "
<td>{$file["name"]}</td>
</tr>";
}
echo "
<tr>
<td>Kommentar:</td>
<td>$comment</td>
</tr>";
$error_goback = "
<tr>
<td align="center" colspan="2">
<br><br>
<b>Dein Bild konnte nicht hochgeladen werden. Klicke <a href="JavaScript:history.back()">hier</a> um zum Formular zurückzukehren.</b>
</td>
</tr>";
if($error){
echo $error_goback;
}
else{
$row = mysql_fetch_array(mysql_query("SELECT id FROM $db_table_pictures ORDER BY id DESC LIMIT 0,1;"));
$id = $row["id"] + 1;
if(!(@copy($file["tmp_name"],dirname($_SERVER['PATH_TRANSLATED'])."/".$img.$id.$img_format_info))){
echo $error_goback;
}
else{
mysql_query("INSERT INTO ".$db_table_pictures." VALUES('$id','$name','$comment',0,0);");
mail($email,"Vielen Dank für dein Bild bei $title!","Dein Bild wurde erfolgreich bei $title hochgeladen!\n\nBild ansehen: {$url}index.php?show=$id\nTopliste ansehen: {$url}toplist.php\nBilder bewerten: {$url}\nBild hochladen: {$url}create_new.php","From: $webmaster <$webmaster>\n");
mail($webmaster,"Neues Bild bei $title","Es wurde ein neues Bild bei $title hochgeladen.\n\nName: $name\nE-Mail: $email\nKommentar: $comment\n\nBild ansehen: {$url}index.php?show=$id\nTopliste ansehen: {$url}toplist.php\nBilder bewerten: {$url}\nBild hochladen: {$url}create_new.php","From: $name <$email>\n");
echo "
<tr>
<td align="center" colspan="2">
<br><br>
<b>Dein Bild wurde erfolgreich hochgeladen! Klicke <a href="index.php?show=$id">hier</a> um zur Bildbewertung zu gelangen.</b>
</td>
</tr>";
}
}
echo "
</table>
</form>";
}
else{
echo "
Hier kannst du dein eigenes Bild hochladen und bewerten lassen.
<br><br>
</td>
</tr>
<tr>
<td>Dein Name:</td>
<td><input maxlength="50" name="name" size="30" type="text"></td>
</tr>
<tr>
<td>Deine E-Mail-Adresse:</td>
<td><input name="email" size="30" type="text"></td>
</tr>
<tr>
<td>Bilddatei wählen:</td>
<td><input name="file" size="30" type="file"></td>
</tr>
<tr>
<td valign="top">Kommentar:<br>(max. $comment_size Zeichen)</td>
<td><textarea cols="70" name="comment" onkeyup="this.value=this.value.slice(0,$comment_size)" rows="6"></textarea></td>
</tr>
<tr>
<td> </td>
<td><input name="submit" type="submit" value="Bild hochladen & bewerten lassen"></td>
</tr>
</table>
</form>";
}
echo $footer;
@mysql_close();
?>
-^!#$%&'*+/=?`{|}~._a-z0-9 ↩︎
Hi,
Ich verstehe, daß es besser geht wenn ichs verstehe.
das ist gut :-)
Manchmal möchte ich aber einfach nur experemtieren und ein bisschen rumraten. :-)
Ich habe die Erfahrung gemacht, dass Experimentierfreudigkeit in zwei Fällen etwas bringt: 1.) wenn man weiß, was man tut, und 2.) wenn man in der Lage ist, die Ergebnisse zu interpretieren. Alles andere ist wie das Spielen mit dem Essen: vielleicht lustig, aber kein bisschen nahrhaft.
Es ist ja so, daß dieses Script, welches aus mehreren besteht, soweit funktioniert, nur dieses eine script funktioniert nicht und ich weiß nicht warum.
Kannst Du mal drüber schauen?
Nein. Nicht nur, dass dazu jedwede Fehlerbeschreibung fehlt - "funktioniert nicht" deckt genau 0% einer Fehlerbeschreibung ab - sondern vor allem ist der Code um mehrere Seemeilen zu lang. Führe eine Problemanalyse aus, insbesondere durch Debug-Ausgaben, und verstehe, was passieren _sollte_ und was statt dessen passiert. Ermittle anschließend die Gründe, _warum_ dieses andere passiert - hier kann Dir der Erfahrungsschatz eines Forums weiterhelfen. Frage dazu aber _gezielt_ nach.
Cheatah
Grundlage für Zitat #631.
Nein. Nicht nur, dass dazu jedwede Fehlerbeschreibung fehlt - "funktioniert nicht" deckt genau 0% einer Fehlerbeschreibung ab - sondern vor allem ist der Code um mehrere Seemeilen zu lang. Führe eine Problemanalyse aus, insbesondere durch Debug-Ausgaben, und verstehe, was passieren _sollte_ und was statt dessen passiert. Ermittle anschließend die Gründe, _warum_ dieses andere passiert - hier kann Dir der Erfahrungsschatz eines Forums weiterhelfen. Frage dazu aber _gezielt_ nach.
Habe nun in den Scripten "!" und "@" bei "if(!(@copy........." und
ein "@unlink" entfernt.
Läuft jetzt alles prima, aber leider werden die Bilder nicht angezeigt, es kommt so ein kleines Bild mit einem Kreuz. Liegt es jetzt an chmode777? Ich betreibe es ja auf einen lokalen Server oder
liegt es an diesem "unlink"? Muß da evtl. "link" stehen???
Hallo,
»»if(!(@copy($file["tmp_name"],dirname($_SERVER['PATH_TRANSLATED'])."/".$img.$id.$img_format_info))){
echo $error_goback; ..........
mal schauen, was ich um diese Zeit noch hinbekomme ;-):
Entferne mal das '@'. Wenn ich mich recht entsinne unterdrückt das eine Fehlerausgabe für diesen Befehl. Falls sich in dem Skript noch mehr '@' befinden - weg damit, zumindest bis es läuft.
Prüf nach ob PHP wirklich alle Fehlermeldungen ausgibt (php.ini, weiteres in der PHP-Doku unter www.php.net, auch in Deutsch)
Zerlegen wir dies Stück Code mal.
Wir haben eine if-Anweisung. Die Bedingung in der if-Anweisung wird durch '!' negiert, das heißt aus TRUE wird FALSE und aus FALSE wird TRUE.
Wenn also der Teil in der Klammer FALSE zurückgibt, wird daraus durch '!' ein TRUE und das echo $error_goback; wird ausgeführt.
Innerhalb der der Klammern wird mit Dateien gearbeit. So wie es für mich aussieht (ohne weiteren Kontext) wird die Datei, deren Name im Array $file mit dem Key "tmp_name" angesprochen wird an eine andere Stelle kopiert. Der Name - Name meint hier den kompletten Pfad der Datei - der Datei setzt sich aus dem Rückgabewert der Funktion dirname, die als Parameter $_SERVER['PATH_TRANSLATED'] bekommt und einem "/" und dem Werten von $img, $id, und $img_format_info zusammen.
Der Ausdruck in den Klammern wird - wie in der Mathematik - zuerst ausgewertet. copy dürfte dabei - s. PHP-Manual - einen boolschen Wert zurückgeben. Dieser wird dann, wie bereits beschreiben negiert und, falls die Rückgabe von copy FALSE die Anweisungen in der Zeilen nach dem if ausgeführt.
Gruß
Stareagle
Innerhalb der der Klammern wird mit Dateien gearbeit. So wie es für mich aussieht (ohne weiteren Kontext) wird die Datei, deren Name im Array $file mit dem Key "tmp_name" angesprochen wird an eine andere Stelle kopiert. Der Name - Name meint hier den kompletten Pfad der Datei - der Datei setzt sich aus dem Rückgabewert der Funktion dirname, die als Parameter $_SERVER['PATH_TRANSLATED'] bekommt und einem "/" und dem Werten von $img, $id, und $img_format_info zusammen.
Oh, das ist sehr gut erklärt! :-)
Also, das mit dem kopieren dürfte ich verstanden haben. Ich vermute der Fehler liegt im Pfad.
Was bedeutet $_SERVER? In meinem Script kann ich nur
$db_server = "localhost" finden.
Was bedeutet PATH_TRANSLATED und dirname???