[PHP / SQL ] - Query verrückt oder ich doof?



  • Hallo Zusammen

    Ich habe eine einzige admin.php erstellt, welche es erlaubt, Texte und sonstige Einträge an einer einzigen SQL Tabelle zu ändern. Jede Zeile hat aber in der Spalte "seite" einen anderen Wert.

    Ich mache dies mit einer SWITCH-Anfrage, um alles zu ändern:

    switch($_REQUEST['txt_id'])
    	{
    		case 'index':
    		{
    		?>
    						<div id="main">
    				<div id="subnavigation">
    					<ul>
    						<li class="active"><a href="admin_text.php?txt_id=index">Startseite / Home</a></li>
    						<li class="normal"><a href="admin_text.php?txt_id=news">News-Seite</a></li>
    						<li class="normal"><a href="admin_text.php?txt_id=aboutus">Über Uns -> Unternehmen</a></li>
    						<li class="normal"><a href="admin_text.php?txt_id=team">Über Uns -> Team</a></li>
    						<li class="normal"><a href="admin_text.php?txt_id=taxi">Taxi -> Services</a></li>
    						<li class="normal"><a href="admin_text.php?txt_id=abo">Taxi -> Abonnemente</a></li>
    						<li class="normal"><a href="admin_text.php?txt_id=tarife">Taxi -> Tarife</a></li>
    					</ul>
    
    				</div>
    				<div id="content">
    					<h1>Textbearbeitung</h1>
    					<p align="left">
    					<?php
    					switch($_REQUEST['save'])
    					{
    						case 'ok':
    						{
    						$connectionid2 = mysql_connect ($db_host, $db_uname, $db_pass);
                            if (!mysql_select_db ($db_name, $connectionid2))
                            {
                              die ("Keine Verbindung zur Datenbank");
                            }
                            mysql_query("UPDATE texte SET id='".$old_id."', text_nr='".$old_nr."', titel='".$_POST['titel_new']."', inhalt='".$_POST['text_new']."' WHERE seite='index'");
                            echo 'Passen Sie den Text und die Überschrift nach Ihren Wünschen an.<br> Merken Sie sich jedoch, dass die Überschrift keine Umlaute (ä,ö oder ü) enthalten darf. Sollten Sie nicht mit den gängigsten Standard-HTML-Codes vertraut sein, können Sie dies in einem neuen Fenster nachschlagen.<br> <a href="html_tags.php" target="_new"><i>HTML-Codes für die Textbearbeitung anzeigen</i></a><br><br>
                            <center><b>Textänderung wurde erfolgreich gespeichert!</b><br><a href="admin_text.php?txt_id=index" target="_self">Zurück</a>';
    
    						break;
    						}
    
    						default:
    						{
    						$connectionid = mysql_connect ($db_host, $db_uname, $db_pass);
                            if (!mysql_select_db ($db_name, $connectionid))
                            {
                              die ("Keine Verbindung zur Datenbank");
                            }
                            //SQL ABFRAGE STATUS
                       		$result = mysql_query("SELECT id, text_nr, seite, titel, inhalt FROM texte WHERE seite='index'");
                            while ($row = mysql_fetch_array($result)) {
                            $old_titel = $row['titel'];
                            $old_text = $row['inhalt'];
                            $old_idd = $row['id'];
                            $old_nrr = $row['text_nr'];
                            }
    						?>
    						Passen Sie den Text und die Überschrift nach Ihren Wünschen an.<br> Merken Sie sich jedoch, dass die Überschrift keine Umlaute (ä,ö oder ü) enthalten darf. Sollten Sie nicht mit den gängigsten Standard-HTML-Codes vertraut sein, können Sie dies in einem neuen Fenster nachschlagen.<br> <a href="html_tags.php" target="_new"><i>HTML-Codes für die Textbearbeitung anzeigen</i></a><br><br>
    						<form action="admin_text.php?txt_id=index&save=ok" method="post" target="_self">
    						<?php
    						echo '<input type="hidden" name="old_id" value="'.$old_idd.'"><br><input type="hidden" name="old_nr" value="'.$old_nrr.'">';
    						?>
    						<table width="100%" cellpadding="1" cellspacing="1" border="0" align="center">
    						<tr>
    						<td><font face="Helvetica" size="2"><font color="black">Seitentitel:</font></font></td>
    						<td>&nbsp;</td>
    						<?php
    						echo '<td><input type="text" name="titel_new" size="25" value="'.$old_titel.'"></td>';
    						?>
    						</tr>
    						<tr>
    						<td>&nbsp;</td>
                      	 	 <td>&nbsp;</td>
                      	 	 <?php
                       		 echo '<td><font face="Helvetica" size="2"><font color="black">Inhalt / Text:</font></font><br><textarea name="text_new" rows="10" cols="45">'.$old_text.'</textarea></td>';
                       		 ?>
                       		 </tr>
                       		 <tr>
                       		 <td>&nbsp;</td>
                       		 <td>&nbsp;</td>
                       		 <td align="center"><input type="submit" value="Änderungen Speichern"></td>
                       		 </tr>
                       		 </table>
                       		 </form>
    						<?php
    						break;
    						}
    					}
    				?>
    

    Das klappt alles ganz gut und ich habe keine Probleme.
    Es ist nur so, ich habe dies nun für mehrere Seiten.

    Wenn txt_id news ist, also case 'news': sollte dann statt WHERE seite=index auch news stehen. Hab dies auch so geändert.

    Jedoch werden mir die Were aus der Spalte "News" korrekt angezeigt, doch ändere ich den Text geschieht nichts mehr! Ich hab das gefühl dass UPDATE-Funktion nicht mehr verwendet wird?? Wenn ja warum und wie kann ich das sonst lösen?

    Denn die Index-Seite kann ich jederzeit ändern da funktioniert alles perfekt. Aber beim zweiten case wo ich anstatt WHERE seite=index die news bearbeiten will, geht nichts, also die Änderungen werden nicht gespeichert.

    Why??

    Grüsse
    Wolf



  • Also, erstmal gib Dir Deine zusammengebaute SQL-Abfrage aus. Zum testen kannst Du die Abfrage über phpmyadmin oder in der mysql-console direkt eingeben und schauen was rauskommt. Ansonsten solltest Du auch die Rückgabe von mysql_query auf Fehler überprüfen.

    Ich finde Deinen ganzen Code unübersichtlich und daher schwer zu warten.
    Statt der ganzen Switch-Strukturen würde ich sowas wie:

    // Wenn text_id nicht gesetzt ist index anzeigen
    $text_id = isset($_REQUEST['text_id']) ? $_REQUEST['text_id'] : 'index';
    
    // hier die verfügbare Seiten - könnte auch eine Assoziation sein, wenn die Dateinamen anders heißen sollen
    $erlaubt = array('index', 'news', 'aboutus', 'team');
    if(in_array($text_id, $erlaubt)) {
        // hier wird die entsprechende Seite geladen
        include("views/$text_id.php");
    } else {
       // Fehlerseite oder wahlweise auch einfach wieder index anzeigen
    }
    

    verwenden.
    Damit kannst Du Deine Views/Sichten von der Logik trennen und musst nicht alles in eine Datei quetschen.
    Macht das ganze übersichtlicher und dadurch einfacher.



  • Hat sich erledigt danke.

    ich war doof *g*
    Ich wollte die alte Instance aus ID auslesen und erneut als dergleichen speichern. Dies geht aber nicht, da 'id' als NOT NULL AUTO_INCREMENT festgelegt wurde. *gg*

    Habe nun die UPDATE auf 'id' rausgenommen und siehe da, funktioniert wunderbar! *g*


Log in to reply