Hilfe PHP/MySQL

hardware_chef

Enthusiast
Thread Starter
Mitglied seit
12.10.2007
Beiträge
1.886
Ort
_blank
Hi Leute,

ich habe mir ein kleines, eigenes CMS für eine Fanpage aufgebaut. Soweit so gut. Nun bin ich dabeim den Adminbereich fertigzustellen. Allerdings habe ich dort ein paar Probleme.

Folgender Code steht:

PHP:
<?php
$verbindung = mysql_connect ("localhost","xxx", "xxx") or die ("keine Verbindung möglich.Benutzername oder Passwort sind falsch");
mysql_select_db("xxx") or die ("Die Datenbank existiert nicht.");
?>

<?php

if (isset($_GET['submit'])) 

{

$text= $_POST ['text'];

$aendern = "UPDATE lauftext Set text = '$text'";
$update = mysql_query($aendern);

}
else 
{
$abfrage = "SELECT * FROM lauftext";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);

$text=$row->text;

}
?>
<form action="" method="post">
<br>
Text:
<br>
<textarea name="content" cols="100" rows="30"><?php echo $text; ?></textarea>
<br>
<br>
<input type="submit" name="submit" value="Speichern">
</form>

Ich bekomme auch den Inhalt der Datenbank angezeigt. Wenn ich jedoch auf "Speichern" klicke, wird der neu eingegebene Text nicht gespeichert und es wird mir wieder der alte Text angezeigt. Weis da jemand weiter?

Gruß,
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Hab jetzt im Formular von content auf text den namen der textarea gemacht. Auch nicht des Rätsels Lösung. Danke aber ;)
 
Hast du dir den mal angeguckt was in $_REQUEST steht und wie kommst du auf $_GET['submit'] wenn du eine Form per POST auf die eigene Seite verschickst ?
 
Zuletzt bearbeitet von einem Moderator:
Das ist eine gute Frage wie ich auf $_GET['submit'] gekommen bin ^^. Bezühlich dem $_REQUEST: Werde ich mir auf jeden Fall anschauen. Danke auch vorerst an dich :)
 
am besten waere natuerlich zu ueberpruefen ob das ueberhaupt ein POST Request ist...

if($_SERVER['REQUEST_METHOD'] == 'POST')

aber naja... tu dir nen Gefallen und schmeiss das weg, nimm ein fertiges CMS und erfinde das Rad nicht neu.

Oder validiere zumindest die eingaben. filter_input von php ist da super fuer
 
Jetzt habe ich noch ein kleines Problem und zwar wenn ich folgendes:
PHP:
<img src="bilder/trikots/1.gif">
In die textarea eingebe und dann speichere kommt folgendes heraus:
PHP:
<img src="\bilder/trikots/1.gif\">
Das hat zur Folge dass das Bild nicht mehr angezeigt wird. Weis da jemand abhilfe?
 
Zuletzt bearbeitet:
stripslashes() bei der ausgabe.
 
Danke für den Tipp. Doch iwie bin ich zu dumm "stripslashes ()" einzugeben. Mir ist schon klar das man das dann wie folgt machen würde:

PHP:
<?php

$content = $row['content'];
echo stripslashes ($content);

?>

Nur wenn ich das so bei der Ausgabe eintippe passiert wieder das alte.

Gruß,
 
Neustes Problem:

Erstmal der Code:

PHP:
<?php
$verbindung = mysql_connect ("localhost","xxx", "xxx") or die ("keine Verbindung möglich.Benutzername oder Passwort sind falsch");
mysql_select_db("xxx") or die ("Die Datenbank existiert nicht.");

?>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')

{

$rang= $_POST ['rang'];
$club= $_POST ['club'];
$punkte= $_POST ['punkte'];


$aendern = "UPDATE tabelle Set rang= '$rang', club= '$club', punkte= '$punkte' WHERE id = '1'";
$update = mysql_query($aendern);
		    echo "<font color=\"990000\">Erfolgreich aktualisiert!</font>";
			echo "<br>";
			echo "<br>";
}

else {

$abfrage = "SELECT * FROM tabelle";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);

$rang=$row->rang;
$club=$row->club;
$punkte=$row->punkte;

}

?>

<form action="#" method="post">
<table style="text-align: center; width: 25px;" border="1"
 cellpadding="2" cellspacing="2">
  <tbody>
      <tr>
      <td>Rang</td>
      <td>Mannschaft</td>
      <td>Punkte</td>
    </tr>
    <tr>
      <td><input name="rang" value="<?php echo $rang; ?>"></td>
      <td><input name="club" value="<?php echo $club; ?>"></td>
      <td><input name="punkte" value="<?php echo $punkte; ?>"></td>
    </tr>
        <tr>
      <td><input name="rang" value="<?php echo $rang; ?>"></td>
      <td><input name="club" value="<?php echo $club; ?>"></td>
      <td><input name="punkte" value="<?php echo $punkte; ?>"></td>
    </tr>
        <tr>
      <td><input name="rang3" value="<?php echo $rang; ?>"></td>
      <td><input name="club3" value="<?php echo $club; ?>"></td>
      <td><input name="punkte3" value="<?php echo $punkte; ?>"></td>
    </tr>
        <tr>
      <td><input name="rang4" value="<?php echo $rang; ?>"></td>
      <td><input name="club4" value="<?php echo $club; ?>"></td>
      <td><input name="punkte4" value="<?php echo $punkte; ?>"></td>
    </tr>
        <tr>
      <td><input name="rang5" value="<?php echo $rang; ?>"></td>
      <td><input name="club5" value="<?php echo $club; ?>"></td>
      <td><input name="punkte5" value="<?php echo $punkte; ?>"></td>
    </tr>
        <tr>
      <td><input name="rang6" value="<?php echo $rang; ?>"></td>
      <td><input name="club6" value="<?php echo $club; ?>"></td>
      <td><input name="punkte6" value="<?php echo $punkte; ?>"></td>
    </tr>
        <tr>
      <td><input name="rang7" value="<?php echo $rang; ?>"></td>
      <td><input name="club7" value="<?php echo $club; ?>"></td>
      <td><input name="punkte7" value="<?php echo $punkte; ?>"></td>
    </tr>
        <tr>
      <td><input name="rang8" value="<?php echo $rang; ?>"></td>
      <td><input name="club8" value="<?php echo $club; ?>"></td>
      <td><input name="punkte8" value="<?php echo $punkte; ?>"></td>
    </tr>
        <tr>
      <td><input name="rang9" value="<?php echo $rang; ?>"></td>
      <td><input name="club9" value="<?php echo $club; ?>"></td>
      <td><input name="punkte9" value="<?php echo $punkte; ?>"></td>
    </tr>
        <tr>
      <td><input name="rang10" value="<?php echo $rang; ?>"></td>
      <td><input name="club10" value="<?php echo $club; ?>"></td>
      <td><input name="punkte10" value="<?php echo $punkte; ?>"></td>
    </tr>
        <tr>
      <td><input name="rang11" value="<?php echo $rang; ?>"></td>
      <td><input name="club11" value="<?php echo $club; ?>"></td>
      <td><input name="punkte11" value="<?php echo $punkte; ?>"></td>
    </tr>
        <tr>
      <td><input name="rang12" value="<?php echo $rang; ?>"></td>
      <td><input name="club12" value="<?php echo $club; ?>"></td>
      <td><input name="punkte12" value="<?php echo $punkte; ?>"></td>
    </tr>
        <tr>
      <td><input name="rang13" value="<?php echo $rang; ?>"></td>
      <td><input name="club13" value="<?php echo $club; ?>"></td>
      <td><input name="punkte13" value="<?php echo $punkte; ?>"></td>
    </tr>
        <tr>
      <td><input name="rang14" value="<?php echo $rang; ?>"></td>
      <td><input name="club14" value="<?php echo $club; ?>"></td>
      <td><input name="punkte14" value="<?php echo $punkte; ?>"></td>
    </tr>
        <tr>
      <td><input name="rang15" value="<?php echo $rang; ?>"></td>
      <td><input name="club15" value="<?php echo $club; ?>"></td>
      <td><input name="punkte15" value="<?php echo $punkte; ?>"></td>
    </tr>
        <tr>
      <td><input name="rang16" value="<?php echo $rang; ?>"></td>
      <td><input name="club16" value="<?php echo $club; ?>"></td>
      <td><input name="punkte16" value="<?php echo $punkte; ?>"></td>
    </tr>
        <tr>
      <td><input name="rang17" value="<?php echo $rang; ?>"></td>
      <td><input name="club17" value="<?php echo $club; ?>"></td>
      <td><input name="punkte17" value="<?php echo $punkte; ?>"></td>
    </tr>
        <tr>
      <td><input name="rang18" value="<?php echo $rang; ?>"></td>
      <td><input name="club18" value="<?php echo $club; ?>"></td>
      <td><input name="punkte18" value="<?php echo $punkte; ?>"></td>
    </tr>
  </tbody>
</table>


<input type="submit" name="submit" value="Speichern">
</form>

Kann ich nun iwie in den input Feldern jeweil das Ergebnis einer bestimmten ID anzeigen lassen?
 
Code:
while ($row = mysql_fetch_object($ergebnis) {

$rang=$row->rang;
$club=$row->club;
$punkte=$row->punkte;
?>
        <tr>
      <td><input name="rang18" value="<?php echo $rang; ?>"></td>
      <td><input name="club18" value="<?php echo $club; ?>"></td>
      <td><input name="punkte18" value="<?php echo $punkte; ?>"></td>
    </tr>
<?php
}
 
Versteh ich iwie net :( Sry das ich dich so in Anspruch nehmen muss. Tausend Dank!
 
bei deinem Skript gibts du 18 mal die selben Werte aus,
bei dem BSP von Kasn wird jedes mal in der While-Schleife ein Eintrag in eine Tabellenzeile (wobei DIV besser wäre :bigok: ) eingetragen

die <table> und </table> -tags gehören dann allerdings vor bzw. nach die while auch noch hin

mfg
aelo
 
Code:
$aendern = "UPDATE tabelle Set rang= '$rang', club= '$club', punkte= '$punkte' WHERE id = '1'";

Übergebe NIEMALS Variablen ungeprüft und ohne Konvertierung an eine SQL-Anweisung. Man braucht z.B. nur folgendes in das Formularfeld der Variablen $punkte einzugeben um den ganzen Tabelleninhalt zu löschen:
0'; DELETE FROM tabelle; --

Dadurch werden erst die Update-Anweisung auf alle Zeilen in der Tabelle angewendet und dann alle Zeilen gelöscht. Die Striche -- bedeuten, dass der WHERE-Teil als Kommentar behandelt und ignoriert wird.

Tue dir bitte selbst einen Gefallen und setze dich mit der Funktion mysql_real_escape_string() auseinander oder lerne PDO zu benutzen, falls du PHP 5.1 oder höher verwendest. Beide setzen in den Eingabedaten Escapezeichen, sodass es nicht mehr möglich ist durch bestimmte Nutzereingaben deine SQL-Anweisungen zu manipulieren.

Die while-Schleife von Kasn führt dazu, dass für jede Zeile im Ergebnis der SQL-Abfrage eine Tabellenzeile mit den Daten der jeweiligen Zeile aus dem SQL-Ergebnis ausgegeben wird.
 
wäre ein $_GET['rang']; nicht auch okay? (lerne selbst grade PHP und deshalb interessiert mich das auch :d

mfg
aelo
 
(wobei DIV besser wäre :bigok: )
nein, wieso denn? Wir geben tabellarisch daten aus, da ist ein tabellenkonstrukt durchaus legitim. divs waeren da viel zu viel gefrickel

wäre ein $_GET['rang']; nicht auch okay? (lerne selbst grade PHP und deshalb interessiert mich das auch :d
nein. $_GET['rang'] sollte einfach leer sein. PHP kennt die beiden Methoden get und post und was ueber die jeweilige art uebergeben wird (get = querystring, post = formular) steht in den Variablen drin. Vollkommen ungefiltert.

Code:
$aendern = "UPDATE tabelle Set rang= '$rang', club= '$club', punkte= '$punkte' WHERE id = '1'";

Übergebe NIEMALS Variablen ungeprüft und ohne Konvertierung an eine SQL-Anweisung. Man braucht z.B. nur folgendes in das Formularfeld der Variablen $punkte einzugeben um den ganzen Tabelleninhalt zu löschen:
0'; DELETE FROM tabelle; --

Dadurch werden erst die Update-Anweisung auf alle Zeilen in der Tabelle angewendet und dann alle Zeilen gelöscht. Die Striche -- bedeuten, dass der WHERE-Teil als Kommentar behandelt und ignoriert wird.

Tue dir bitte selbst einen Gefallen und setze dich mit der Funktion mysql_real_escape_string() auseinander oder lerne PDO zu benutzen, falls du PHP 5.1 oder höher verwendest. Beide setzen in den Eingabedaten Escapezeichen, sodass es nicht mehr möglich ist durch bestimmte Nutzereingaben deine SQL-Anweisungen zu manipulieren.
besser waere sogar noch 0'; DROP DATABASE; -- ... dann muss ich nichtmal den tabellennamen erraten.

stimme ich dir vollkommen zu, schrieb ich ja oben schon. Aber ich vermute das wird ihn ueberfordern ;)

desweiteren wuerde ich immer, auch fuer solch trivale Aufgaben irgendein fertiges Framework benutze. Das Zend Framework ist schnell eingebunden bietet eine Menge und macht die Arbeit IMHO deutlich leichter.
 
Zuletzt bearbeitet:
Kasn hat recht :). Ich bin überfordert ;). Ich werde mir mal das Zend Framework anschauen. Wenn nicht mach ich halt für jeden Rang einen einzelnen Link und eine einzelne Datei ;)

Danke an alle Beteiligten!

Gruß,
 
das Zend_Framework hilft dir auch nicht wenn du die schleife nicht verstehst, es macht nur dann das arbeiten einfacher ;)

Ich versuchs mal zu erklaeren. Also du setzt eine Anfrage an die Datenbank ab. wenn diese Ergebnisse hat kannst du mit $row = mysql_fetch_object($ergebnis) die naechste Zeile aus dem Ergebniss holen.
mit while($row = mysql_fetch_object($ergebnis)) wird nun so lange das naechste ergebniss geholt bis keines mehr da ist, und der code innerhalb der while schleife ausgefuehrt. Es der gibt mit jedem durchlauf eine neuen Tabellenzeile aus.
 
So verstehe ich es schon. Nur hab ich ja bei jedem Eintrag eine andere ID. Dies muss ja dann iwie per <?php echo?> in ein input feld ausgegeben werden.

Gruß,
 
ah ok...

PHP:
<?php
while ($row = mysql_fetch_object($ergebnis)) {

?>
<tr>
      <td><input name="row[<?= $row->id ?>][rang]" value="<?= $row->rang; ?>"></td>
      <td><input name="row[<?= $row-> id ?>][club]" value="<?= $row->club; ?>"></td>
      <td><input name="row[<?= $row-> id ?>][punkte]" value="<?= $row->punkte; ?>"></td>
</tr>
<?php
}

auf der naechsten seite nach dem post ist $_POST['row'] dann ein array mit der datensatz id als key und den elemens rang, club und punkte.
das kannst du dann mit foreach durchgehen.

PHP:
<?php
foreach ($_POST['row'] as $id => $item) {
   print_r($item);

   /* 
...
*/
}
und daraus kannst du dir dann deinen update befehl zusammenbauen.


edit: brrrr ist das php hier schlecht zu lesen auf dem dunklen hintergrund
 
Zuletzt bearbeitet:
Ich raffs net -.- Habe dich mal in ICQ hinzugefügt. WÄre dann wohl besser, oder?
 
aber erst heute abend, kein icq hier im office.
 
Hier mal ein Beispiel einer Schleife aus einem Script von mir:
PHP:
$Ergebnis = mysql_query($SQLString,$Verbindung);
if ($Ergebnis)
{
	$Datensatz = mysql_fetch_array($Ergebnis);
	while ($Datensatz)
	{
echo "<td>$Datensatz[Englisch]</td>
<td>$Datensatz[Deutsch]</td>";
$Datensatz = mysql_fetch_array($Ergebnis);
	}
}
Mit $Datensatz[Englisch] greife ich direkt auf die Spalte "Englisch" in der DB zu.
 
sabbermaul: das machst du aber arg umstaendlich muss ich sagen. Warum das $Datensatz = mysql_fetch_array($Ergebnis); nicht direkt in die while Bedingung?
 
Allerdings hab ich ja in der Spalte "club" 18 Einträge. Oder ich lass diese einfach in einer textarea ausgeben. Ich probiere es mal. Dankeschön!

Gruß,
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh