Sonntag, 22. Mai 2011

Welche PHP Dinge habe ich mir heute angeschaut

var_dump ();

Var_dump ($foo) gibt den Wert bzw. die Werte der Variable wieder. In gleicher bzw ähnlicher form wie print_r.

isset 
Isset prüft die Exitenz einer Variable.


$var = 1;
if(isset($var)) echo {echo"JA";} else {echo"NEIN";}

Globale Variablen / Konstanten
Wenn man sich an ein loginmacht und anch erfolgreichem login sich usern name speichern will ohne ständig eine sql abffrage zu starten, kann man den usernamen in eine konstante packen. diese kann man dann immer wieder aufrufen. /-> siehe auch global

<?php
define
("Username", "Max Mustermann");
echo "Hallo " . Usermane
; // outputs "Hallo Max Mustermann";?>

Samstag, 21. Mai 2011

Anzahl der Datensätze einer SQL Abfrage

Möchte man einfach nur die Anzahl der Einträge einer SQL Datenbank erfahren, so geschieht das wie folgt:

$result = mysql_query("SELECT 1 FROM tabelle WHERE spalte='123'");
echo mysql_num_rows($result);

oder:

$result = mysql_query("SELECT COUNT(*) FROM tabelle WHERE spalte='123'");
echo mysql_result($result,0);

Die zweite Methode ist deutlich effektiver, was das verabreiten geht und somit ressourcen schonender. Guter Link dazu:
http://phpperformance.de/anzahl-an-datensaetzen-eines-sql-results-ermitteln/

PHP- Bestimmte Zeichen oder bestimmtes Zeichen suchen und ersetzen

Möchte man zum Beispiel aus einem Artikelnamen einen schönen Link machen, ohne Leerzeichen, dann braucht man eine PHP Anweisung. Es gibt wie imme rbei PHP mehrere Lösungen. Hier eine davon:
Beispiel:
1 Schritt:
$Artikelname: "Frau Dr. Angela Merkel ist die gefährlichste Frau der Welt"
echo str_replace (" ","-",$Artikelname);
Somit erhalten wir:->  Frau-Dr.-Merkel-ist-die-gefährlichste-Frau-der-Welt
Allerdings sollte man statt str_replace ereg_replace nutzen, da man so die ausgabe der umalute sichert.  

2 Schritt:
Unterschiedliche Groß und Kleinschreibung ist für einen Link schrott. Daher wandelt man das gleich auch um. Hier hilft uns die PHP Anweisung: strtolower
Das sieht in unserem Beispiel dann so aus:
echo strtolower (str_replace (" ","-",$Artikelname));
das macht dann: frau-dr.-merkel-ist-die-gefährlichste-frau-der-welt

Auch hier ist es ratsamer mit der mb_strtolower Variante zu arbeiten, wenn man Umlaute im Artikel erwartet.



3. Schritt:
Jetzt fehlt uns nur noch das wir so komische Zeichen rausbekommen wie: (.) (;) (:) (() ()) (*) (#) usw.
in unserem Beispiel ist es der Punkt nach Dr.und zwar mit ereg_replace (siehe Schritt eins) Allerdings kann man alle gewünschten Zeichen die man raushaben will, in eine Variable schreiben und die für das ersetzen nutzen. bsp.

<?php
$aktivitaet='Hallo dies ist ein 1234567890 Tästtext!!!&%$§?';
echo $aktivitaet.'<br>';
$aktivitaet=preg_replace("/[^a-zA-Z0-9_äöüÄÖÜ]/" , "" , $aktivitaet);
echo $aktivitaet;
?>


Und wie wir den Doktor von Gutenberg rausbekommen, könnt ihr euch schon bereits selbst beantworten ;-)

Anmekrung: Es kann sein dass wenn Du sonderzeichen ersetzen willst, dass nicht immer funktioniert. Ich vermute es hat viel mit dem Dateien Format zu tun. Also ob es in UTF-8 oder ASCI gespeichert ist. Wenn Du zum Beispiel in Wordpress Dateien solch lustige Funktionen einbauen willst, empfiehlt sich die Daten zu decoden. Siehe folgendes Beispiel:

$umlaute = Array("/ä/","/ö/","/ü/","/Ä/","/Ö/","/Ü/","/ß/","/G/");
$replace = Array("ae","oe","ue","Ae","Oe","Ue","ss","g");
$my_strasse2 = preg_replace($umlaute, $replace, utf8_decode($meta_values2));

PHP: Gebe mir alles bis zu einem bestimmten Zeichen aus

Man möchte ohne umständige PHP explode Anweisung und dann count eine variable nur bis zu einem bestimmten Zeichen ausgeben. also:
$var = merkel-ist-blöd

soll nur noch merkel stehen.


Mindestens zwei Wege. Einmal mit explode. Man zerstückelt die variable mit hilfe eines trenners in seine einzelteile. In diesem Fall wäre der Trenner das "-" (Min(d)us) und gibt das daraus resultierende array mit hilfe einer schleife wieder aus. Zum besipiel einer while oder foreach schleife.Um nur den ersten Wert zu erhalten,, also unsere Merkel, kann man mittels eines counters

i=0;
bedingung i=1
schleife
[ausgabe
i++]

ausgeben.
die andere und doch kürzere Variante wäre die strstr() Anweisung. Kann sein dass manche server diese PHP Anweisung "noch" nciht unterstützen.dann kann man sich mit der mb_strstr() anweisung eventuell zu helfen wissen. Einfach nacheinander ausprobieren.

strstr() an sich gibt alles nach einem zuerst gefunden trennzeichen aus. Also aus unserem beispiel: merkel-ist blöd würde dann stehen: ist-blöd.
Das macht ja keinen seinn. Also ändert man die bedingung und macht aus dem einfachen
mb_strstr($url, "-"); ein
mb_strstr($url, "-", true);
das true gebt die umkehrung frei und wir erhalten, die lösung auf wer ist blöd:
merkel.

ModRewrite: Aus index.php?id=xxx mache index_xxx.html

Es ist umstritten ob maskierte Links (d.h. modullierte Links, die den eigentlichem Link vorgesetzte und so dann auch ausgegeben werden) für die Suchmaschinen = Google einen Vorteil versprechen. Es bedarf zwar in den meisten Fällen nicht vieler Schritte, aber lohnt sich das überhaupt. Ich bin der Meinung, dass sich das gerade in den Anfägen, zwischen 99 bis 2006 sehr gelohnt hat. Dann wurde sehr sehr viel an Google weiterentwicklet. Das soll heißen, dass ich der Meinung bin, dass aus heutiger Sicht maskierte Links nur noch fürs Auge des Users sinnvoll sind abe rnicht mehr für die Suchmaschinenoptimierung.

Hier ein Beispiel wie man mit ModRewrite Links die zur Parameterübergabe genutzt werden, so umschreiben kann, dass sie schön, im Sinne des Betrachters, ausgegeben werden.

1. Schritt: Falls noch nicht vorhanden, erstelle eine .htacces Datei. Das ist die erste Datei die bei jeder Siteimpression aufgerufen wird. Daher muss die Rewrite Rule (Regel) hier eingestellt werden.
2. Schritt: Schreibe in ddie htacces Datei folgenden Code:
rewriteengine on

RewriteEngine on
RewriteRule ^index2_([0-9]+).html$ index2.php?id=$1

3. Schritt: Lade die Datei auf den Rootpfad deiner Website.

Fertig!

Kurze Erklärung zum Code: Ab sofort kannst Du alle Links auf deiner Website so schreiben: http://www.meineseite.de/index_123-merkel-ist-kein-mensch.html

Dieser wird dann durch den Server erkannt und im hintergrund umgeschrieben. So das nru auf der serverseite der eigentlich link bekannt ist aber nicht auf der browserebene und somit auf der user ebene.
Man kann hier jetzt weiter rumspielen. Man kann die links auch ncoih schöner gestalten: /artikel-123-merkel-ist-kein-mensch.html usw.


FÜR XAMPP Nutzer
wer mit modrewrite zuerst auf seinem xampp server rumspielen möchte muss xampp erstmal dafür einrichten. ganz einfach: so macht man sein xampp htacces und modrewrite ready:
1 Schritt: (Änder einer zeile der httpd.conf)

# LoadModule rewrite_module modules/mod_rewrite.so

ändern in

LoadModule rewrite_module modules/mod_rewrite.so

2 Schritt (in der gleichen datei noch einen kleine passage ändern)


#< Directory/ >
#    Options FollowSymLinks
#    AllowOverride None
#    Order deny,allow
#    Deny from all
#< /Directory >

ändern in:

< Directory/ >
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    Deny from all
< /Directory >

Fertig! und xampp noch einmal neu starten!
Link: http://www.modrewrite.de/mod-rewrite/beispiele/statische-url/

Donnerstag, 19. Mai 2011

PHP Nach einer bestimmten anzahl von Zeichen trennen bzw. Ausgabe einfach abschneiden

Wer einen kurzen Teaser (Anrisstext) aufzeigen möchte der kommt um diese Fubnktion nicht drum herum.


<
?php
$rest 
substr("abcdef"); // gibt "bcdef" zurück $rest substr("abcdef"1); // gibt "bcd" zurück $rest substr("abcdef"0); // gibt "abcd" zurück $rest substr("abcdef",,); //gibt "abcdef" zurück

// Der Zugriff mittels geschwungenen Klammer ist eine
// weitere Möglickeit
$string 'abcdef';
echo 
$string{0}; // gibt a zurück echo $string{3};// gibt d zurück ?> 


wer sagt es den! Problem sind wie so oft die umlaute ä,ö,ü,ß usw. wenn mann die genau an der falschen stelle trennt. Es sind ja 2 bit zeichen statt einer. also wenn man büro nach der zweiten stelle trennt, erhält man ein Fragezeichen in eine raute. Auch die mb_substr variante verspricht hier keinen erfolg...

UTF-8 Problem bei PHP Ausgabe einer SQL Abfrage

Das ist kein PHP Problem. In den meisten Fällen sind die Daten in der MySql Datenbank in der richtigen Kollation (das ist diese nette Liste mit Latin, UTF, ASCII usw.). Um alles richtug zu machen nehmt utf-8 unicode. Damit deckt ihr alles ab.

Trotzdem werden die Umlaute wie ö,a,ü,ß usw. falsch dargestellt. Bestimmt bei Euch für ß ein Fragezeichen in einer schwarzen Raute. Eure Datei ist wenn noch nicht geschehen auch in UTF abgespeichert. Und in den Metadaten habt ihr bestimmt auch schon UTF 8 deklariert (was ja auch richtig ist).

Lösung des Ganzen: Vor der ersten SQL Abfrage muss der Datenstrom zwischen Datenbank und server auch in UTF 8 getrimmt werden. Das macht man mit:

mysql_query("SET names 'utf8'");

gute Links:
http://forum.joergkrusesweb.de/php-mysql-html-chinesisch-und-russisch-mit-utf8-t-1407-1.html
http://www.torsten-horn.de/techdocs/sql-utf8.htm#UTF8-mit-MySQL
http://www.joelonsoftware.com/articles/Unicode.html

Mittwoch, 18. Mai 2011

PHP Datei in UTF speichern

Lange sucht man immer in diesen scheiß Foren nach lösungen für ein Problem. Immer das Gleiche. Einer stellt eine Frage und im durchschnitt antworten 3 und mindestens 2 davon schreiben absoluten sch... und tun so als ob sie total schlau wären. Ich habe vor einiger zeit mir selbst gesagt, da denke ich lieber mal kurz nach statt diesen Schrott mir durchzulesen. Genauso war es mit einem UTF-8 Problem. Ich hatte ein Formularfeld, was in eine Text Datei, mittels PHP, schrieb. Aber bei der Ausgabe machte er immer diese komischen Zeichen. Anfangs dachte ich da muss irgendwas in meta rein. In den Foren schrieben die, dass ich die Variable in PHP mittels htmlieties wandeln soll .Was macht das für ein Sinn. Es  geht doch um die Datei, oder nicht?

Die Antwort lautet: Die Datei wo, dass Formular ist muss auch in UTF-8 abgespeichert sein. Dann funktioniert es. Also beide dateien. Die die über PHP das schreiben auf die Datei anstößt und die die beschrieben werden soll.
Ende und nix mit:
google doch mal...
gib mal deinen gesamten quelltext her...
was willst du damit...
wuzu brauchst du das...

...arghh....ich reg mich über möchtegernklugschei...er auf...

Freitag, 6. Mai 2011

PHP Liste mit Zufallszahlen

Möchte man mit PHP eine Liste mit Zufallszahlen erstellen, dann nutzt man folgende Funktion in einer Ummantellnden Schleife:

PHP Code:

srand ((double)microtime()*1000000);
$maximum = getrandmax();

for ($j=0;$j<10;$j++)
{$generate = rand(1000, $maxnum);
echo $j . " " . $generate. "<br/>";
}

// Rot markeirt ist die Zufallsfunktion. sie wurde auseinandergenommen um die liste zu erstellen.

Ausgabe:
0 463
1 888
2 334
3 359
4 260
5 592
6 229
7 314
8 11
9 400

PHP Zahlenformat mit 1000 er Trenner ausgeben

Möchte man zum Beispieldie Zahl 1000000, wegen der besseren Lesbarkeit mit 1000erder Trenner ausgeben, nutzt man folgenden PHP Code.

$t=1000000;

$u = number_format($t, 2, ',', '.');
echo $u;

Ausgabe
1.000.000,00

Array Auslesen (while)

Bei assoziativen Arrays, also Arrays deren interner Index nicht wie Standardmäßig vorgesehen durch Zahlen koordiniert werden, sondern assoziativ durch strings. (bsp: statt 1, 2, 3 dann Name, Nachname, Strasse) benutzt man vorzugsweise die While Schleife. Glaube weil man somit statt 1: Susan dann Name: Susan ausgeben kann. Ist dann nicht so umständlich eine ordentlich Ausgabe zu erzeugen:



$array = array ('Name' => 'Susan', 'Nachname' => 'Spasti');
while( list($Name, $Nachname) = each($array)) echo "$Name: $Nachname<br/>";

Ausgabe:
Name: Susan
Nachname: Spasti

Array Auslesen (foreach)

Wenn man ein PHP Array hat. Dann kann man dieses PHP Array mit einer foreach Schleife einfach und unkompliziert auslesen.


$array1 = array ('zahl1' => '1', 'zahl2' => '2', 'zahl3' => '3', 'zahl4' => '4');
foreach($array1 as $ausgabe) echo $ausgabe . " - "; echo "<br/>";

Folgende Ausgabe wird ausgegeben:
1 - 2 - 3 - 4 -