PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Der 'große' PHP-Thread



Malakai
06.04.2003, 05:02
Mir gehts öfters mal so das wenn ich was schreib und mir hinterher den code anschau, bemerke das ich das auch einfacher machen hätte können. z.b. SELECT anfragen o.ä.
Wie wärs wenn hier jeder mal seine kleinen Tipps und Tricks Postet?
Oder z.b. was man bei einer großen MySQL tabelle nie machen sollte, wegen trafficlast oder so...


mal schaun, wielange sich der thread hält :/

[EDIT]:
ich geb mal einen kleinen anstoß...^^
Wichtig finde ich immer auf Fehler vorbereitet zu sein:


Syntax Highlighting:


function queryDie($qry, $file = "unknown", $line = "unknown")
{
showError("Query-Error",
"Query-Error in File: '$file' at line $line<br>".
"$qry<br>" . mysql_error());

die();
}
function showError($title = "Unknown Error", $error = "")
{
?>
<table align="center" cellspacing="0" border="1" bordercolor="#000000" width="70%">
<tr class="error">
<th>
<? echo $title; ?>
</th>
</tr>
<tr class="error_additional">
<td>
<? echo $error; ?>
</td>
</tr>
</table>

<p align="center"><a href="java script:history.back(1)">Zurück</a></p>
<?
}
[...]

$qry = "Bla ...";

$res = mysql_query($qry) or queryDie($qry, __FILE__, __LINE__);



So weiss man schneller wo der Fehler aufgetreten ist...ist nur was kleines...aber sehr hilfreich ^^

Mithrandir Moon
06.04.2003, 16:27
huhu ^_^

nun gut, damit mache ich den 'großen PHP-Thread' auf ;), der brannte mir schon die ganze Zeit unter den Fingernägeln. Und mein erstes Anliegen, wie schreibe ich ein Script, mit dem ich unterschiedliche Bilder, zu unterschiedlichen Tageszeiten anzeigen kann? Also Problem ist folgendes, ich habe eine Grafik mit einer Sonne drauf (als Beispiel), und ich würde das Bild Abends (Nachts) durch ein Bild mit einem Mond austauschen.

Mir ist da gleich ein Random Picture Script eingefallen, ist ja nicht sonderlich schwer zu machen und gibts zu hauf, aber das Problem ist, ich will ja nicht die Bilder ständig bzw. bei jedem neu Laden wechseln lassen, sondern zu unterschiedlichen (Tageszeiten) und wie gesagt, Tagsüber und Abends/Nachts, halt Sonne und Mond.

Wie mach ich das und geht sowas überhaupt?

Cygnus
06.04.2003, 20:25
Original geschrieben von Mithrandir Moon
huhu ^_^

nun gut, damit mache ich den 'großen PHP-Thread' auf ;), der brannte mir schon die ganze Zeit unter den Fingernägeln. Und mein erstes Anliegen, wie schreibe ich ein Script, mit dem ich unterschiedliche Bilder, zu unterschiedlichen Tageszeiten anzeigen kann? Also Problem ist folgendes, ich habe eine Grafik mit einer Sonne drauf (als Beispiel), und ich würde das Bild Abends (Nachts) durch ein Bild mit einem Mond austauschen.

Mir ist da gleich ein Random Picture Script eingefallen, ist ja nicht sonderlich schwer zu machen und gibts zu hauf, aber das Problem ist, ich will ja nicht die Bilder ständig bzw. bei jedem neu Laden wechseln lassen, sondern zu unterschiedlichen (Tageszeiten) und wie gesagt, Tagsüber und Abends/Nachts, halt Sonne und Mond.

Wie mach ich das und geht sowas überhaupt?
Könnte man das nicht mit einer Zeitabfrage machen? *im Manual such*

So müsste es gehen:



//Beispiel:
//22 - 6 Uhr = Nacht
//6 - 12 Uhr = Vormittag
//12 - 18 Uhr = Nachmittag
//18 - 22 Uhr = Abend
$tageszeit = gettimeofday(); //gibt ein Array zurück
$stunde = $tageszeit['sec']/3600; //Umrechnung von Sekunden in Stunden
if ($stunde < 6 || $stunde >= 22)
echo '<img src="nacht.png">';
else if ($stunde >= 6 && $stunde < 12)
echo '<img src="vormittag.png">';
else if ($stunde >= 12 && $stunde < 18)
echo '<img src="nachmittag.png">';
else
echo '<img src="abend.png">';

So müsste es eigentlich gehen.

EDIT: Okay, Tippfehler ausgebessert:D

Chocwise
06.04.2003, 22:06
@ Cygnus:
Dein Script funzt, allerdings waren nen paar kleinere Tippfehler drin. ;)
$stunde = $tageszeit['sec']/3600;


Allerdings würde das Script nicht auf diesem unseren Server funktionieren da er im Amiland steht, die haben leider ihre PM/AM-Regelung. :(
Deswegen hab ich aus deinem Script mal ne Variante mit date("G") gebastelt.
date("G") gibt die aktuelle Stunde im 24-Stundenformat aus ohne bei einstelligen Zahlen eine "0" voranzustellen (z.B. 5 Uhr = 05).
So dürfte das Script ein wenig universeller einsetzbar sein. :)

<?php
//Beispiel:
//22 - 6 Uhr = Nacht
//6 - 12 Uhr = Vormittag
//12 - 18 Uhr = Nachmittag
//18 - 22 Uhr = Abend
$stunde = date("G");
if ($stunde < 6 || $stunde >= 22){
echo '<img src="nacht.png">';
}else if ($stunde >= 6 && $stunde < 12){
echo '<img src="vormittag.png">';
}else if ($stunde >= 12 && $stunde < 18){
echo '<img src="nachmittag.png">';
}else{
echo '<img src="abend.png">';
}
?>

Mithrandir Moon
08.04.2003, 00:23
Danke euch beiden, werds gleich ausprobieren. Außerdem werd ich den Thread mal anpinnen :D sonst vermodert der ja nur...

Cygnus
08.04.2003, 02:57
So, ich denke, ich poste mal den Link zum PHP-Manual (kann man immer brauchen):
Deutsche Version des PHP-Manuals (http://www.php.net/manual/de/)

Dingsi
25.04.2003, 01:56
Schöner Thread!!! :A Seh ich jetzt erst! :)
Also mein Prob:
Ich hab wohl das billigste PHP-Counter Script was möglich ist gemacht:


<?
$datei = fopen("counter.txt","r+");
$counterstand = fgets($datei, 10);
if($counterstand == "")
{
$counterstand = 0;
}
$counterstand++;
echo $counterstand;
rewind($datei);
fwrite($datei, $counterstand);
fclose($datei);
?>

Jetzt will ich eine Reload - Sperre (geht das überhaupt mit php) und eine User - SPerre (also , dass ein user nur einmal am tag gezählt wird)
Das mit der User - Sperre muss ich wohl mit Cookies regeln. (Mit Cookies kenn ich mich blos noch nicht aus. :p )

Chocwise
25.04.2003, 12:16
Original geschrieben von DragonThorm
Schöner Thread!!! :A Seh ich jetzt erst! :)
Also mein Prob:
Ich hab wohl das billigste PHP-Counter Script was möglich ist gemacht:


...

Jetzt will ich eine Reload - Sperre (geht das überhaupt mit php) und eine User - SPerre (also , dass ein user nur einmal am tag gezählt wird)
Das mit der User - Sperre muss ich wohl mit Cookies regeln. (Mit Cookies kenn ich mich blos noch nicht aus. :p )

Dies hier ist ein Script das IP's nach dem Zählen für 600 Sekunden blockt (dürfte nicht zu schwer sein es auf 24 Std. einzustellen), die IP's schreibts in eine Textdatei auf dem Server (also ohne Cookies):

<?php
$counter = "counter.txt";
$zeitfenster = 600;
$zeit=time($zeit);
$update="1";

$fp = fopen("counter.txt","r");
$i=0;
while (feof($fp)==0) {
$line=chop(fgets($fp,260));
$i++;
$testarray[$i]=$line;
}

fclose($fp);
$diff = $zeit-$testarray[3];
if (($diff) >= $zeitfenster) { $update="0"; }
if ($testarray[2] != $REMOTE_ADDR or $update == "0") {
$ftp = @fopen($counter,"r+");
$count = (int)fgets($ftp,100);
$count++;
rewind($ftp);
fwrite($ftp,"$count\n$REMOTE_ADDR\n$zeit\n");
fclose($ftp);
echo "<font face=Arial, Helvetica, sans-serif size=1>$count</font>";
}
else {
echo "<font face=Arial, Helvetica, sans-serif size=1>$testarray[1]</font>";
}
?>
Das Script ist nicht von mir, allerdings weiß ich auch nicht von wem des nu ist, ich hab mir das AFAIK mal aus irgendeinem Forum rauskopiert.
Alles was du machen musst, ist dieses Script dort in die Seite zu klatschen wo der Zähler angezeigt werden soll.
Und eine Datei namens counter.txt anzulegen und ihr den chmod 777 geben (wenn du auf einem Linux-System arbeitest).


Ein Script das auf Cookies zurückgreift hab ich leider nicht, allerdings dürfte das nicht all zu hart sein wenn man sich etwas über Cookies informiert:
http://www.php-center.de/de-html-manual/function.setcookie.html

Cookies sind nichts anderes als ein Variablen-Container.
Pro Cookie kannst du eine Variable + dem dazugehörigen Wert speichern.
Der Cookiename ist hierbei der Variablenname und der Cookiewert eben der Wert dieser Variable.

Theoretisch musst du jetzt einfach nur ein Cookie anlegen lassen per setcookie():

setcookie ("chkvar", "1", time()+3600); // 1 Std. gültig
Der somit angelegte Cookie ist also nichts anderes als das Variablen-Wertepaar: $chkvar = "1"; welches sich selbst nach 1 Std. vom Client-Comp löscht.
Du brauchst übrigens keine Funktion um einen Cookie vom Script wieder aufzurufen, der Browser baut das Variablen-Wertepaar automatisch ins Script ein solange der Uer die selbe Domain ansteuert von der aus der jeweilige Cookie gesetzt worden ist.

Jetzt baust du ein simples if()-Konstrukt das checkt ob die Variable $chkvar "1" ist:

<?php if($chkvar == "1"){
// in dem Falle soll sich nix tun.
}else{
// hier das jeweilige Counterscript einfügen:


// das hier ist die Cookiefunktion
setcookie ("chkvar", "1", time()+3600);
} ?>


Wenn die Variable $chkvar in dem Cookie also 1 und somit gesetzt ist, tut das Script gar nix, weder zählen, noch einen neuen Cookie anlegen.
sollte aber ein neuer User auf die Seite kommen der noch keinen Cookie hat, oder jemand der schon seit ner Stunde nimmer gezählt wurde, wird sein Visit gezählt und (wieder) ein Cookie angelegt der wiederrum verhindert das der User innerhalb einer Stunde nochmal gezählt wird.

Ob das wirklich so funktioniert weiß ich nicht genau, ich hab mir das jetzt mehr oder weniger anhand meiner Kenntnisse zusammengereimt, selbst getestet hab ichs noch nie, musst eben mal versuchen. ;)

Dingsi
25.04.2003, 20:55
Super, danke!
Das erste Script (ohne cookies) funktioniert ausgezeichnet!
Das zweite naja, da passiert nüx...

<?
if($chkvar == "1")
{
$datei = fopen("counter.txt","r+");
$counterstand = fgets($datei, 10);
echo $counterstand;
fclose($datei);
}
else
{
$datei = fopen("counter.txt","r+");
$counterstand = fgets($datei, 10);
$counterstand++;
echo $counterstand;
rewind($datei);
fwrite($datei, $counterstand);
fclose($datei);
setcookie ("chkvar", "1", time()+60);
}
?>Mir fällt gerade ein, dass die Zeitsperre , ja auch automiatisch dsa steigen des Zählers beim Reloaden verhindert. :)

Chocwise
26.04.2003, 00:45
Original geschrieben von DragonThorm
...
Mir fällt gerade ein, dass die Zeitsperre , ja auch automiatisch dsa steigen des Zählers beim Reloaden verhindert. :)
Also funktionierts nu mit der doppelten Sperre? :D

BTW: Ahja klar, ausgeben soll er den Zählerstand ja auch wenn nicht gezählt wird. :D
Gut das du dran gedacht hast. :)
Und schon verkleinert hast du das Script auch. :D
Ich glaub ich klau mir deines mal und packs mit in meine Bibliothek.

Dingsi
26.04.2003, 00:59
Da muss ich mich ja richtig geerht fühlen... http://www.multimediaxis.de/images/smilies/old/s_051.gif
Aber das Script mit den Cookies funktioniert nicht. :(
Das andere schon. http://www.multimediaxis.de/images/smilies/old/sm_12.gif

Chocwise
26.04.2003, 02:18
Original geschrieben von DragonThorm
...
Aber das Script mit den Cookies funktioniert nicht. :(
...
Hmpf...
Nunja, ich hab noch nie mit der Cookiefunktion gearbeitet, vielleicht findet sich ja noch jemand der sich wirklich damit auskennt. ;)

Virginie
28.04.2003, 01:12
Achtung, ich platze hier mal als absoluter PHP Newb rein und komme gleich mit einer äußerst dämlichen Frage:

Gibt es ein Newsscript, das nicht in Tabellenform ausgegeben wird?

Mein problem ist nämlich, dass irgendwie immer, wenn ich das Script einbinden möchte (ja, klein Virch macht das alles noch von Hand -_-), zerchießt es mir mein komplettes Design *schnüff*

Ich will wirklich nur ein ganz einfaches Newssystem haben http://www.multimediaxis.de/images/smilies/old/s_010.gif

Zack
02.05.2003, 05:03
moinsen. hab auch nochmal ne frage und ich denke das ganze passt hier gut rein. ich wollte langsam aber sicher mal mit php anfangen. habe mir auch schon ein wenig durchgelesen. das war aber eher für die schule und daher -leder gottes- etwas oberflächlich gehalten.
das ganze war das dokument erstellt von christoph reeg (www.reeg.net) nur, falls es jemanden was sagt. auf der arbeit haben wir auch ne kleine lektüre über php und mysql. diese ist abr leider eher für fortgeschrittene gedacht.... jetzt fehlt mir der übergang.... ich gräuchte am besten etwas für anfänger. von grund auf alles erklärt... (nicht unbedingt php für dummies)
kann mir da jemand eine passende lektüre empfehlen??

danke! :D

--
zack

N.2
02.05.2003, 12:10
@Virchowa:

Eines, das nicht auf Tables bsiert kenne ich nicht, aber du musst im PHP Quelltext einfach nur nach den HTML Tags Suchen, meist in echo "..."; oder <<<EOT ... EOT;

Wenn das dann z.B. so aussieht:


echo "<table width=\"400\">";

kannst du durch ändern der Zahl "400" die breite der Tabellen ändern.
Oder du machst eine ganz neue Tabell und übernimmst nur die Befehle für mySQL (oder was du halt verwendest), dann kannst du sie auch ohne Tabelle machen, z.B.


Title

Subtitle

Content

etc...

@Zack:
Hm, das einzig gute was ich kenne ist http://www.selfphp.info/ aber das ist mehr eine Funktionsreferenz, hat mir aber dennoch oft geholfen. Naja, siehs dir einfach mal an!

Zack
02.05.2003, 15:55
Original geschrieben von N.2
@Zack:
Hm, das einzig gute was ich kenne ist http://www.selfphp.info/ aber das ist mehr eine Funktionsreferenz, hat mir aber dennoch oft geholfen. Naja, siehs dir einfach mal an!

Hmm... soweit war ich inzwischen auch bschon, mir self php runterzuladen. allerdings ist es dabei vielmehr ein glossar, als es zb bei selfhtml der fall ist. ich dachte eher an ein richtiges buch (mal ne abwechslung), aus dem man von grund auf alles lernen kann.

wäre nett, wenn ihr mir hier eventuell auch ne isbn nummer hinposten könntet. ;)

--
zack

Chocwise
02.05.2003, 22:03
Original geschrieben von Zack
Hmm... soweit war ich inzwischen auch bschon, mir self php runterzuladen. allerdings ist es dabei vielmehr ein glossar, als es zb bei selfhtml der fall ist. ich dachte eher an ein richtiges buch (mal ne abwechslung), aus dem man von grund auf alles lernen kann.

wäre nett, wenn ihr mir hier eventuell auch ne isbn nummer hinposten könntet. ;)

--
zack
Ich hab auch nach diesem Tutorial von Christoph Reeg gelernt.
Das war im Grunde mein einziges PHP-Tutorial das ich mir durchgelesen hab, ein Buch hab ich über PHP nie gelesen.
Wenn man den Kram der in dem Tut. drinsteht zumindest zum größten Teil anwenden kann, ist man schon auf dem richtigen Weg.
Den Rest lernt man indem man in die Referenz schaut und sich mal informiert welche Funktionen und Befehle es so gibt.
Als Referenz empfehle ich Die, zum größten Teil, deutschsprachige chm-Datei in der man auch sehr gut suchen kann. (http://www.php.net/distributions/manual/php_manual_de.chm) (~3MB)
Wenn deren Anwendung zu komplex ist als das man aus der Beschreibung in der Referenz schlau werden könnte, reicht zumeist den Befehl + "PHP" in Google einzugeben.
So z.B. (http://www.google.de/search?hl=de&ie=ISO-8859-1&q=fwrite%28%29+PHP&btnG=Google+Suche&meta=lr%3Dlang_de)

Ansonsten: Ausprobieren, ausprobieren, ausprobieren. :D
Durch die ständigen Konfrontationen mit Fehler die zwangsläufig beim praktizieren des Trial&Error-Prinzips auftreten, hab ich mir mittlerweile ein gutes Gespür für die Fehlersuche angearbeitet. ;)

Dingsi
02.05.2003, 22:22
Ich habe die Grundsachen in PHP mit http://www.schattenbaum.net/php/ gelernt. Jetzt benutze ich eigentlich nurnoch http://selfphp.info/ als Befehlsreferenz.

Z.B. Wollt ich vor kurzem wissen wie ich eine Datei perPHP umbenenne gebe ich bei Suchen ein "Datei umbenennen" un schwups weis ich wie ich ne Datei umbenenne. lol

Zack
06.05.2003, 04:16
danke, danke für die sites. habe mir das von christoph reeg mal ausgedruckt und mal angesehen. ist eigentlich ja ausreichend material, was man da hat. habe mir dazu allerdings noch nen buch bestellt. "php und mysql-schritt für schritt zur datenbankgestützten website" von kevin Yank. bisher ist es imho nen recht empfehlenswertes buch. recht einfach für unerfahrene in dem gebiet erklärt. ich denke damit käme eigentlich jeder zurecht ^^''
*sinnlospost, ich weiß*

--
zack

Dingsi
07.05.2003, 23:37
Ich hatte vorm Umzug die Frage, ob und wenn ja wie man per PHP dateien auf den Server hochladen kann.

Irgendwer hatte auch geantwortet und meinte das er vielleicht ein skript hier posten wird.

Malakai
08.05.2003, 23:18
jaja...irgendjemand ^^
also...hier das script (trotz verspätung :D)



<html>
<body>

<form action='ftp_05.php3' method='post'>
<input type='file' size='30' name='local_file'><br>
<input type='submit' value='Upload'>
</form>

</body>
</html>

<?

if ($local_file)
put_file($local_file);


function put_file($local_file){

$my_user="admin"; //Username angeben
$my_pwd ="admin123"; //Passwort angeben
$my_host="ftp.microschrott.de"; //Server angeben


$remote_file=basename($local_file);

$ftp = ftp_connect( $my_host );

if (! $ftp ) {
echo "keine Verbindung zum Host " . $my_host;
} else {
$res = ftp_login( $ftp, $my_user, $my_pwd );
if (! $res){
echo "login nicht möglich";
} else {
echo "login bei <b>" .$my_host. " </b>erfolgreich";
}

ftp_put($ftp,$remote_file,$local_file,FTP_BINARY);

if (! $contents = ftp_nlist( $ftp, "." )){
echo"Verzeichnis ungültig oder nicht lesbar!";
} else {
echo "<br><b>Verzeichnisinhalt:</b><br>";
foreach ($contents as $var)
echo $var . "<br>";

}
ftp_quit($ftp);
}
}

?>


ich hab mal den code tag genommen..wegen leserlichkeit;)
also einfach die variablen ändern...dann gehts

Dingsi
08.05.2003, 23:25
Thx... ich probiers gleich mal aus.

EDIT: Funzt nicht :(

Warning: ftp_connect() [function.ftp-connect]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/muellet/public_html/htdocs/upload/upload.php on line 27
keine Verbindung zum Host dragonthorm.forum-hosting.info/
Ich versuchs mal weiter

Chocwise
10.05.2003, 10:46
Original geschrieben von DragonThorm
Thx... ich probiers gleich mal aus.

EDIT: Funzt nicht :(

Ich versuchs mal weiter
Ich hab hier eine Lösung ohne FTP-Connection:

<?php
$pfad = "/home/ordner/nochnordner/"; // wenn leer landets im selben Ordner wie das Script

if($upload == "1"){
copy("$datei", "$pfad$datei_name");
echo "Die Datei wurde erfolgreich hochgeladen";
}else{
?>
<form name="form1" method="post" action="<?php echo"$PHP_SELF";?>" enctype="multipart/form-data">
<input type="file" name="datei">
<br>
<input type="hidden" name="upload" value="1">
<br>
<input type="submit" name="Abschicken" value="Abschicken">
</form>
<?php } ?>
Das Script ist sofort einsatzbereit, musst nur die Variable "$pfad" anpassen. Denk auch noch daran den chmod des Zielordners auf 777 zu setzen.
Allerdings ist dieses Script von den Upload-Einstellungen in der php.ini deines Servers abhängig.
Auf den meisten Systemen steht die max. Uploadgröße auf 2 MB oder ist gar deaktiviert, wenn du Zugriff auf die php.ini des Servers hast, kannst du sie auf 20 MB einstellen, das ist AFAIK das Maschienenlimit, mehr ließe PHP nicht zu.

Dingsi
10.05.2003, 19:40
hey! danke chocwise! es klappt!

Chocwise
10.05.2003, 20:31
Original geschrieben von DragonThorm
hey! danke chocwise! es klappt!
Sei aber vorsichtig mit dem Scipt. So wie es ist würde ich es nicht für die Öffentlichkeit freigeben.
Wenn es für eine breite Öffentlichkeit möglich sein soll etwas auf deinen Server hochzuladen, solltest du noch ein paar Vorkehrungen treffen.
Zum einen empfehle ich dir, den Zielordner per .htaccess gegen Zugriff zu schützen (http://drweb.de/projektpflege/zugriffsschutz_1.shtml) damit niemand irgendwelche PHP-Scripte bei dir hochladen und Ausführen kann um damit jede Menge Schaden anzurichten.

Desweiteren würde ich noch das Uploadscript um eine Kontrollinstanz erweitern die verhindert das man .htaccess-Dateien hochladen kann:

<?php
$pfad = "/home/ordner/nochnordner/"; // wenn leer landets im selben Ordner wie das Script

if($upload == "1"){
if($datei_name == ".htaccess"){
echo"Nix da!";
}else{
copy("$datei", "$pfad$datei_name");
echo "Die Datei wurde erfolgreich hochgeladen";
}
}else{
?>
<form name="form1" method="post" action="<?php echo"$PHP_SELF";?>" enctype="multipart/form-data">
<input type="file" name="datei">
<br>
<input type="hidden" name="upload" value="1">
<br>
<input type="submit" name="Abschicken" value="Abschicken">
</form>
<?php } ?>

Dingsi
10.05.2003, 20:43
Das Script ist nicht für die Öffentlichkeit verfügbar. Das ist nur für einen Freund (Dem ich eine Seite einrichte). Der Hat keinen blassen schimmer von HTML,PHP oder geschweige den einer .htaccess Datei. :rolleyes:

rgb
15.05.2003, 03:23
Gibt es einen Befehl, wo man sehen kann, wer genau alles auf der HP war? am besten mit email-adresse?
Sowas hab ich heute bei GMX gelesen...

Malakai
15.05.2003, 03:37
du könntest die IP`s loggen..aber mehr AFAIK nicht. e-mail würde nur gehen, wenn du ein user-managmentsystem hat ^^..aber das willst eher nicht, oder?
von "anonymen" usern, die emails rauszubekommen ist AFAIK über kein script möglich

Dingsi
15.05.2003, 03:41
Original geschrieben von Malakai
von "anonymen" usern, die emails rauszubekommen ist AFAIK über kein script möglich
wär ja auch illegal...:rolleyes: oder? das gehört doch irgendwie...äh...postgeheimnis? ne.. privatsphäre? irgend sowas.

Malakai
15.05.2003, 04:29
privatspähre und internet gehen nicht zusammen! :D

wegen script...ich hab mal was ganz einfaches gemacht ^^



<?
$log_file_=_"ip.txt";_
$ip_=_getenv('REMOTE_ADDR');_
$fp_=_fopen("$log_file",_"a");
fputs($fp,_"$ip");
flock($fp,_3);_
fclose($fp);
//Das jetzt muss nicht umbedingt mit rein ;)
//echo("Deine IP wurde geloggt.....$ip");
_
?>


das script liest einfach die umgebungsvariable REMOTE_ADDR und speichert das ganze (zumindest sollte es das ~~) in ne txt datein rein (sollte CHMOD 777 sein)

ist nur ein anstoß ^^..ganz fertig ist es nicht

ansonsten würde ich das über SSI oder Perl realisieren

rgb
17.05.2003, 00:45
@ Malakai

Sorry aber das mit der Txt datei hab ich nicht verstanden-_- !!!
Kannst du mir das nochmal erklären§doz ?

hab aber gleich schon wieder ne Frage:p !!

Also: Hier in den Foren ist ja immer so ein Pulldownmenü und da neben ist so ein "los" Button.
Wie bekomme ich den Button hin?
Das menü hat n Kumpel von mir schon hinbekommen!!

Dingsi
17.05.2003, 01:19
Original geschrieben von Rpg_Goldenboy
Also: Hier in den Foren ist ja immer so ein Pulldownmenü und da neben ist so ein "los" Button.
Wie bekomme ich den Button hin?

Hättest doch nurn n Wörtchen sagen müssen. ;) Ich mach ihn dann mal. Kay?

EDIT:
Kopier einfach das Script und mach an den anfang des Skriptes das hier:

chmod ("ip.txt", 0777);
Das stellt die alle Rechte (Lesen,Schreiben,Ausfürhen) für alle Gruppen (Du,Gruppen,Benutzer) auf Lesen,Schreiben und Ausführen.
Achso, du musst vorher noch in dem Verzeichnis in dem dsa Script liegt eine Datei namens ip.txt erstellen. :)

Chocwise
17.05.2003, 06:36
Original geschrieben von Rpg_Goldenboy
...
Also: Hier in den Foren ist ja immer so ein Pulldownmenü und da neben ist so ein "los" Button.
Wie bekomme ich den Button hin?
Das menü hat n Kumpel von mir schon hinbekommen!!
*phew* Um deine HTML-Kenntnissse ists scheinbar noch nicht sehr gut bestellt. :D
Am elegantesten kommt man an die Antworten, nicht indem man im Forum fragt, sondern einfach mal die HTML-Seite runterzieht und im HTML-Editor öffnet. ;)

Sich im Patchwork-Stil seine HTML-Pages zusammenzukratzen ist auf lange Sicht keine Lösung und macht auf Dauer auch nicht sonderlich viel Freude.
Am Besten ist's mit den Basic's anzufangen -> SelfHTML (http://selfhtml.teamone.de/)
Sich einen guten Editor zum Üben suchen -> Dreamweaver (http://www.dreamworker.de/)
Dann fängt man mit beschämenden Müllseiten an -> Bäh! (http://www.wutzplanet.de/)
Und bahnt sich Stück für Stück mit jedem neuen Sitedesign den Weg zur -> Perfektion (http://www.squarenet.info/main.php?site=sn-news) :D

Das geht zwar nicht ganz so schnell wie Codefetzen zu sammeln und daraus eine Seite zu basteln, aber man hat das gute Gefühl ein eigenes Werk geschaffen zu haben, vom Lerneffekt mal ganz zu schweigen. :)


Aber für die faulen User:

<input type="image" src="bilddatei.jpg" border="0">

N.2
17.05.2003, 20:23
Verteufelt seien die, die Dreamweaver als gut bezeichnen;

Dieses Ding hat mir von anfang an nur Probleme bereitet, Tags, die völlig sinnlos sind in massen hinzugefügt...

Naja, wer sich das antun will;
Ich bleib bei meinem Notepad;

Chocwise
17.05.2003, 21:42
Original geschrieben von N.2
Verteufelt seien die, die Dreamweaver als gut bezeichnen;

Dieses Ding hat mir von anfang an nur Probleme bereitet, Tags, die völlig sinnlos sind in massen hinzugefügt...

Naja, wer sich das antun will;
Ich bleib bei meinem Notepad;
Dann ist dein Dreamweaver falsch eingestellt oder du kannst nicht damit umgehen.
Mein Dreamweaver hat noch nicht einen einzigen unnötigen Tag erstellt wenn ich es nicht wollte. :p:D

Malakai
17.05.2003, 23:42
da muss ich zustimmen...
ich arbeite seit 2 jahren mit dreamweaver 4 ultradev und es arbeitet einwandfrei und sauber. ansonsten benutze ich noch adobe golive, weil es ziehmlich gut für dynamische seiten ist.

@topic
hat eigendlich jemand schon mal was näheres zu dem gerücht um PHP 5.0 gehört?

Dingsi
17.05.2003, 23:58
Gerüchte? Das sind doch AFAIK schon Tatsachen.
Ein Artikel (http://www.strohhalm.org/.someon?action=ezine%2Fezine_article&aid=64)

@ Dreamweaver Topic:
Also ich arbeite zwar nicht viel mit Dreamweaver , aber die Sachen die ich mit DW mache sind Perfekt. Geiler Code, gutes Interface...was ist an DW schlecht?

Agony
18.05.2003, 00:14
ACHTUNG NOOB ALARM!

Also ich als absoluter PHP Noob (noch größer als Klein Viro :D), benutze auch DW 4 und ich kann nur sagen das ist ein wunderbares Prog.

Lucleonhart
23.05.2003, 20:16
moinsens! Also meine HP liegt auf dem 1und1 server, der wie es scheint nicht im geringsten php unterstützt...
zu testzwecken: www.lucleonhart.de/test.php

Da geht nichts. Kann ich da irgendwie direkt ein tool raufladen, das das geht? Mir geht es eigentlich nur darum, eine passwortabfrage zu machen (ein mitgliederbereich).
Thanks schonmal! :D

Malakai
23.05.2003, 22:45
hmm

...meistens ist bei den anbietern PHP erst ab dem premium-account o.ä. integriert.

wegen passwort, könnte man auch ein javascript mit MD5-krypto nehmen
KLICKME! (http://selfaktuell.teamone.de/artikel/javascript/md5/)

Chocwise
24.05.2003, 04:43
Wie schauts denn bei 1und1 mit .htaccess aus?
Mithilfe .htaccess' kann man ganze Verzeichnisarme per Passwort schützen.
Einen Versuch wäre es sicher wert:
http://drweb.de/projektpflege/zugriffsschutz_1.shtml

rgb
17.06.2003, 22:36
Hab auch mal wieder ne Frage:D :

Wie macht man das, dass man den Quelltext nicht mehr sehen kann?
Ich habe es schon hinbekommen, dass Rchtsklick deaktiviert wurde, aber man kann dann ja immer noch unter "Ansicht" den Quelltext anzeigen lassen:( weis jemand wie man das ausschalten kann?
Ich habe nämlich ein Java script womit ich Passwort mache, aber dass kann man ja im Quelltext dann sehen >:( :p

Weis jemand schlaues eine Lösung?

MFG

Rpg_Goldenboy8)

Malakai
17.06.2003, 23:00
geht eigendlich nicht. das einzige was du AFAIK machen kannst, ist den quelltext verschlüsseln. aber eigendlich soll der quelltext ja sichtbar sein, um dem eigendlichen anliegen des internets gerecht zu werden.

kannst du die psw-abfrage nicht über PHP machen (wenn du hier schon in den PHP-Thread postest ^^)? falls nicht, blätter einfach mal zwei,drei seiten in dem thread zurück. da hatten wir die frage nach einem passwortgeschützen bereich schonmal.

ohne PHP kannst du entweder über Javascript+MD5 arbeiten oder mit .htaccess

edit:

doch nicht zwei,drei seiten zurück...sonder GENAU DARÜBER ^^

Dingsi
07.07.2003, 00:03
Kleine Frage.
Was bringt einem eigentlich dieses Session_ID ding.
Bzw. wie kann man was damit anfangen?

Malakai
07.07.2003, 01:10
hmmm,

Sessions sind Sitzungsvariablen, das heißt das pro User der eine PHP Seite aufgerufen hat eine Sitzung angelegt wird. In dieser Sitzung kann man verschiedene Informationen speichern und diese Informationen auf jeder anderen Seite (z.b deiner eigenen Homepage) abfragen und somit die Benutzer eindeutig identifizieren.

Eine Session beginnt man mit session_start();
Hierbei wird nun die Automatische SessionID generiert und in einer Datei auf dem Server gespeichert. Zusätzlich wird diese SessionID entweder in einem Cookie auf dem Rechner des Benutzers gespeichert oder sie wird mit der URL oder in einem Formular immer wieder übergeben.

Ein Beispielchen:D:


<?php
session_register();
echo session_id();
?>



Hier wird nun die Session gestartet und anschließend die generierte Session ausgeben. Beim starten der Session ist darauf zu achten das kein HTML-Text vorher gesendet worden ist da das Cookie auf dem Client bei session_start gesetzt wird und PHP eine Fehlermeldung herausgibt.
Um es nochmal kurz zu sagen:
Im Prinzip sind Sessions eine andere Möglichkeit Benutzer zu identifizieren (wie bei Cookies).

Joah, mehr gibts dazu eigendlich nicht zu sagen´, aber vielleicht weiss Chocwise oder so da mehr. ^.^

so far...

Dingsi
07.07.2003, 01:15
Hm...also kann man das dafür benutzen, dass ein Benutzer länger auf einer Seite angemeldet ist? (Z.B. in nem Forum)

Malakai
07.07.2003, 01:23
jupp,

genau. Schau es dir am Besten mal in der Befehlsreferenz von PHP (http://www.php.net) an.

In meinem Forum (soll keine Werbung sein...nur ein Beispiel :D) benutz ich zur Zeit auch SID:



http://www.malakai-online.com/forum/viewtopic.php?p=1176&sid=0e2a6fcf6556564767383ggbbdcf5494f911f8#1176
(SID hab ich mal sicherheitshalber verändert ;))

Eigendlich, wie gesagt, nur um den Benutzer auf der Seite zu identifizieren.

so far...

Dingsi
07.07.2003, 01:30
Hm...
und wenn jemand die SID weitergibt?
Würde er dann unter dem Benutzernamen angemeldet sein, der diese SID "erzeugt" hat?
Das wär doch ziemlich unsicher. o_O

Malakai
07.07.2003, 01:36
hmm,

genau; deshalb hab ich ja die SID verändert. Aber da man eine TTL (Time to Live) festlegen kann, ist das nicht allzu problematisch. Ich würde dir empfehlen es einfach mal auf einem lokalen Webserver auzutesten;am bestem AMP-Konfiguration (Apache/MySQL/PHP)

so far...

Chocwise
07.07.2003, 07:07
Original geschrieben von Malakai
...
Joah, mehr gibts dazu eigendlich nicht zu sagen´, aber vielleicht weiss Chocwise oder so da mehr. ^.^
...
Nö, eigentlich nicht. Du hast mir sogar noch das eine der andere klar gemacht. ;)
Ich hab noch nie mit Session-ID's gearbeitet.
Ich hab PHP-Authenticate immer vorgezogen. Dabei bleibt der User 100% nur so lange eingeloggt wie er seinen Browser an lässt, schließt er den Browser ist der Spuk vorbei. ;)
Bei Session-ID's kann man sich da nicht so sicher sein. Ist die Verfallszeit zu großzügig eingestellt kann jemand der sich über die Verlaufliste nochmal reinklickt wieder Zugriff erhalten (UNI-Rechner, I-Netcafe's, ...).
Außerdem gibts den Vorteil das man die SID nicht ständig über Cookies, die URL oder Formularfelder weitergeben muss.

Wen's interessiert, hier der Code für PHP-Authenticates:

<?php
if($PHP_AUTH_USER!="login" OR $PHP_AUTH_PW!="password") {
Header('HTTP/1.1 401 Unauthorized');
Header('WWW-Authenticate: Basic realm="Intern"');
// Hier das was angezeigt werden soll wenn der Login falsch ist.
exit;
}
?>
Diesen Code immer an erster Stelle eines zu schützenden Dokuments einfügen.

Dingsi
07.07.2003, 20:31
Hey cool, ich wusste garnicht, dass man so eine PW abfrage auch mit PHP machen kann. Endlich kein gestresse mehr mit diesem dummen .htaccess.

Hm... Aber das ist nicht für ein Foren System oder ähnliches geeignet. Schrecktliche vorstellung, wenn man sich auf einmal so einloggen müsste. ;)

EDIT: Funktionieren da eigentlich auch kryptische (oder wie das heißt) PWs?

Dingsi
26.07.2003, 06:54
Ich nehme mal an, das ist kein OppelOst mehr.
Meine kleinen Fraegelschoes. XD
Ist es möglich über ein HTML-Formular PHP-Array zu übertragen? Wär cool.

Und das zweite:

if ($a_tac = "att") {
if ($b_tac == "def") {
echo "<br><br> Att und Def <br><br>";
}
else if ($b_tac == "att") {
echo "<br><br> Att und Att <br><br>";
}
}
else if ($a_tac = "def") {
if ($b_tac == "att") {
echo "<br><br> Def und Att <br><br>";
}
else if ($b_tac == "def") {
echo "<br><br> Def und Def <br><br>";
}
}
Okay...
wenn "att" und "att" führt er "Att und Att" aus.
bei "att" und "def" führt er "Att und Def" aus.
Aber wenn "def" und "att" sagt er seltsamerweise "Att und Att"
und bei "def" und "def" macht er "Att und Def"! >:(

Ich hoffe ihr versteht mein Prob. :(

Thx schonmal. :)

Chocwise
26.07.2003, 13:34
Original geschrieben von DragonThorm
Ich nehme mal an, das ist kein OppelOst mehr.
Meine kleinen Fraegelschoes. XD
Ist es möglich über ein HTML-Formular PHP-Array zu übertragen? Wär cool.
Sicherlich. Du musst nur als Namen für das Formularfeld die Typische Array-Form verwenden.
Sprich: Du willst z.B. eine Reihe Text-Eingabefelder verwenden deren Inhalt beim Absenden in einem Array gespeichert wird:


<input type="text" name="feld[1]">
<input type="text" name="feld[2]">
<input type="text" name="feld[3]">
<input type="text" name="feld[4]">
<input type="text" name="feld[5]">
<input type="text" name="feld[6]">
...
An PHP übergeben sind die Namen dann ein waschechtes Array mit Variable, Keys und Werten. ;)
Ich empfehl dir zur Lektüre nochmal das PHP-Manual (http://php3.de/manual/de/ref.array.php). Unter "Array-Funktionen" findet man nützliches Wissen und interessante Funktionen um die Arrays weiterzuverarbeiten. ;)


Und das zweite:

if ($a_tac = "att") {
if ($b_tac == "def") {
echo "<br><br> Att und Def <br><br>";
}
else if ($b_tac == "att") {
echo "<br><br> Att und Att <br><br>";
}
}
else if ($a_tac = "def") {
if ($b_tac == "att") {
echo "<br><br> Def und Att <br><br>";
}
else if ($b_tac == "def") {
echo "<br><br> Def und Def <br><br>";
}
}
Okay...
wenn "att" und "att" führt er "Att und Att" aus.
bei "att" und "def" führt er "Att und Def" aus.
Aber wenn "def" und "att" sagt er seltsamerweise "Att und Att"
und bei "def" und "def" macht er "Att und Def"! >:(

Ich hoffe ihr versteht mein Prob. :(

Thx schonmal. :)
Du hast ein einfaches Gleichheitszeichen bei den beiden if-Funktionen auf erster Ebene verwendet. Das bedeutet in etwa:
wenn, "$a_tac" soll sein "att", dann mache dies.
Sprich: Die If-Funktion stellt kein Vergeleich an wie du es möchtest, sondern gibt der Variable $a_tac den Wert "att" bzw. bei der else if-Abfrage auf der 1. Ebene anschließend den Wert "def" deswegen ist es egal was du an das Script übergibst, das Dingen setzt sich seine eigenen Werte.

Richtig wäre:

if ($a_tac == "att") {
if ($b_tac == "def") {
echo "<br><br> Att und Def <br><br>";
}
else if ($b_tac == "att") {
echo "<br><br> Att und Att <br><br>";
}
}
else if ($a_tac == "def") {
if ($b_tac == "att") {
echo "<br><br> Def und Att <br><br>";
}
else if ($b_tac == "def") {
echo "<br><br> Def und Def <br><br>";
}
}
Einfacher Tippfehler also scheinbar.



BTW: Lass mich dein Web-RPG mal anschauen wenn schon etwas erkennbar ist. ;)

Xander1303
27.07.2003, 18:37
Zum Thema Rechtsklick verhindern:
Das kann man leicht umgehen.
Man drückt beide tasten und lässte die rechte los, dann gehts^^

@Topic:

Ist es normal dass bei PHPMyAdmin auf nem local nicht eingeloggt werden muss?
Weil wenn man meine Domain aufruft(http://xander.dnyserv.com)und man hängt /phpmyadmin dran ist man schon im PHPMyAdmin, ohne einloggen.
Ich hab jetzt zwar ein Login Script gebastelt aber naja... ich hätte lieber den richtigen PHPMyAdmin Login.

Mfg Xander

P.S.: Kann sein, dass ihr nicht auf die Seite kommt weil mein Apache abstürzt, bzw mein PC =D

Chocwise
27.07.2003, 20:09
Original geschrieben von Xander1303
...Ist es normal dass bei PHPMyAdmin auf nem local nicht eingeloggt werden muss?
Weil wenn man meine Domain aufruft(http://xander.dnyserv.com)und man hängt /phpmyadmin dran ist man schon im PHPMyAdmin, ohne einloggen.
Ich hab jetzt zwar ein Login Script gebastelt aber naja... ich hätte lieber den richtigen PHPMyAdmin Login.

Mfg Xander

P.S.: Kann sein, dass ihr nicht auf die Seite kommt weil mein Apache abstürzt, bzw mein PC =D
PHPMyAdmin hat, soweit ich weiß, kein eigenes Authentication-System.
Ist auch irgendwo im Manual so erwähnt.
Es bleibt dem Webmaster/Administrator überlassen wie er sein PHPMyAdmin schützt.
Ich persönlich benutze .htaccess, auch hier auf unserem Webserver ist unser PHPMyAdmin per .htaccess geschützt.
Du kannst allerdings auch ein PHP-Authetication-System einbauen wenn du magst und kannst, .htaccess ist aber wesentlich komfortabler.

dead_orc
22.01.2005, 09:52
Ich weiß, dieser Thread ist uralt (hab ich so nicht schonmal einen aus der Versenkung geholt? *kratzamkopf*) aber ich finde, dass er ein wichtiges und gutes Thema hat - nur jetzt halt im falschen Forum. Ich hoffe, das ein Mod ihn ins Webseiten-Forum verschiebt (da wird sicherlich auch wieder in ihn gepostet) und ihn dort evtl. sogar anpinnt.

Hoffe, ich bin nicht der einzige dem das so geht :)

Zack
22.01.2005, 10:16
jo... schauen mer mal.
wenn du ihn schon aus der versenkung holst, versuchen mer´s ma....
mach das aber nu bitte net mit jedem alten thread so, der nicht ins pcf passt. irgentwo müssen da noch 100te von webspace, pcspiele, html etc threads rumschwimmen....

--
zack

Chocwise
22.01.2005, 11:25
Nur sollte hier drin nicht jedes PHP-Problem besprochen werden. Bei kleineren Fragen ist das sicherlich ok, aber bei tiefgreifenderen Dingen, ist ein eigener Thread schon ok. Sonst geht die Übersicht flöten für all jene die sich die Threadtitel anschauen um zu sehen ob sie so bereits Antwort finden können.

Pinnen? Hmh... Muss ich mir noch überlegen.

dadie
22.01.2005, 12:19
Pinnen? Hmh... Muss ich mir noch überlegen.

ICh wäre für keinen Pin weil die gepinten topic HÄUFIG übersehn werden :(

Aber damit das nett nur ein Sinnloser Post wird habe ich eine Frage,
undzwar will ich einen ganzen Ordner auslesen bzw. den Dateninhalt (in MiB , KiB usw.)
Das müsste recht einfach über ein function´s Script gehn nur wie ?

Für Daten habe ich es bisher so Gelöst



function Get_data_size($URL)
{
$Groesse = filesize($URL);
if($Groesse<1000)
{
return number_format($Groesse, 0, ",", ".")." Bytes";
}
elseif($Groesse<1000000)
{
return number_format($Groesse/1024, 1, ",", ".")." kB";
}
else
{
return number_format($Groesse/1048576, 2, ",", ".")." MB";
}
}



Nur wenn ich da einen Ordner reinlade kommt immer 4,0 kb raus :(

Dingsi
22.01.2005, 12:44
function dirsize($a_dir)
{
$size = 0;
$dir = opendir($a_dir);
while($file = readdir($dir))
{
if($file != "." && $file != "..")
{
if(is_dir($file)) $size += dirsize($a_dir."/".$file);
else $size += filesize($a_dir."/".$file);
}
}
closedir($dir);
return $size;
}
echo dirsize("ordner/");Ergebnis noch in Bytes. Kannst du ja selber in Ki/Mi/Gi-B umwandeln, denke ich. Achtung! Ungetestet - kön nte eine infinite Schleife sein.

Ah. Meine Funktion hat ein paar Fehler, merk ich grad, als ich dead_orcs gesehen hab.
Strange, meine Funktion ist komplett hier ungetestet von Hand ins Forum geschrieben und sieht genauso aus wie die von dieser "PHP-Homepage". o_ô.

dead_orc
22.01.2005, 12:52
http://www.multimediaxis.de/images/smilies/old/sm_12.gif
War mir schon klar, dass hier nicht alle PHP-Probs rein sollen, aber kleine Fragen nach einer Funktion z.B. wäre hier denke ich besser als in einem neuen Thread aufgehoben.

@dadie:
Willst du die Gesamtgröße des Verzeichnisses? Dafür kannst du leider nicht einfach filesize() verwenden, sondern musst dir eine Funktion bauen (bzw. von der PHP-Homepage klauen):

<?php
function dirsize($dirName = '.') {
$dir = opendir($dirName);
$size = 0;

while($file = readdir($dir)) {
if ($file != '.' && $file != '..') {
if (is_dir($file)) {
$size += dirsize($dirName . '/' . $file);
} else {
$size += filesize($dirName . '/' . $file);
}
}
}
closedir($dir);
return $size;
}
?>
(Ich musste das Skript ein bisschen verändern, weil der Typ mit Objekten gearbeitet hat)
Sollte so funktionieren

dadie
22.01.2005, 13:44
thx euch beiden :)

Es klappt 1A und für die nachwelt mein Code :D



function dirsize($dirName)
{
$verzeichniss = opendir($dirName);
$verzeichnissgroesse = 0;

while($verzeich_file = readdir($verzeichniss)) {
if ($verzeich_file != '.' && $verzeich_file != '..') {


if (is_dir($verzeich_file)) {
$verzeichnissgroesse += dirsize($dirName . '/' . $verzeich_file);
} else {
$verzeichnissgroesse += filesize($dirName . '/' . $verzeich_file);
}
}
}
closedir($verzeichniss);


if($verzeichnissgroesse<1000)
{
return number_format($verzeichnissgroesse, 0, ",", ".")." Bytes";
}
elseif($verzeichnissgroesse<1000000)
{
return number_format($verzeichnissgroesse/1024, 1, ",", ".")." kB";
}
else
{
return number_format($verzeichnissgroesse/1048576, 2, ",", ".")." MB";
}



}


Echt cool das ich seid 2 Tagen die Funktion von "function" kappiert habe

dead_orc
22.01.2005, 14:43
function ist keine Funktion sondern ein Sprachkonstrukt so wie if...else (oder sehe ich das falsch?)

@Dingsi: Mist, hab wohl zu lange geschrieben. Mit "PHP-Homepage" war diese Seite (http://de2.php.net/manual/de/function.filesize.php) gemeint (erster Kommentar).

rgb
22.01.2005, 16:52
Huch, habe heute morgen gedacht "was für ein cooler Thread", dann habe ich gesehen, dass ich schon vor fast 2 Jahren hier reingepostet habe xD.

Naja ich habe mal wieder ein anliegen:
(Vorneweg @Chocwise: ich kann jetzt html, und css auch, bei PHP & mysql bin ich in den Anfängen;))
Nun zur Frage;
Wie kann ich in einer Tabelle in einer Datenbank in einer Spalte (also Vertikal) alle Werte zusammenzählen lassen? Der Wert hat nämlich dne namen Dwonloads und ich möchte die Gesamtdownloadzahl ermitteln:).
Am besten wäre dies in einer Funktion, da ich jenes genau 10 mal hintereinander brauche, bei 10 Downloadarten. Die Zehn verschiedenen arten haben in der Downloadstabelle auch die IDs 1-10, die sie immer zugeteilt bekommen.
Also es soll dann halt "WHERE `id` = '1' " z.b. heißen. Dass alle downloadzahlen der Downloadart "1" zusammengezählt werden. Hoffe da steigt einer durch, ich bin grade selber etwas konfus ^^°.

Danke im Voraus;)

Chocwise
22.01.2005, 17:19
...
Nun zur Frage;
Wie kann ich in einer Tabelle in einer Datenbank in einer Spalte (also Vertikal) alle Werte zusammenzählen lassen? Der Wert hat nämlich dne namen Dwonloads und ich möchte die Gesamtdownloadzahl ermitteln:).
Am besten wäre dies in einer Funktion, da ich jenes genau 10 mal hintereinander brauche, bei 10 Downloadarten. Die Zehn verschiedenen arten haben in der Downloadstabelle auch die IDs 1-10, die sie immer zugeteilt bekommen.
Also es soll dann halt "WHERE `id` = '1' " z.b. heißen. Dass alle downloadzahlen der Downloadart "1" zusammengezählt werden. Hoffe da steigt einer durch, ich bin grade selber etwas konfus ^^°.

Danke im Voraus;)
Hmh... an einer (My)SQL-Funktion die sowas schafft wäre ich auch interessiert. ich weiß wie man Werte eines Array's addiert, aber bei der Addition von Feldwerten einer Datenbank, wüsst ich nur die while-Methode.

Tomarus
22.01.2005, 17:50
Also ich würd das jetzt ganz spontan so machen ...



$gesamtanzahl = 0;
$select = mysql_query ('SELECT downloads FROM download WHERE id = "1"');
while ($bla = mysql_fetch_array ($select))
{
$gesamtanzahl = $gesamtanzahl_1 + $bla[0];
}


So dass so lange der Wert der nächsten Spalte zur $gesamtanzahl_1 dazuaddiert wird, bis es halt keine Spalten mehr gibt ... müsste so ja eigentlich funktionieren. Oder war was anderes gemeint ?

In einer Funktion dann


function count ($id)
{
$gesamtanzahl = 0;
$select = mysql_query ('SELECT downloads FROM download WHERE id = "'.$id.'"');
while ($bla = mysql_fetch_array ($select))
{
$gesamtanzahl = $gesamtanzahl + $bla[0];
}
}


Für die übernehme ich aber keine Verantwortung, mit Funktionen kenn ich mich eigentlich kein Stück aus ...

[edit] Oder war jetzt eine spezielle, vordefinierte PHP-Funktion gemeint? Wenn ja, hätte ich keine Ahnung ..

Dingsi
22.01.2005, 18:50
Hab ich dir das nicht schon irgendwann mal im Chat erklärt? Oo°

$result = mysql_query("SELECT SUM(`Downloads`) as `Download_Count` FROM Downloads WHERE `id` = 1");
$row = mysql_fetch_array($result);
echo $row['Download_Count'];Sollte eigentlich alle Downloads zusammen zählen.

das where vergessen.

Latency
22.01.2005, 19:52
Ich will auch, ich will auch ^^

$mysql_query = mysql_query("SELECT `Download_Art`,
COUNT (`Download_Art`)
FROM Tabellenname
GROUP BY `Download_Art`
ODER BY `Download_Art` ASC");
while($Auswertung = mysql_fetch_array($mysql_query))
{
print_r($Auswertung);
}

Dieses Skript sollte nach den Verschiedenen Download-Arten in der Tabelle ausschau halten und zählen wie oft jede einzelne Vorkommt.

Es ist die mir am schnellsten Bekannte Query die alle Daten auf einen schlag auswertet. Denn die von Dingsi gepostete Query müsste bei ändern der Download Art eine neue Anfrage an die Datenbank stellen. Meine müsst nur mit mysql_fetch_array den nächsten Datensatz holen. :)

edit:
Ich glaube mein Skript schießt ein wenig am Ziel vorbei, da es nur zählt wie oft jede Download Variante vorkommt, und nicht welchen Wert der Inhalt besitzt :-/

Deswegen hier mal ne andere Version :)

$mysql_query = mysql_query("SELECT `Download_Art`,
SUM (`Download_Art`) AS Download_Anzahl
FROM Tabellenname
GROUP BY `Download_Art`
ODER BY `Download_Art` ASC");
while($Auswertung = mysql_fetch_array($mysql_query))
{
print_r($Auswertung);
}

Chocwise
22.01.2005, 19:59
Hab ich dir das nicht schon irgendwann mal im Chat erklärt? Oo°

$result = mysql_query("SELECT SUM(`Downloads`) as `Download_Count` FROM Downloads WHERE `id` = 1");
$row = mysql_fetch_array($result);
echo $row['Download_Count'];Sollte eigentlich alle Downloads zusammen zählen.

das where vergessen.
Interessant. O_o
*notier*
Poste solche Sachen hier ins Forum statt sie für Chats zu vergeuden. :D

dadie
22.01.2005, 20:12
*hust* *röchel*

Ich will ja nicht wie ein Pinngel Klingen aber man sollte niemald `Spalte` = 'a' nutzen !
`Spalte` LIKE 'a' ist besser das Gleichzeichen kann zu Derben Problemen füren
ich spreche da aus erfahrung !

Chocwise
22.01.2005, 21:18
*hust* *röchel*

Ich will ja nicht wie ein Pinngel Klingen aber man sollte niemald `Spalte` = 'a' nutzen !
`Spalte` LIKE 'a' ist besser das Gleichzeichen kann zu Derben Problemen füren
ich spreche da aus erfahrung !
Que?
Sonst noch alles frisch? :D
LIKE frisst mehr Performace als =, da LIKE eben das tut was es bedeutet: like = ähnlich.
Like sucht also Werte die 'a' ähnlich sind. Gut... da die % fehlen, sucht LIKE AFAIK tatsächlich nur Felder in denen Tatsächlich nur das 'a' steht, aber logischerweise frisst LIKE mehr Performance als = weil es eben nach Ähnlichkeiten sucht und nicht einfach nur das rauspickt das dem Suchstring enspricht.
Also erkläre ich Dadies Behauptung einfach mal als absoluten Quatsch, bis er mir Fakten Präsentiert die mich vom Gegenteil überzeugen.

Jesus_666
22.01.2005, 22:21
Also erkläre ich Dadies Behauptung einfach mal als absoluten Quatsch, bis er mir Fakten Präsentiert die mich vom Gegenteil überzeugen.
Er bezieht sich wahrscheinlich darauf, daß man bei = eben auch aufpassen muß, daß man auch exakt das richtige übergibt.

Chocwise
22.01.2005, 23:08
Er bezieht sich wahrscheinlich darauf, daß man bei = eben auch aufpassen muß, daß man auch exakt das richtige übergibt.
Das würde auch erklären weshalb gerade er bereits schlechte Erfahrungen mit der =-Variante gemacht hat. :D

Okok. Der war fies. XD

dadie
22.01.2005, 23:20
Das würde auch erklären weshalb gerade er bereits schlechte Erfahrungen mit der =-Variante gemacht hat. :D

Okok. Der war fies. XD


http://www.multimediaxis.de/images/smilies/old/3/nonono.gif .................. :p du bist gemein :'(

rgb
23.01.2005, 15:25
Öhm joa, also das von Dingsi geht schonmal nicht^^.
Er zeigt mir da nämlich einfach null an und wenn ich mysql_num_rows mache, dann sagt er, dass nur ein Eintrag gefunden wurde, aber es sind 2 Einträge ;_;.

Und bei Latency wollte ich nochmal fragen, was der Code von dir jetzt genau macht und wofür die einzelnen dinger da sind, also im mysql_query alles, was GROß geschrieben wurde^^.

Latency
23.01.2005, 16:15
Ich verweiße hier mal am besten an die offizielle mySQL-Documentiation zum Thema COUNT (http://dev.mysql.com/doc/mysql/de/counting-rows.html) :)

rgb
23.01.2005, 17:21
joa hmm.....
irgendwie habe ich das gefühl, das ist nicht das, was ich brauche, ich kann mich momentan auch überhaupt nicht konzentrieren, ich mache nochmal ein beispiel:
so sieht vereinfacht die Tabelle aus:


+----+-----+---------+
|name| art |downloads|
+----+-----+---------+
|bla |1 |1337 |
+----+-----+---------+
|ble |2 |7777 |
+----+-----+---------+
|blo |1 |815 |
+----+-----+---------+
|bli |2 |815 |
+----+-----+---------+

ich möchte jetzt, dass bla und blo / ble und bli zusammengezählt werden.

Bei dem link, den du mir gegeben hast, Latency, wird ja nur gezählt, wieviel Tiere ein besitzer hat und das ist einfach, da jedes Tier ein neuer Eintrag ist :(.

Edit: *autsch*
hat sich erledigt, ich habe das von dingsi kopiert und vergessen WHERE `id` in WHERE `art` umzutauschen -_-"

rgb
24.01.2005, 16:25
Öh joa hi!

Jetzt ist ein Doppelpost entstanden, aber kann ich ja nix dafür, wenn keiner mehr wat postet :D ;)
So, ich wollte einfach mal fragen, wo hier der Fehler versteckt ist, mein größtes Problem ist nämlich noch, dass immer irgendwelche dummen Fehler passieren (siehe post vor mir).


<?php
include "global.php";
$name = $_POST['name'];
$content = $_POST['content'];
$homepage = $_POST['homepage'];
$email = $_POST['email'];
$icq = $_POST['icq'];
$timestamp = time();
$datum = date("d.m.Y",$timestamp);
$sql = "INSERT INTO `rdn_guestbook` (`name`, `content`, `homepage`, `email`, `icq`, `date`, `active`) VALUE ('$name', '$content', '$homepage', '$email', 'icq', '$datum', '1')";
$result = mysql_query($sql);
echo mysql_error();
echo "<br>";
echo $sql;
?>


Der mysql_error erzählt mir folgendes:


You have an error in your SQL syntax near 'VALUE ('11111111111', '1111111111111', '1111111111111111', '11111111111', 'icq',' at line 1
INSERT INTO `rdn_guestbook` (`name`, `content`, `homepage`, `email`, `icq`, `date`, `active`) VALUE ('11111111111', '1111111111111', '1111111111111111', '11111111111', 'icq', '24.01.2005', '1')


danke fürs suchen und hoffentlich finden:)

Latency
24.01.2005, 18:09
Es fehlt dir, wenn ich das richtig sehe, ein S bei VALUES

Lukas
24.01.2005, 19:37
So, ist zwar mehr SQL als PHP, aber egal.
Wo liegt der Fehler in folgendem SQL-String (ist wahrscheinlich was triviales, aber ich bin nicht so gut in MySql)?
$query = "UPDATE pages SET (`inhalt`=`jkdlg ein<br />Test`, `name`=`dasyg`) WHERE `id`=`3`";

dadie
24.01.2005, 19:42
So, ist zwar mehr SQL als PHP, aber egal.
Wo liegt der Fehler in folgendem SQL-String (ist wahrscheinlich was triviales, aber ich bin nicht so gut in MySql)?
$query = "UPDATE pages SET (`inhalt`=`jkdlg ein<br />Test`, `name`=`dasyg`) WHERE `id`=`3`";


Ömm. ich glaube das wird so geschreiben


$query = "UPDATE `pages` SET `inhalt` = 'jkdlg ein<br />Test', `name` = 'dasyg' WHERE `id` LIKE '3'";

Also soweit ich weiss keine Klamma Sätzen dann noch immer lehrzeichen swischen ` machen achja und wenn möglich das was rein soll immer in Einfachen klammern schreiben (' und ' )

Das müsste klappen sicher bin ich nett !

Lukas
24.01.2005, 19:59
Ömm. ich glaube das wird so geschreiben


$query = "UPDATE `pages` SET `inhalt` = 'jkdlg ein<br />Test', `name` = 'dasyg' WHERE `id` LIKE '3'";

Also soweit ich weiss keine Klamma Sätzen dann noch immer lehrzeichen swischen ` machen achja und wenn möglich das was rein soll immer in Einfachen klammern schreiben (' und ' )

Das müsste klappen sicher bin ich nett !
Funzt. thx.
Ich dachte, man müsste das Klammern, weil's bei diversen anderen Sachen (insert) auch so ist.

Edit:
Habe statt LIKE = benutzt, Dingsi.

Dingsi
25.01.2005, 14:05
Benutz lieber WHERE id = '3', da..:
Que?
Sonst noch alles frisch?
LIKE frisst mehr Performace als =, da LIKE eben das tut was es bedeutet: like = ähnlich.
Like sucht also Werte die 'a' ähnlich sind. Gut... da die % fehlen, sucht LIKE AFAIK tatsächlich nur Felder in denen Tatsächlich nur das 'a' steht, aber logischerweise frisst LIKE mehr Performance als = weil es eben nach Ähnlichkeiten sucht und nicht einfach nur das rauspickt das dem Suchstring enspricht.
Also erkläre ich Dadies Behauptung einfach mal als absoluten Quatsch, bis er mir Fakten Präsentiert die mich vom Gegenteil überzeugen.

chinmoku
28.01.2005, 20:38
Hätte da auch mal eine Frage:

Wie wichtig ist es eigentlich php-code in verschiedene Zeilen bzw. Spalten zu packen.
Bsp.


$beitrag = $_POST['beitrag'];
$ip = $_SERVER['REMOTE_ADDR'];

$verbindung = mysql_connect($host, $user, $pwd);
mysql_select_db($db);

Hätte im Grunde auch was anderes nehmen können. Hätte es irgendwas verändert, wenn ich $verbindung unter $ip gesetzt hätte - in der gleichen Spalte?

Das ist mir nämlich recht suspekt.

Lukas
28.01.2005, 20:48
Das sollte nichts ändern. Der Interpreter überspringt die Whitespaces. Theoretisch könnte man (glaub' ich) den gesamten Code einer Datei in eine Zeile schreiben, was aber ziemlich unübersichtlich wäre.

Chocwise
28.01.2005, 21:02
@ chinmoku:

$beitrag=$_POST['beitrag'];$ip=$_SERVER['REMOTE_ADDR'];$verbindung=mysql_connect($host,$user,$pwd);mysql_select_db($db);
dürfte auch funktionieren. ;)

Jesus_666
28.01.2005, 22:37
Das sollte nichts ändern. Der Interpreter überspringt die Whitespaces. Theoretisch könnte man (glaub' ich) den gesamten Code einer Datei in eine Zeile schreiben, was aber ziemlich unübersichtlich wäre.
Dafür bietet das Kommandozeileninterface auch gleich einen Parameter. php -w <Datei> gibt den reduzierten Code aus.

dead_orc
29.01.2005, 10:05
Naja, es geht auch ohne Leerzeilen und -zeichen, aber es ist sehr viel übersichtlicher:

# Unübersichtlich:
$bla='blub';
$abc='def';
if($bla==$blub){echo $bla.'='.$blub;}

#Übersichtlich:
$bla = 'blub';
$abc = 'def';

if($bla == $blub)
{
echo $bla . '=' . $blub;
}
Beides bewirkt das selbe, das zweite ist aber sehr viel übersichtlicher!

chinmoku
29.01.2005, 14:42
Danke ^^
Ist echt übersichtlicher.
Aber macht man diese Spaltensprünge mit Tab oder wie? ._.
Und warum gerade solche Sachen wie "echo" etc. *-*

Geiu
29.01.2005, 14:44
Aber macht man diese Spaltensprünge mit Tab oder wie? ._.
Entweder mit Tab oder mit mehreren Leerzeichen.

Und warum gerade solche Sachen wie "echo" etc. *-*
Das hat nix mit echo zu tun, man rückt immer innerhalb eines Blocks ein (Ein Block ist alles was zwischen { und } steht)

Lukas
29.01.2005, 14:46
Du rückst einfach irgendwie ein. Ich mach das mit Tabs, allerdings ist deren Länge afaik vom Editor abhängig. Du kannst auch Leerzeichen verwenden, solltest aber immer gleich viele für eine Einrückung nehmen (z.B.vor etwas, das einfach eingerückt ist, stehen 4 Leerzeichen, cor etwas, das doppelt eingrückt ist, 8 usw.).

Geiu
29.01.2005, 14:48
Ich mach das mit Tabs, allerdings ist deren Länge afaik vom Editor abhängig.
Nein, ein Tab ist ein eigenständiges Zeichen und ist daher bei gleichem Font auch gleich lang. Allerdings wandeln manche Editoren Tabs in mehrere Leerzeichen um.

Dingsi
29.01.2005, 14:54
Nope. Tab hat nichts im Font zu tun, sondern mit dem Anzeigeprogramm. afaik.

Jesus_666
29.01.2005, 15:18
Ein Tab ist ein Zeichen, allerdings hat die Schriftart nichts damit zu tun, wie es angezeigt wird... Ansonsten müßte bei Monospace-Schriftarten ein Tab genau so lang sein wie Space; es ist aber zwischen vier- und achtmal so lang.
Das Tab-Zeichen wird immer interpretiert. Wie es interpretiert wird hängt von der Umgebung ab (und von der Einstellung, KWrite erlaubt beispielsweise beliebigt Breiten für Tab).

wrtlprnft
29.01.2005, 15:22
Ein Tab ist ja auch nicht immer gleich breit, auch nicht im selben Editor.
Wenn man zumbeispiel einen Editor hat, der 8 Zeichen für ein Tab nimmt (Standard), kann man vor einen Tab 7 Leerzeichen setzen, dann ist er nur noch 1 Zeichen breit.
Standard für Tabulatoren ist 8 Zeichen, für kleinere Einrückungen sollte man Leerzeichen nehemen (Vim kann das zum Beispiel automatisch, man merkt garnicht, ob man jetzt einen Tabulator oder 4 Leerzeichen einfügt.)

Lukas
31.01.2005, 12:26
Ich habe ein kleines Problem. Ich will eine Html-Datei auslesen, aber nicht komplett, sondern nur den Javascript-Teil. Anschließend soll das Ganze an den Browser geschickt werden (sprich: ich will den Html-Teil rausfiltern). Mein Php-Code:

<?php

$file = file('test.html', 'r');
$ttt = false;
foreach($file as $i){
if($i == "<script language=\"javascript\">"){
$ttt = true;
}
if($ttt){
echo $i;
}
if($i == "</script>\n"){
$ttt = false;
}
}
?>
Die Funktionsweise dürfte grunsätzlich klar sein: die Datei wird in ein Array gelesen. Anschließend wird durch das Array iteriert. Wenn der Scriptteil beginnt, wird $ttt auf true gesetzt. Anschließend wird die aktuelle Zeile ausgegeben, falls man im Scriptteil ist. Zu guter letzt wird überprüft, ob der Scriptteil beendet ist, und falls ja, $ttt wieder auf false gesetzt.

Chocwise
31.01.2005, 12:37
@ masterquest:
Ich glaube das lässt sich über Reguläre Ausdrücke noch besser bewerkstelligen. Nur hab ich mich bisher nie an die RegExp's rangetraut. Interessieren, wie die Lösung damit aussieht, würde mich allerdings auch. ;)
Vielleicht gibts hier ja Leute die das hinbekommen.
Dann aber bitte den RegExp-Anteil ordentlich ausdokumentiert. :)

Lukas
31.01.2005, 13:06
Mit den regulären Ausdrücken hat's geklappt.
ich habe die if-Abfragen durch folgenden Code ersetzt:
#if($i == "<script> language=\"javascript\">"){
#ersetzt mit
if(ereg('^(<script language="javascript">){1}', $i)){

#if($i == "</script language="javascript">"){
#ersetzt mit
if(ereg('^(</script language="javascript">){1}', $i)){

Der entsprechende reguläre Ausdruck lautet '^(<script language="javascript"){1}'. Im Prinzip ist das ganz einfach:
das '^' steht dafür, dass der gesuchte String mit dem angegebenen String beginnen muss. Der angegebene String ist in diesem Fall '(<script language="javascript"){1}'. Das bedeutet, dass die Zeichenkette '<script language="javascript"' exakt einmal autreten darf. Sprich: Der Ausdruck überprüft, ob der String mit '<script language="javascript">' beginnt.
Ich hoffe, das war einigermaßen verständlich, ich hab's nämlich auch noch nicht zu 100% verstanden ;)

Dingsi
31.01.2005, 14:19
Bei </script> muss kein language="" hin. ;).

dead_orc
31.01.2005, 14:37
IMO ließe sich das noch besser über strpos() (http://de2.php.net/manual/de/function.strpos.php) lösen, denn das verbaucht sehr viel weniger Resourcen als Reguläre Ausdrücke!

<?php
$file = file('test.html', 'r');
$ttt = false;
foreach($file as $i){
if(strpos($i, '<script language="javascript">') !== false){
$ttt = true;
}
if($ttt){
echo $i;
}
if(strpos($i, '</script>') !== false){
$ttt = false;
}
}
?>

Manni
31.01.2005, 14:55
Ich würde es mit explode machen:

<?php
$file = file('test.html', 'r');
$inhalt = implode($file);
$temp = explode('<script language="javascript">', $inhalt);
$temp2 = explode('<script language="javascript">', $temp[1]);
echo $temp2[0];
?>

Diese Methode könnte man mit einer Schleife auch wiederholen ;)

Jesus_666
31.01.2005, 20:24
Ifs sind zwar nett, aber es geht nichts über ein einfaches preg_match_all(). BTW, meine Version erkennt sowohl die alte Version mit language="" als auch die neue mit type="".

<?

$string = "<bla></bla><script type=\"JavaScript\">Skript!</script>dfgdfg<script language=\"JavaScript\">Skript mit\nmehreren Zeilen!</script>fd<dh />";

$pattern = "/(<script.*(type|language).*=\"JavaScript\".*>.*<\/script>)/isU";

preg_match_all ($pattern, $string, $result);

print_r ($result[0]); // dieses Array enhält fertig alle Skripte.

?>

Chocwise
31.01.2005, 20:37
@ Jesus_666:
Erklärst du uns... vor allem mir, eben den Regulären Ausdruck?
Der Nachteil an den meisten Tuts ist nämlich die mangelnde Praxisbezogenheit im RegExp-Bereich. ¬_¬

Man Dankt schonmal. ;)

Jesus_666
31.01.2005, 21:16
Daß ich den mal eben so aus dem Ärmel geschüttelt habe liegt wohl auch daran, daß ich heute schon den ganzen Tag mit den Dingern arbeite - IRC-Logs nach bestimmten Regeln in HTML umwandeln und dabei auch noch fehlertolerant zu sein kann ziemlich anstrengen...


Also gut. /(<script dürfte soweit klar sein: Der Schrägstrich leitet den Ausdruck ein und die Klammer eine Gruppe (BTW, vielleicht kann man die Klammern auch weglassen).
Bei Perl-Regexps steht der Punkt für ein beliebiges Zeichen und das Sternchen für "null mal oder öfter". Nach <script kommt also erst mal eine beliebige Zahl beliebiger Zeichen, bis wir beim nächsten Teil sind.
(type|language) ist wieder eine Gruppe. Der Querstrich steht dafür, daß entweder das eine oder das andere vorkommen kann. Also wird hier entweder type oder language gefunden. Danach wieder beliebig viele beliebige Zeichen... Die könnte man sogar weglassen, da nach dem type/language ja immer gleich das Gleichheitszeichen kommt.
="JavaScript".*>.*<\/script> muß ich wohl nicht weiter erläutern. Klartext und ein paar beliebige Zeichenfolgen. Die zweite Zeichenfolge ist der gesamte Inhalt des Tags.
/isU: wir schließen den Ausdruck ab und hängen noch ein paar Optionen hinten dran: i sorgt dafür, daß Groß- und Kleinschreibung ignoriert werden. Man weiß ja nie, wie die Seite geschrieben ist, die man gerade ausnimmt. s sorgt dafür, daß . auch bei Zeilenumbrüchen funktioniert. So kann man mit .* mehere Zeilen erfassen. U sorgt dafür, daß der Regexp nicht so gierig ist - normalerweise würde er versuchen, so viel Text wie möglich zu erfassen und dabei vom ersten <script bis zum letzten </script> alles als ein Ergebnis nehmen. U läßt den Regexp nur soweit greifen, wie er mindestens funktioniert.


Und wenn ihr denkt, daß das Ding unübersichtlich war, dann seht euch mal dieses Prachtstück an:

/(\[)(\d\d:\d\d)(])(\s+)(&lt;)(\S+)(&gt;)(\s+)(\[)([^\n\r(\d\d:\d\d)\[\]]+?)(\])([^\n\r]*?)(.*)/U[
So, jetzt wißt ihr, womit ich meinen Nachmittag verbracht habe. ^_^ (BTW, damit finde ich in den Logs meiner IRC-DSA-Runde OOC-Zeilen.)