array_reverse funzt nicht
Klausi
- php
0 Tobias Kloth
Hi Leute,
habe mal wieder ein Prob.
Warum funzt mein array_reverse nicht?
Ich weiss einfach nicht warum.
Hier mal der Code.
Danke im Vorraus:
<?php
include 'inc\config.inc';
if ($action == "senden")
{
$datei = fopen ($file, "a+");
$eintrag = $name."|".$email."|".$kommentar."|";
$eintrag = str_replace (array ("\r\n", "\r", "\n"), array ("<br>", "<br>", "<br>"), $eintrag);
list ($name, $email, $kommentar) = array($eintrag);
fwrite ($datei, $eintrag."\r\n");
fclose ($datei);
echo $danke;
}
else
{
include 'formular.php';
foreach (file($file) as $array)
{
$inhalt = explode('|', $array);
//hier ist die Stelle
array_reverse($inhalt);
include 'gaestebuch.php';
}
}
$zeilen = count(file($file));
?>
Hallo Klausi,
$eintrag = $name."|".$email."|".$kommentar."|";
du weißt, dass das bei register_globals=off nicht funktioniert? Dann musst du $_POST['name'] usw. verwenden.
list ($name, $email, $kommentar) = array($eintrag);
für was ist die Zeile gut?
foreach (file($file) as $array)
{
$inhalt = explode('|', $array);
so dürftest du nur den jeweils letzen Eintrag der in deiner Datei steht bekommen (du hast in $inhalt immer ein Array mit 4 Elementen: name,email,kommentar und einem Zeilenumbruch)
array_reverse($inhalt);
array_reverse ändert nicht das übergebene Array, sondern liefert das geänderte Array zurück (siehe http://de3.php.net/array-reverse)
Grüße aus Nürnberg
Tobias
Hey Tobias,
erst mal Danke für deine Hilfe. Doch ich bin Anfänger in php,
und kämpfe mich Funktion für Funktion durch mein Script.
Es wäre ein leichtest ein Gästebuch in php zu downloaden, doch ich will selber eins schreiben.
So nun das was ich sagen wolllte...
Kannst du mir das eventuel genauer erklären. Was mache ich bei mir falsch.
Ich sehe das Formular. Ich kann mich einschreiben. Er speichert die Daten. Er gibt die Daten aus. Er dreht Sie aber nicht.
Toll.
Ok bis dann...hoffe ich Klausi»»
hi,
Kannst du mir das eventuel genauer erklären. Was mache ich bei mir falsch.
Ich sehe das Formular. Ich kann mich einschreiben. Er speichert die Daten. Er gibt die Daten aus. Er dreht Sie aber nicht.
was genau verstehst du denn an
array_reverse ändert nicht das übergebene Array, sondern liefert das geänderte Array zurück
nicht?
gruss,
wahsaga
Hi wahsaga,
also ich versteh das schon, doch bei mir dreht der nicht die Einträge
sondern immer nur die vom Benutzer eingegeben Daten.
Hier noch mal der Code:
-----index.php
<?php
include 'inc\config.inc';
if ($action == "senden")
{
$datei = fopen ($file, "a+");
$eintrag = $name."|".$email."|".$kommentar."|";
$eintrag = str_replace (array ("\r\n", "\r", "\n"), array ("<br>", "<br>", "<br>"), $eintrag);
fwrite ($datei, $eintrag."\r\n");
fclose ($datei);
echo $danke;
}
else
{
include 'formular.php';
foreach (file($file) as $array)
{
$inhalt = explode('|', $array);
$drehen = array_reverse ($inhalt);
include 'gaestebuch.php';
}
}
$zeilen = count(file($file));
?>
---------------config.inc
<?php
$file = "eintraege.dat";
$maxeintraege = 10 ;
$danke = "Vielen Dank für Ihren Eintrag.<br>
<a href="index.php">Hier</a> können Sie Ihren Eintrag im Gästebuch lesen.";
?>
---------formular.php
<?php
echo "<html><head><form action="index.php" method="get">
<table width="520" cellspacing="2" cellpadding="2">
<tr>
<td valign="top"> </td>
<td>Alle Felder die mit einem kleinen * gekennzeichnet sind<br>
bitte auszufüllen.<br>
</td>
</tr>
<tr>
<td width="120" valign="top">Name: *</td>
<td width="395"><input name="name" type="text" id="name" size="35" maxlength="15"></td>
</tr>
<tr>
<td valign="top">E-Mail: *</td>
<td><input name="email" type="text" id="email" size="35" maxlength="40"></td>
</tr>
<tr>
<td height="24" valign="top">Titel: *</td>
<td><input name="titel" type="text" id="titel" size="35" maxlength="35"></td>
</tr>
<tr>
<td valign="top">Homepage:</td>
<td><input name="www" type="text" id="www" size="35"></td>
</tr>
<tr>
<td valign="top">Dein Eintrag: *<br>
".$html." </td>
<td><textarea name="kommentar" cols="60" rows="10" id="kommentar"></textarea></td>
</tr>
<tr>
<td> </td>
<td><br> <input type="hidden" name="action" value="senden">
<input type="submit" name="Submit" value="eintragen"></td>
</tr>
</table>
</form></body></html>";
?>
---------gaestebuch.php
<?php
echo "<html>
<body>";
echo "
<table width="300" cellspacing="0" cellpadding="0" border=\1" bordercolor="#000000">
<tr>
<td>name:</td>
<td>".$drehen[2]."</td>
</tr>
<tr>
<td>email:</td>
<td>".$drehen[1]."</td>
</tr>
<tr>
<td>kommentar:</td>
<td>".$drehen[0]."</td>
</tr>
</table></br>";
echo "</body>
</html>";
?>
Hallo Klausi,
also ich versteh das schon, doch bei mir dreht der nicht die Einträge
sondern immer nur die vom Benutzer eingegeben Daten.
logisch - mehr steh ja in dem Array $inhalt auch nicht drin...
include 'formular.php';
foreach (file($file) as $array)
{
$inhalt = explode('|', $array);
so überschreibst du bei jedem Durchlauf von foreach den Inhalt von $inhalt (was ich dir ja schon geschreiben habe) - wenn du ein zweidimensionales Array haben möchtest (ich nehme doch mal an, du möchtest alle Daten haben, oder?), dann schreib
$inhalt[] = explode...
dann bekommst du ein Array, das etwa so aussieht:
Array(
[0] => Array(
[0] => name1
[1] => email1
[2] => kommentar1
[3] => <zeilenumbruch>
)
[1] => Array(
[0] => name2
[1] => email2
[2] => kommentar2
[3] => <zeilenumbruch>
)
[usw]
)
(wobei <zeilenumbruch> für den Zeilenumbruch den du mit in die Datei geschreiben hast, steht.) Dieses Array musst du dann umdrehen und ausgeben.
echo "<html><head><form action="index.php" method="get">
[...]
</form></body></html>";
für was soll den der Unsinn gut sein? Warum machst du extra einen php-Bereich auf, nur um ganz einfaches html auszugeben?
echo "
<table width="300" cellspacing="0" cellpadding="0" border=\1" bordercolor="#000000">
<tr>
<td>name:</td>
<td>".$drehen[2]."</td>
wenn du natürlich alle Daten haben willst, brauchst du natürlich eine Schleife, die dir den Array $inhalt (bzw den gedrehten $drehen) ausgibt (z.B. foreach ->http://de2.php.net/control-structures.foreach)
Grüße aus Nürnberg
Tobias