• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Eine Variable verschieden belegt

zauberwürfel

Mitglied
Hallo zusammen,
ich bins mal wieder. Mein Problem: In der Datei delete.php werden aus einer mysql-Tabelle alle Daten in einer html-Tabelle ausgegeben, jeweils mit einem Button. Wenn man auf diesen Button drückt, soll die datei auswerten3.php aufgerufen werden. In der URL wird dann der Inhalt des Datenfelds name übergeben, was allerdings immer der gleiche Text ist. Das Kuriose ist ja, dass die Namen in der Tabelle richtig ausgegeben werden.

delete.php:
PHP:
<?php	$verbindung = mysql_connect("xxx", "xxx", "xxx");	if(!$verbindung) {		echo 'Keine Verbindung!<br /><a href="xxx">Zur&uuml;ck</a>';	} else {		mysql_select_db("xxx", $verbindung);		$sql = mysql_query("SELECT * FROM xxx");		echo '<table border="1">';		while ($ds = mysql_fetch_object($sql)){ 			$text = $ds -> text;			$autor = $ds -> autor;			$datum = $ds -> datum;			$name = $ds -> name;			echo '<tr><td><form action="auswerten3.php?name=', $name, '" method="post"><input type="submit" name="loesch" value="Nachricht l&ouml;schen"/></td><td>', $name, '</td><td>', $text, '</td><td>', $autor, '</td><td>', $datum, '</td></tr>';		}		echo '</table></form>';	}?>

auswerten3.php:
PHP:
<?php	$gesamt = 0;	$verbindung = mysql_connect("xxx", "xxx", "xxx");	if(!$verbindung) {		echo 'Keine Verbindung!<br /><a href="xxx">Zur&uuml;ck</a>';	} else {		mysql_select_db("xxx", $verbindung);		$queryHandle = mysql_query("SELECT COUNT(*) AS count FROM xxx");		$queryResult = mysql_fetch_array($queryHandle);		$count = $queryResult['count'];		echo $count . '';		$thisname = $HTTP_GET_VARS["name"];		echo '<br />', $thisname;		mysql_close();	}?>
 
Code:
'<tr><td><form action="auswerten3.php?name=', $name, '"

Du hast Anfang und Ende der Anführungszeichen und Hochkommas überkreuzt.
 
Wenn du echo verwendest, und den auszugebenden Text in Hochkommas setzt, kannst du innerhalb vom auszugebenden Text NICHT nochmal Hochkommas verwenden, bzw. musst einen Backslash davor setzen.
Wenn du allerdings (was ich jetzt erst sehe) mit den Hochkommas Text von Variablen trennen willst, dann musst du schon Punkte verwenden, keine Kommas.

Code:
echo '<tr><td><form action="auswerten3.php?name=' . $name . '" method="post"><input type="submit" name="loesch" value="Nachricht l&ouml;schen"/></td><td>' . $name . '</td><td>' . $text . '</td><td>' . $autor . '</td><td>' . $datum . '</td></tr>';
 
Was genau ist das Problem und welche Fehlermeldung/Warnung wird angezeigt?

Weiterer Tipp:

$HTTP_GET_VARS ist stark veraltet. Welches Buch/Tutorial du auch immer benutzt, verbrenne es. Zwischen 2000 und 2012 sind derbe Unterschiede!

Benutze stattdessen $_POST und $_GET.

<input type="text" name="test" value="Test Wert" />

Die URL würde dann zu folgendem ergänzt werden:

html.de Forum - HTML für Anfänger & Fortgeschrittene

Wobei %20 in URL-Decodierter Schreibweise für ein Leerzeichen steht. Theoretisch sollte auch einfach ein "+" reichen.. bin ich derzeit nicht mehr sicher.. wenn ich es schon Fest definiere, dann sehr selten mit mehr als einem Wort oder einer Zahl.

Naja wie du sehen kannst, ist die Art der Übertragung viel unsicherer, da er selbst von einem DAU leicht per Hand abgeändert werden kann, daher sollten vernünftige Serverchecks und Sicherheitsalgorithmen durchgelaufen werden!

Wenn du eine Eingabe von einem Benutzer eintragen willst, bzw. falls ein Wert von einer $_POST/$_GET-Variable Dynamisch in eine Datenbank eingefügt werden soll, dann kannst du folgendes tun:

Bei normalem Text:

Code:
mysql_real_escape( $_POST[ 'test' ] );

Dann würde aus folgendem Text:

Code:
"Hallo", sagte der Bär..

Folgendes automatisch werden:

Code:
\"Hallo\", sagte der Bär..

In der Datenbank wäre es natürlich wieder ohne die Backslashes. Es ist nur während der Verarbeitung wichtig, da man sonst XSS ( Cross-site Scripting ) bzw. SQL-Injections ausführen kann. ( Unbedingt informieren! Als Coder kommt man niemals drum rum! Außer man lässt sich gerne Hacken. )

Bei Zahlen kannst du folgendes Verwenden:

Code:
intval( $_POST[ 'Anzahl' ] );

Diese Funktion konvertiert einen Wert in eine Zahl. Wenn es Erfolgreich war ist es dann die dem entsprechende Zahl.. war es nicht Erfolgreich, weil es z.B. ein Text war oder ähnliches.. dann ist der Wert 0 und damit ist zumindest ein falscher Wert eingetragen.. ( wenn man es nicht nach Erfolg kontrolliert vorher.. ) dafür konnteaber keine Lücke ausgenutzt werden ;=) Mit normalen Zahlen passiert nix.


Suche dir auf jeden Fall einen Zeitgerechten Tutorial oder ein Buch.. aber blos nix vor 2012. Es hat sich Maßig getan!

*edit*

Achja vergessen zu erwähnen:

Code:
if ( bla blub ){
 // bla blub
} else {
 
echo '<td><tr><td><td><tr><td><td><tr><td><td><tr><td><td><tr><td><td><tr><td><td><tr><td>AOFJAJF</td></tr></td></td></tr></td></td></tr></td></td></tr></td></td></tr></td>';

}

Erkennst du da was? Also für mich ist das extremst anstrengend zu lesen.

Ich rate dir zu folgendem:

Code:
if ( bla blub ){
 // bla blub
} else {
 ?>

<tr>
     <td>Guten Tag</td><td><?=$username;?></td>
</tr>

<tr>
     <td>Nr1</td>
     <td>Nr2</td>
     <td>Nr3</td>
 </tr>
<?php

}

PHP und HTML möglichst Sauber trennen. Versuch die Faulheit in dem Punkt zu besiegen und konzentriere die Faulheit für die Suche nach dem leichtesten Lösungsweg.

Gruß
 
Ok, ich habs jetzt so gemacht:
delete.php

PHP:
<?php    $verbindung = mysql_connect("xxx", "xxx", "xxx");    if(!$verbindung) {?>        Keine Verbindung!<br /><a href="xxx">Zur&uuml;ck</a><?php    } else {        mysql_select_db("xxx", $verbindung);        $sql = mysql_query("SELECT * FROM xxx");?>        <table border="1"><?php        while ($ds = mysql_fetch_object($sql)){             $text = $ds -> text;            $autor = $ds -> autor;            $datum = $ds -> datum;            $name = $ds -> name;?>            <tr>                <td>                    <form action="auswerten3.php?name=<?php $name ?>" method="post">                        <input type="submit" name="loesch" value="Nachricht l&ouml;schen"/>                    </form>                </td>                <td>                    <?php echo $name; ?>                </td>                <td>                    <?php echo $text; ?>                </td>                <td>                    <?php echo $autor; ?>                </td>                <td>                    <?php echo $datum; ?>                </td>            </tr>';<?php        }?>        </table><?php    }?>

Wenn ich jetzt auf den Button drücke, steht in der URL nur http://xxx/auswerten3.php?name= und dann kommt nichts mehr. Wo liegt der Fehler?

zauberwürfel
 
Du hast

Code:
<?php $name;?>

geschrieben, da musst du noch "echo" davor schreiben, oder:

Code:
<?=$name;?>

für einen Small-Echo Befehl^^ ( Wahrscheinlich falscher Begriff ).

Gruß
 
Moin,
wenn du PHP < 5.4.0 einsetzt, muss in der php.ini short_open_tag auf on gesetzt sein um das zu nutzen.
Code:
short_open_tag = on
Wenn du die php.ini nicht ändern kannst/darfst dann evtl. ein Eintrag in der .htaccess
Code:
php_flag short_open_tag on

MfG
 
Aber das Problem ist, dass es auch nicht mit <?php echo 'name'; ?> nicht geht. Das deprimierende ist ja, dass es in der Tabelle einwandfrei funktioniert.
zauberwürfel

@Sentence: die .htaccess, ist das die, wo auch die error-404-Seite definiert wird? Und wie komme ich, wenn es geht, an die php.ini?
 
Ich habe ganz zu Anfang meiner PHP Erfahrungen auch so meine Problemchen mit verschachteltenen Anführungszeichen gehabt.
Ich habe mir damals eine Lösung gesucht, in der sowas überhaupt nicht passieren kann.
(Es ist nicht die Optimal-Lösung, weil es vom Server etwas mehr Arbeit verlangt, wenn man die HTML-Ausgabe durch den PHP Interpreter jagt, aber fürs Coden ist es VIEL übersichtlicher und der Unterschied liegt bei so kleinen Seiten im Bereich von Nanosekunden.)
Ich verwende weder echo noch print, sondern print <<<END, weil das weder Anführungszeichen noch Hochkommas braucht, sprich ich kann beides innerhalb der Ausgabe verwenden.

Code:
<?php

$verbindung = mysql_connect("xxx", "xxx", "xxx");

if(!$verbindung) {

print <<<END
Keine Verbindung!<br /><a href="xxx">Zur&uuml;ck</a>
END;

}
else {

mysql_select_db("xxx", $verbindung);
$sql = mysql_query("SELECT * FROM xxx");

print <<<END
<table border="1">
END;

while ($ds = mysql_fetch_object($sql)) {

 $text = $ds -> text;
 $autor = $ds -> autor;
 $datum = $ds -> datum;
 $name = $ds -> name;

print <<<END
<tr>
 <td>
 <form action="auswerten3.php?name=$name" method="post">
 <input type="submit" name="loesch" value="Nachricht l&ouml;schen"/>
 </form>
 </td>
 <td>$name</td>
 <td>$text</td>
 <td>$autor</td>
 <td>$datum</td>
</tr>
END;

}

print <<<END
</table>
END;

}

?>
 
Zuletzt bearbeitet:
zauberwürfel schrieb:
die .htaccess, ist das die, wo auch die error-404-Seite definiert wird?

Wenn du die in einer Datei namens .htaccess definierst, dann ja.

Und wie komme ich, wenn es geht, an die php.ini?

PHP:
<?php phpinfo();

Dort steht gleich im ersten Block, wo die zu finden ist. Falls du auf das entsprechende Verzeichnis oder die Datei keinen Zugriff hast, Provider fragen, ob es Alternativen gibt.
 
Danke, ich werde es mir merken. Habs mal ausprobiert. Das alles durchzulesen würde ja Stunden dauern! Zum Glück stand das ganz weit oben.
zauberwürfel
 
Zurück
Oben