PHP 2 Anfänger Probleme ;)

[o.0]

Lt. Commander
Registriert
Apr. 2008
Beiträge
1.056
Hallo,
ich bin grade dabei ein bischen PHP zu lernen und deswegen ein bischen am rumspielen mit den Möglichkeiten ;)

Hab 2 Dateien erstellt, eine mit einem Formular und eine die das sozusagen auswerten und dann was mit der Eingabe anstellen soll.

(In Datei 1 gibt man seinen Benutzernamen ein, dieser soll als "$nick" an Datei 2 gesendet werden, dort in die URL eingefügt werden, die entsprechende Datei von den last.fm Servern abgerufen werden und dann eine Art Liste angezeigt werden)


Datei 1:

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>o0</title>
</head>

<body>

<form action="last.php" method="post">
Benutzername:<br />
<input type="nick" /><br /><br />
<input type="submit" name="gesendet"/>
</form>



<div style="margin-top: 100px; margin-left: 100px;">
<? include ("last.php"); ?>
</div>


</body>
</html>


Datei 2:

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>o0</title>
</head>

<body>

<?php

$url = "http://ws.audioscrobbler.com/1.0/user/" . $nick . "/topartists.txt";

   $fp = fopen("$url","r");
   if ($fp)
   {
      while (!feof($fp))
      {
         $zeile = fgets($fp, 100);
		 list (, $anzahl, $interpret) = split ('[,]', $zeile);
         echo "$interpret:" . " $anzahl<br>";
      }
      fclose($fp);
   }
   else
      echo "Datei wurde nicht gefunden";
	  
?>


</body>
</html>

Meine Probleme sind jetzt:

1) Das Formular funktioniert nicht. Wenn ich einen Name eingebe und absende tut sich einfach nichts. Das Script in Datei 2 funktioniert allerdings, wenn ich von Hand ein
"$nick = blablabla" an dessen Anfang schreibe funktioniert es nämlich wie gewünscht.

2) Hab vermutet das mein erstes Problem vll an xampp liegt und die 2 Dateien auf meinen Webspace geladen. Dort funktioniert es aber noch weniger. "Datei wurde nicht gefunden" wird in dem <div> in Datei 1 angezeigt =[
Bei xampp stand dort wenigstens noch eine Fehlermeldung aus der hervorgeht das die Variable "$nick" es wohl irgendwie nicht in Datei 2 geschafft hat -.-^^


Naja, vll hab ich Anfänger die wichtigsten Sachen die ihr wissen müsst vergessen, wenn ihr noch Angaben braucht fragt bitte nach.
 
Hm ok, is korrigiert thx 0o^^
Funktioniert aber trotzdem noch genauso wenig wie vorher^^
 
Das Formular sieht dann also so aus:

HTML:
<form action="last.php" method="post"> 
Benutzername:<br /> 
<input type="text" name="nick" /><br /><br /> 
<input type="submit" name="gesendet"/> 
</form>

Um den Nicknamen auf der nächsten Seite auch benutzen zu können reicht es nicht, einfach $nick zu nehmen, denn in dieser Variable steht ja noch überhaupt kein Wert.
Den Wert erhält man aus dem assoz. POST-Array an der Stelle des Namens von dem gewünschten Eingabefeld (im Code das was in den [' '] steht). Um mit den Wert auszulesen brauchst du also noch diese Codezeile:

PHP:
	$nick	=	$_POST['nick'];

So sollte es klappen, bei weiteren Fragen immer her damit :)
 
Yeah thx^^ Jetzt funktioniert das soweit.. nur eben nicht auf dem Webspace sondern nur mit xampp -.- Weiß niemand wie ich das zum laufen krieg? Iwas umstellen?

Edit: F5 drücken wirkt Wunder.. -.-^^ Funktioniert alles wie gewollt, thx nochmal
 
Zuletzt bearbeitet:
Ok, doch nochmal ne Frage:

Wenn ich jetzt auf "Senden" klick, öffnet sich die andere Datei. Geht das nicht das sich diese zweite Datei in nen <div> auf der ersten Seite öffnet?
 
Hm geht das nicht iwie auch so mit PHP? Von Ajax hab ich gar keine Ahnung..
 
Das was du machen willst geht natürlich auch mit PHP.
Dazu brauchst du nichtmal eine zweite Datei, sondern packst alles in eine hinein.
Man benötigt lediglich eine IF-Abfrage, die prüft ob das Formular abgeschickt wurde.

Bei dem Formular änderst du die action="" auf die selbe Seite in der sich das Formular befindet, sodass die Seite sich nach dem Absenden also selbst wieder aufruft.

In das DIV darunter, in dem die Ausgabe statt finden soll, kommt jetzt die IF-Abfrage:

PHP:
if(isset ($_POST['absenden']))
{
 // Dein PHP Code aus "last.php"
}

Die Abfrage bedeutet folgendes: WENN das POST-Array an der Stelle "absenden" (Der Name des Absendenbuttons) einen Wert hat ( wird mit der Funktion isset() geprüft ), was nur dann der Fall ist, wenn das Formular abgesendet wurde, DANN soll deine Ausgabe statt finden.

Probiers mal aus :)
 
Oki funktioniert, thx ;)
Wenn ich noch Fragen haben sollte meld ich mich wieder :p
 
Nächstes Problem:

Ok, mein Script läuft jetzt (fast) so wie es soll.
Es läd die Datei mit den Top 50 eines Users bei last.fm und bastelt daraus dann eine Grafik mit den passenden Logos dazu (sofern ich die Band auch mag und deshalb ein Logo vorhanden ist =P)

PHP:
	//Nickname übergabe und URL zum Aufrufen der Daten generieren
	$nick = $_GET['name'];
	$bgcolor = $_GET['bgcolor'];
	$length = $_GET['length'];
	$url = "http://ws.audioscrobbler.com/1.0/user/" . $nick . "/topartists.txt";
	$fp = fopen("$url","r");
		
	

	//Top 50 Interpreten in Array abspeichern 
	
	if ($fp) {
		$i = 0;
		while (!feof($fp)) {
			$zeile = fgets($fp, 100);
			list (, $anzahl, $interpret) = split ('[,]', $zeile);
			$interpret = substr ($interpret,0,-1);
			$InterpretenArray[] = $interpret;
			$i++ ;
		}
		fclose($fp);	  
	}
	
	$img0 = ImageCreate (160, 1);
	imagecolorallocate ($img0, 239, 239, 239) ;
	$x = 0;


	//Prüfen ob die entsprechenden Bilder zu den Interpreten vorhanden sind und Logo erstellen
	
	for ($i=0; $i<50; $i++) {
		$adresse = "logos/" . $InterpretenArray[$i] . $bgcolor . ".gif";
	
		if (file_exists($adresse)) {
			
			if ($x < $length) {
				$logo   = imagecreatefromgif($adresse) ;
				$img1   = $img0 ;
				$hoehe1 = imagesy($logo);
				$hoehe2 = imagesy($img0);
				$hoehe3 = $hoehe1 + $hoehe2 ;
				$img0   = imagecreate(160, $hoehe3);
				ImageCopy($img0, $img1, 0, 0, 0, 0, 160, $hoehe2); 
				ImageCopy($img0, $logo, 0, $hoehe2, 0, 0, 160, $hoehe1); 
				$x++;
			}
			else {
			}
		} 	
		else {
		}
	}

	imagegif ($img0);
	ImageDestroy ($img0) ;

Klappt bei allen Interpretenlogos die ich habe. Bis auf 2:
L'âme Immortelle und Böhse Onkelz -.- Ich gehe mal davon aus das liegt an den ' und â und ö, oder?^^

Hat jemand eine Idee wie ich das hinbekomme? Hab jetzt schon alles versucht was mir oder google einfällt. Aber vll suche ich auch einfach nach dem falschen Begriff =/

Würde mich über Hilfe sehr freuen.

mfg
 
Zuletzt bearbeitet:
Hi,

wenn ich so ein Problem habe, baue ich mir immer überall Ausgaben der Zwischenschritte ein, um nachzuvollziehen, was das Skript genau macht.
An deiner Stelle würde ich einfach mal in das else von if (file_exists($adresse)) "echo "Die Adresse ist:" . $adresse;" reinschreiben, um zu sehen, wie die Adresse genau geschrieben ist, die er nicht finden kann.
Schau dann auch mal in den Quelltext, was nach dem "Die Adresse ist:" steht (Also ob die Umlaute, falls vorhanden, noch nicht umgewandelt sind).

Weiteres sehen wir dann :)
 
btr.fly schrieb:
Hi,

wenn ich so ein Problem habe, baue ich mir immer überall Ausgaben der Zwischenschritte ein, um nachzuvollziehen, was das Skript genau macht.
An deiner Stelle würde ich einfach mal in das else von if (file_exists($adresse)) "echo "Die Adresse ist:" . $adresse;" reinschreiben, um zu sehen, wie die Adresse genau geschrieben ist, die er nicht finden kann.
Schau dann auch mal in den Quelltext, was nach dem "Die Adresse ist:" steht (Also ob die Umlaute, falls vorhanden, noch nicht umgewandelt sind).

Weiteres sehen wir dann :)

thx für den Tipp, hab ich auch schon paar mal gemacht aber auf die Idee bin ich jetzt nich gekommen :freak:

Die Adresse ist: logos/UnheiligBlack.gif
Die Adresse ist: logos/EisregenBlack.gif
Die Adresse ist: logos/NachtblutBlack.gif
Die Adresse ist: logos/StaubkindBlack.gif
Die Adresse ist: logos/BetontodBlack.gif
Die Adresse ist: logos/BlutengelBlack.gif
Die Adresse ist: logos/ASPBlack.gif
Die Adresse ist: logos/Samsas TraumBlack.gif
Die Adresse ist: logos/EquilibriumBlack.gif
Die Adresse ist: logos/Die Apokalyptischen ReiterBlack.gif
Die Adresse ist: logos/EwigheimBlack.gif
Die Adresse ist: logos/ZeraphineBlack.gif
Die Adresse ist: logos/SchockBlack.gif
Die Adresse ist: logos/Death Before DishonorBlack.gif
Die Adresse ist: logos/RammsteinBlack.gif
Die Adresse ist: logos/Pro-PainBlack.gif
Die Adresse ist: logos/Saltatio MortisBlack.gif
Die Adresse ist: logos/QntalBlack.gif
Die Adresse ist: logos/TanzwutBlack.gif
Die Adresse ist: logos/Astral DoorsBlack.gif
Die Adresse ist: logos/In ExtremoBlack.gif
Die Adresse ist: logos/J.B.O.Black.gif
Die Adresse ist: logos/ElaneBlack.gif
Die Adresse ist: logos/CrematoryBlack.gif
Die Adresse ist: logos/KataklysmBlack.gif
Die Adresse ist: logos/EisheiligBlack.gif
GIF87a €ïïï, „�©Ëí£œ´®;

Die betreffenden Logos tauchen gar nicht erst auf.. 0o Überrascht mich jetzt iwie.. eigentlich hätte ich gedacht da kommt dann sowas wie logos/L'�me ImmortelleBlack.gif

0o
 
Hast du das "echo ..." auch in die else-Anweisung der if(file_exists(...))-Abfrage geschrieben? Oder wo ist das nun eingebaut?
Weil deine Ausgabe gibt ja wohl die Adressen wieder, die existieren.
Mich interessieren gerade die Adressen, die "nicht existieren", welche man nur erhält, wenn die if-Abfrage nicht zutrifft und das else{} benutzt. :)
 
Ah, sorry hatte ich überlesen >.<

Die Adresse ist: logos/Böhse OnkelzBlack.gif
Die Adresse ist: logos/L'Âme ImmortelleBlack.gif

Das ist es ja wohl dann =/
 
EDIT:
Alles unnötig, was hier vorher noch stand :D
Gerade habe ich folgendes gefunden, was dir sehr wahrscheinlich helfen wird:
http://forum.de.selfhtml.org/archiv/2006/2/t123669/

mit der Funktion utf8_decode() sollte es funktionieren.
Hier angewendet in der while-Schleife:

$InterpretenArray[] = utf8_decode($interpret);
 
Zuletzt bearbeitet:
Mh nein klappt so auch nicht.. kommt genau das gleiche wie davor auch.
Die Logos die vorher gingen gehen immernoch, die anderen genauso wenig. Auch wenn ich mit dem echo-Befehl teste kommt genau das gleiche wie davor 0o

Hab bischen gegoogled, htmlentities scheint ja auch nur für Zeichen die in HTML eine Rolle spiele gedacht zu sein..
 
btr.fly schrieb:
Hast du das gelesen, was noch davor im Post von mir stand?
Hatte ihn ja editiert und dann auf diesen Link hier verwiesen:
http://forum.de.selfhtml.org/archiv/2006/2/t123669/

Ne, hatte den Thread in nem Tab offen.. und irgendwann zwischen Taböffnen und posten hast du wohl editiert :freak:

Aber klappt so, vielen vielen Dank.. du hast mir echt sehr geholfen und alleine wäre ich da auch sicher nie drauf gekommen 0o
 
Sauber. Freut mich, dass ich helfen konnte und es jetzt geht. :)

Edit: Netter Musikgeschmack bei last.fm, höre ich auch viel von.
 
Zurück
Oben