Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

PHP / MySQL: Probleme

Hi,
ich bin ne Anfängerin im Gebiet PHP/MySQL und gerade dabei, ne Art kleines Content-Management-System für meine Website zu bauen. Sprich, ich will mehr Seiteninhalte via Datenbank abrufen, aber mich nicht jedesmal bei phpymyadmin einloggen müssen, um was zu ändern.

Ich habe eine Rubrik "TV-Tipp" auf meiner Page. Ich bin auch schon soweit gekommen, dass in meinem Admin-Bereich alle bereits eingegebenen TV-Tipps aufgelistet werden. Das habe ich so gelöst:

//Abfrage
$query = "SELECT * FROM tvtipp ORDER BY datum";

//Ergebnis der Abfrage in $result schreiben
$result = mysql_query($query, $connection) or die('error making query');
 
  ?>
 
  <table width="70%" align="center" cellpadding=3 border="1" bordercolor="#CCCCCC">
  <tr>
    <td width="15%"><i>Datum</i></td>
    <td><i>Inhalt</i></td>
  </tr>

<?
//solange wie Zeilen gelesen werden können:
while ($ausgabe = mysql_fetch_array($result)){
?>

  <tr>
<td><?=$ausgabe['datum']?></td>
    <td><?=$ausgabe['inhalt']?></td>
  </tr>
<?
}
?>

Das klappt auch.
Nun soll dadrunter aber noch ein Auswahlmenü kommen, in dem alle bereits eingetragenen Daten stehen (über das Menü soll man das jeweilige Datum dann löschen können). Das habe ich so versucht:

<form name="loeschen" method="post" action="tvtipp-loeschen.php">
<select name="loeschen">

<?
while ($ausgabe = mysql_fetch_array($result)){
?>

<option value="<?=$ausgabe['datum']?>" </option>

<?
}
?>
</select>
<input type="submit" name="submit" value="Loeschen">
</form>

Leider erscheint ein Auswahlmenü, aber kein Inhalt. Findet jemand einen Fehler oder weiß ne bessere Lösung?? Bin echt am verzweifeln und dankbar für jede Hilfe!
« Letzte Änderung: 07.08.06, 08:35:10 von Sunflower324 »

Antworten zu PHP / MySQL: Probleme:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hallo |

Das Problem ist reiner HTML-Natur. Deine option-Tags werden falsch gesetzt.

Normalerweise sollte das so aussehen:

<option>Text</option>

...oder anders, wenn sich der angezeigte Wert vom übertragenen Wert unterscheiden soll:

<option value="wert">Text</option>

Ich hoffe mal, dass du in deiner DB-Tabelle "tvtipp" eine Spalte "id" oder sowas hast, um die Datensätze eindeutig zu identifizieren. Über diese ID wäre dann auch der Löschvorgang vorzugsweise zu lösen:

"DELETE FROM tvtipp WHERE id=".$id;

...wobei hier $id noch gesetzt werden müsste.

Also das würde so funktionieren, aber ich finde das recht umständlich. Mach dir doch einfach in der ersten Ausgabeliste eine weitere Spalten daneben, in der du für jeden Eintrag einen Löschbutton setzt. Dieser enthält einfach einen Link zu dem Skript, in dem gelöscht wird. Die ID übergibst du einfach als GET-Parameter.

greez 8)
JoSsiF

HI!

das einzige was er gemacht hat ist ">" am ende des ersten option tags vergessen zu haben.

was noch sein könnte es, dass er das doppel fetchen eines querys nicht verträgt, dürfte aber normalerweise gehen.

MFG
BWA

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
das einzige was er gemacht hat ist ">" am ende des ersten option tags vergessen zu haben.

Deswegen wird da aber trotzdem noch nichts angezeigt, weil der Ausgabetext zwischen öffnendem und schließendem option-Tag stehen muss. Was bei value steht, ist das, was übertragen wird ;)

@ JoSsiF:
Ich hatte mir auch schon überlegt, es so zu machen, wie du vorgeschlagen hast. Werde jetzt mal versuchen, das hinzukriegen :) Ist wohl echt einfacher!

Danke für eure schnelle Hilfe schonmal... melde mich bei neuen Problemen :)

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
Danke für eure schnelle Hilfe schonmal... melde mich bei neuen Problemen :)

Melde dich doch bitte auch, wenn ein Problem gelöst ist (bitte gleich mit Lösung). :)

Das Problem ist gelöst :)
Ich hab es gemacht, wie du mir empfohlen hast... eine "Löschen"-Spalte hinzugefügt, ID der Zeile im Link übergeben an eine datei loeschen.php, die dann die Zeile mit der betreffenden ID aus der Datenbank löscht.

Ok nächstes Problem *gg*
Man soll den TV-Tipp nun natürlich auch bearbeiten können.
Dazu habe ich hinter jedem Tipp einen Link "editieren"... die ID des Tipps wird automatisch an die Datei edit.php übergeben. In dieser edit.php wird in einem Formular angezeigt, was bisher eingetragen wurde.

$_GET['id'] = $id;

// richtigen Eintrag suchen
$query = "SELECT * FROM tvtipp
WHERE id='$id'";

$result = mysql_query($query, $connection) or die('error making query');

$zeile = mysql_fetch_array($result);
$ablauftag = $zeile['ablauftag'];
$ablaufmonat = $zeile['ablaufmonat'];
$ablaufjahr = $zeile['ablaufjahr'];
 
?>
 
<form name="tvtippedit" method="post" action="edit2.php">
  <table width="60%"  border="0" cellspacing=10 align="center">
    <tr>
      <td width="27%">Ablaufdatum:</td>
      <td width="73%"><input type="text" name="ablauftag" size=5 maxlength="2" value="<?echo $ablauftag ?>">  <input type="text" name="ablaufmonat" size=5 maxlength="2" value="<?echo $ablaufmonat ?>"> <input type="text" name="ablaufjahr" size=10 maxlength="4" value="<?echo $ablaufjahr ?>">       <br>
        <font style="font-size:12px;">Erster Tag, an dem Termin NICHT mehr angezeigt werden soll</font>
      </td>
    </tr>
  </table>
 <div align=center>     <input type="submit" value="Senden"> 
 <input type="hidden" name="id" value="<? echo $id ?>" />
  <input type="hidden" name="soap" value="vl" /></div>
  </form>
 
So weit funktioniert das ganze auch. Nun die Datei, an die übergeben wird:
$_POST['id'] = $id;
$_POST['ablauftag'] = $ablauftagneu;
$_POST['ablaufmonat'] = $ablaufmonatneu;
$_POST['ablaufjahr'] = $ablaufjahrneu;
$_POST['soap'] = $soap;

if ($soap == "vl") {
$sql = "UPDATE tvtipp
SET ablauftag = '$ablauftagneu',
ablaufmonat = '$ablaufmonatneu',
ablaufjahr = '$ablaufjahrneu'
WHERE id = '$id' ";
$update = mysql_query ($sql, $connection) or die ('error making query');
echo "Der TV-Tipp wurde aktualisiert!";
}
Ändert man also irgendwo das Datum und klickt auf "Senden", ist das Datum danach komplett weg :(
Ich habe mal nachgeforscht und festgestellt, dass die edit2.php zwar die $id ausgeben kann, aber bei einer Ausgabe von z.B. $ablauftag wird nichts angezeigt.
Wo ist mein fehler?? ich hab alles schon 100 mal durchgeschaut..

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
$_POST['id'] = $id;
$_POST['ablauftag'] = $ablauftagneu;
$_POST['ablaufmonat'] = $ablaufmonatneu;
$_POST['ablaufjahr'] = $ablaufjahrneu;
$_POST['soap'] = $soap;

Dreh das hier mal rum. Das ergibt so keinen Sinn.

Es geht noch weiter mit den Probs *grummel*...
Hab zwei Files zum Eintrag eines neuen Termines...

<form name="tvtipp" method="post" action="tv-tipp-eintragung.php">
  <table width="60%"  border="0" cellspacing=10 align="center">
    <tr>
      <td>Soap:</td>
      <td><input type="radio" name="soap" value="vl">
        vl<br>
        <input type="radio" name="soap" value="mh">
        mh</td>
    </tr>
    <tr>
      <td width="27%">Ablaufdatum:</td>
      <td width="73%"><input type="text" name="ablauftag" size=5 maxlength="2">  <input type="text" name="ablaufmonat" size=5 maxlength="2"> <input type="text" name="ablaufjahr" size=10 maxlength="4">       <br>
        <font style="font-size:12px;">Erster Tag, an dem Termin NICHT mehr angezeigt werden soll</font>
      </td>
    </tr>
    <tr>
      <td>Darsteller:</td>
      <td><input type="text" name="darsteller"></td>
    </tr>
    <tr>
      <td>Rolle:</td>
      <td><input type="text" name="rolle">
        (ohne Anf&uuml;hrungszeichen) </td>
    </tr>
    <tr>
      <td>Sendungsname:</td>
      <td><input type="text" name="sendungsname">
        (ohne Anf&uuml;hrungszeichen) </td>
    </tr>
    <tr>
      <td>Wochentag:</td>
      <td><input type="radio" name="wochentag" value="Montag">
        Mo
          <input type="radio" name="wochentag" value="Dienstag">
          Di
          <input type="radio" name="wochentag" value="Mittwoch">
          Mi
          <input type="radio" name="wochentag" value="Donnerstag">
      Do
      <input type="radio" name="wochentag" value="Freitag">
      Fr
      <input type="radio" name="wochentag" value="Samstag">
      Sa
      <input type="radio" name="wochentag" value="Sonntag">
      So</td>
    </tr>
    <tr>
      <td>Datum:</td>
      <td><input type="text" name="datum">
      (im Format xx<strong>.</strong>xx<strong>.</strong>) </td>
    </tr>
    <tr>
      <td>Uhrzeit:</td>
      <td><input type="text" name="uhrzeit">
      (im Format xx<strong>:</strong>xx) </td>
    </tr>
    <tr>
      <td>Sender:</td>
      <td><input type="text" name="sender"></td>
    </tr>
  </table>
 <div align=center>     <input type="submit" value="Senden"></div>
  </form>
$soap = $_POST["soap"];
$ablauftag = $_POST["ablauftag"];
$ablaufmonat = $_POST["ablaufmonat"];
$ablaufjahr = $_POST["ablaufjahr"];
$darsteller = $_POST["darsteller"];
$rolle = $_POST["rolle"];
$sendungsname = $_POST["sendungsname"];
$uhrzeit = $_POST["uhrzeit"];
$sender = $_POST["sender"];
$wochentag = $_POST["wochentag"];
$datum = $_POST["datum"];

$fehlerfelder = "<font color=red>Du hast ein oder mehrere erforderliche Felder nicht ausgefüllt. Bitte korrigiere deine Angaben.</font>\n\n";

if ($ablauftag == ""  || $ablaufmonat == "" || $ablaufjahr == "" || $darsteller == "" || $rolle == "" || $sendungsname== "" || $uhrzeit=="" || $sender=="") {
  echo $fehlerfelder;
}

else {
if ($soap == "vl") {
$eintrag = "INSERT INTO tvtipp (darsteller, rolle, sendungsname, sendungswochentag, sendungsdatum, uhrzeit, sender, ablauftag, ablaufmonat, ablaufjahr)
VALUES ('$darsteller', '$rolle', '$sendungsname', '$wochentag', '$datum', '$uhrzeit', '$sender', '$ablauftag', '$ablaufmonat', '$ablaufjahr')";
$eintragen = mysql_query($eintrag) or die ('error making query');
echo "Dein TV-Tipp wurde erfolgreich eingetragen.<br><br><a href='tv-tipp.php'>Zurück zur Übersicht</a>";
}
Warum in Gottes Namen kommt, "error making query" sobald die zweite Datei ausgeführt wird? :(
« Letzte Änderung: 07.08.06, 22:57:15 von Sunflower324 »

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Zu deinem Query-Error kann man wahrscheinlich nicht viel sagen, wenn man die Datenbankstruktur nicht kennt.

Aber ist schon ein ziemlich witziges Skript, was du da hast. Warum gibst du z.B. den Wochentag extra an? Den kannst du doch aus dem Datum extrahieren (wenn du dies in ein vernünftiges Format gebracht hast).

Ach ja: und bevor du neue Fragen stellst, gehe erst auf die genannten Lösungen ein, damit man weiß, was Phase ist hier ;)

$_POST['id'] = $id;
$_POST['ablauftag'] = $ablauftagneu;
$_POST['ablaufmonat'] = $ablaufmonatneu;
$_POST['ablaufjahr'] = $ablaufjahrneu;
$_POST['soap'] = $soap;

Dreh das hier mal rum. Das ergibt so keinen Sinn.
Ich hatte eigentlich hierzu was gepostet, aber irgendwie ist das nicht mehr da?! Naja... ich hab das erste Script zum Editieren auf jeden Fall ans Laufen gekriegt. Hab es dazu nochmal fast neu geschrieben. Ich glaube es gab da ein Durcheinander mit den Variablen. Am Code dürfte es nicht gelegen haben, der sieht jetzt wieder genau so aus.

Hast schon recht, man könnte den Wochentag noch extrahieren, aber ich glaube, es tut auch keinen Abbruch, wenn man den mal eben von Hand anklickt :)

Meine Datenbankstruktur ist vermutlich völlig falsch für die Experten, aber bisher hat eigentlich alles so geklappt... hmm.
Also ich hab ne Spalte ID mit auto_increment vom Typ INT. Die restlichen Spalten sind alle vom Typ VARCHAR mit einer Länge von 2-50.

Argh... mein Problem hat sich erledigt. Hab den fehler in der Datenbank entdeckt... im Code hieß die spalte "sendungSname" und in der Datenbank "sendungname"... ärgerlich, aber nun gehts :)


« Domain-Ziel ändernHintergrundmusik auf der Homepage »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Scart
SCART, ein europäischer Standard für Steckverbindungen, spielte eine wichtige Rolle in der Geschichte der Audio- und Videotechnik. Ursprünglich konzipiert,...

Datenbank
Eine Datenbank (DBS), im englischen database, ist eine strukturierte Datensammlung und fungiert wie ein "digitales Archiv". Datenbanken dienen der effizienten Aufbewahrun...

Quellcode
Ein Quellcode, auch als Quelltext bekannt, bezeichnet den unkompilierten Programm-Code einer Software. Quell- oder Programm-Code ist der auch für Menschen lesbare Co...