Datenbank UPDATE-Funktion richtig erstellen

SasKu

Grünschnabel
Hallo,

habe ein bisschen gegooglet, da ich ein Problem mit einem Script habe. Leider haben mit die Ergebnisse der Suche nicht geholfen. Da ich aber gesehen habe, dass hier vile Leute Ahnung haben, dachte ich, ich registriere mich mal und stelle meine Frage hier.

Ich habe mir ein Script runtergeladen, dass einene Datenbank verwendet. Dazu gibt es eine administrative Oberfläche, die per REPLACE die Felder überschreiben soll, die ich per FORM ändern kann. Leider verwende ich PHP 5.2 und MySQL 5.1. Anscheinend wurde das Script für frühere Versionen geschrieben.

Nun das eigentliche Problem ist, dass die Datenbankfelder nicht überschrieben werden. Ich habe leider zu wenig Erfahrung mit MySQL und weiß nicht, wie ich den Befehl richtig definiere. Hier also der Code-Teil, den ich verwende (den Rest habe ich der Übersicht halber mal weggelasen):

PHP:
<?php
if (EMAIL_USE_HTML == 'true'){
	
 $languages = tep_get_languages();
 
  if ($REQUEST_METHOD=="POST")
  { 
	for ($i=0, $n=sizeof($languages); $i<$n; $i++) {
	$languages_id=$languages[$i]['id'];

$aboutus[$languages_id] = str_replace("&lt;-", "<-", $aboutus[$languages_id]);
$aboutus[$languages_id] = str_replace("-&gt;", "->", $aboutus[$languages_id]);
$aboutus[$languages_id] = preg_replace('/\r\n|\r|\n/', ' ', $aboutus[$languages_id]);

   	 mysql_query("REPLACE INTO eorder_text VALUES (2, $languages_id, '$aboutus[$languages_id]')")
     	     or die(mysql_error());
    	}
  }  
 
} else {

 $languages = tep_get_languages();
 
  if ($REQUEST_METHOD=="POST")
  { 
	for ($i=0, $n=sizeof($languages); $i<$n; $i++) {
	$languages_id=$languages[$i]['id'];

   	 mysql_query("REPLACE INTO eorder_text VALUES (1, $languages_id, '$aboutus[$languages_id]')")
     	     or die(mysql_error());
    	}
  }  
}
?>

<form name="aboutusform" method="Post" action="">

<?php
    for ($i=0, $n=sizeof($languages); $i<$n; $i++) { 
    $languages_id=$languages[$i]['id'];	
if (EMAIL_USE_HTML == 'true') {
   $sql=mysql_query("SELECT * FROM eorder_text where eorder_text_id = 2 AND language_id = '$languages_id'")
    or die(mysql_error());
}else{    
   $sql=mysql_query("SELECT * FROM eorder_text where eorder_text_id = 1 AND language_id = '$languages_id'")
    or die(mysql_error());
}    
	  $row=mysql_fetch_array($sql);
	  $text = $row["eorder_text_one"];
?>

	<table border="0" cellspacing="0" cellpadding="0">
              <tr>
                <td class="main" valign="top"><?php echo tep_image(DIR_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']); ?>&nbsp;</td>
                <td class="main">

                <?php if (EMAIL_USE_HTML == 'true'){ echo tep_draw_textarea_field('aboutus['.$languages[$i][id].']', 'soft', '200', '50', $text); }
                else{ ?><textarea name="aboutus[<?php echo $languages[$i][id]; ?>]" cols="75" rows="15"><?php echo $text; ?></textarea><?}?>               
                </td>

Habe mittlerweile die REPLACE-Funktion durch UPDATE ersetzt, da ich irgendwo gelesen habe, dass man es da lieber verwenden soll.
Hoffe, dass mir jemand helfen kann und bedanke mich schonmal im Voraus.

Gruß
Sascha
 
Hi,

tausche mal alle $REQUEST_METHOD gegen $_SERVER['REQUEST_METHOD'] aus.

Sonst kann man da nicht viel dazu sagen, da ich deine Funktionen (z.B.b tep_get_languages()) nicht kenne.
 
EDIT:
So, habe den Fehler gefunden. Ich Dödel musste natürlich noch das hier enifügen:

Code:
$aboutus = tep_db_prepare_input($HTTP_POST_VARS['aboutus']);


--------------------------
Hi,

tausche mal alle $REQUEST_METHOD gegen $_SERVER['REQUEST_METHOD'] aus.

Sonst kann man da nicht viel dazu sagen, da ich deine Funktionen (z.B.b tep_get_languages()) nicht kenne.

Danke für die Antwort.

Habe es ersetzt. Nun ist es so, dass das Datenbankfeld leer beschrieben wird, sprich ohne den Inhalt des <FORM>-Felds.

Wie schon erwähnt, habe ich nicht unbedingt Ahnung von der Materie, aber ich der ausschlaggebende Befehl, müssten ja die hier sein:

PHP:
$languages = tep_get_languages();
 
  if ($_SERVER['REQUEST_METHOD']=="POST")
  { 
	for ($i=0, $n=sizeof($languages); $i<$n; $i++) {
	$languages_id=$languages[$i]['id'];

   	 mysql_query("REPLACE INTO eorder_text VALUES (1, $languages_id, '$aboutus[$languages_id]')")
     	     or die(mysql_error());
    	}
  }

und das FORM-Feld
Hier:
HTML:
<form name="aboutusform" method="post" action="">
und hier:
HTML:
<textarea name="aboutus[<?php echo $languages[$i][id]; ?>]" cols="75" rows="15"><?php echo $text; ?></textarea>

Leider habe ich nichts vergleichbares zur Hand um vergleich zu können, wie es in einem anderen Script aussieht.

Hier ist übrigens die Funktion tep_get_language:
PHP:
function tep_get_languages() {
    $languages_query = tep_db_query("select languages_id, name, code, image, directory from " . TABLE_LANGUAGES . " order by sort_order");
    while ($languages = tep_db_fetch_array($languages_query)) {
      $languages_array[] = array('id' => $languages['languages_id'],
                                 'name' => $languages['name'],
                                 'code' => $languages['code'],
                                 'image' => $languages['image'],
                                 'directory' => $languages['directory']);
    }

    return $languages_array;
  }
 
Zuletzt bearbeitet:
Hi,

verwende statt
Code:
$HTTP_POST_VARS['aboutus']
besser
Code:
$_POST['aboutus']
bzw. $_GET["var"] bei Daten, die über die URL übergeben werden!

Es sieht sowieso danach aus, als benötige dein Script die Einstellung register_globals = on.

Alle Variablen, die du über ein Formular mit method="post" erhalten möchtest, musst du folgendermaßen abfragen, damit diese bei der Einstellung
register_globals = off
verwendet werden können:

Code:
<input type="text" name="feldname" />

Abrufen nachdem das Formular abgesendet wurde:
PHP:
$feld = $_POST["feldname"];

Erst dann kannst du die Inhalte von deinem Formular auch im Script verwenden!

Gruß
 
Zurück