str_replace und ein Backslash

Z

Zirp

Hi

ich komme einfach nicht weiter.


PHP:
$eintragausgabe = str_replace("database/", "../database/", $eintragausgabe);

egal was ich mache ich komme nicht weiter.

database/ soll zu ../database/ werden

Rauskommen tut immer %5C%22database/1.gif%5C%22

%5C%22 = \"

Hat jemand einen Tip ?

mfg
 
Anscheinend verwendest du irgendwo [phpf]urlencode[/phpf] auf die Variable?

Denn ansonsten ist dieses Verhalten ziemlich rätselhaft.

Gegenwirken kannst du mit [phpf]urldecode[/phpf], allerdings vermute ich eher ersteres.
 
Enthält die $eintragausgabe-Variable diesen Wert oder passiert dies erst bei der Ausgabe? Ich tippe auf letzteres.
 
Anscheinend verwendest du irgendwo [phpf]urlencode[/phpf] auf die Variable?

Denn ansonsten ist dieses Verhalten ziemlich rätselhaft.

Gegenwirken kannst du mit [phpf]urldecode[/phpf], allerdings vermute ich eher ersteres.

Eigentlich nicht aber die Funktion klingt ganz interessant vielleicht funktioniert es ja damit

Gumbo sofern ich dich richtig verstehe tipst du richtig.

Die eigentlich Variable heißt $eintrag welche ein der Mysql DB geändert wird. $eintragausgabe ist eine Kopie davon die zur erneuten Ausgabe im Admin Menu dient, dabei werden leider die Smylie Bilder nicht angezeigt deshalb der Versuch mit str_replace
 
Dann lass dir den Variablenwert einzeln ausgeben und zeig mal wie der Variablenwert in dem oben genannten Kontext ausgegeben wird.
 
Dann lass dir den Variablenwert einzeln ausgeben und zeig mal wie der Variablenwert in dem oben genannten Kontext ausgegeben wird.

seltsam warum ich es nicht gleich so gemacht... aber danke für den tip

str_replace funktioniert tadellos und %5C%22 schleicht sich vorher irgendwo ein ...

ich habe bloß keine ahnung wo ...

in der db steht es folgender maßen

Code:
<img src="database/1.gif"> <img src="database/2.gif"> <img src="database/4.gif"> asd

PHP:
<?php
session_start();
if(!session_is_registered('user') || $_SESSION['user'] == "") {
header("location:index.php");
die;
}
require("../connect.inc.php");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>editieren.php</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="style.css" rel="stylesheet" type="text/css">
</head>

<body bgcolor="#666666">
<?php 
error_reporting(E_ALL);
$anfrage = mysql_query("SELECT id, name, eintrag, www, email, icq FROM gbook WHERE id = '".$_GET['id']."'")or die("Eintrag nicht gefunden"); 

while ($ergebnis = mysql_fetch_array($anfrage)) { 

echo '
<form method="post">

<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr> 
    <td width="20%"><font class="text1">ID:</font></td>
    <td width="80%"><font class="text1">'.$_GET['id'].'</font></td>
  </tr>
  <tr> 
    <td><font class="text1">Name:</font></td>
    <td><font class="text1"><input type="text" name="name" value="'.$ergebnis[1].'"></font></td>
  </tr>
  <tr> 
    <td><font class="text1">Eintrag: </font></td>
    <td><font class="text1"><textarea name="eintrag" cols="40" rows="5">'.$ergebnis[2].'</textarea> </font></td>
  </tr>
  <tr> 
    <td><font class="text1">Homepage:</td>
    <td><font class="text1"><input type="text" name="www" value="'.$ergebnis[3].'"></font></td>
  </tr>
  <tr> 
    <td><font class="text1">E-Mail:</td>
    <td><font class="text1"><input type="text" name="email" value="'.$ergebnis[4].'"></font></td>
  </tr>
  <tr> 
    <td><font class="text1">ICQ:</td>
    <td><font class="text1"><input type="text" name="icq" value="'.$ergebnis[5].'"></font></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><br><font class="text1"><input type="submit" value="Editieren"></font>
    </td>
  </tr>
</table>
</font>
</form>
';

}; 

if($_POST){

$id = $_GET['id'];
$name = $_POST['name'];
$eintrag = $_POST['eintrag'];
$www = $_POST['www'];
$email = $_POST['email'];
$icq = $_POST['icq'];

$eintragausgabe = $eintrag;

$eintragausgabe = str_replace("database/", "../database/", $eintragausgabe);

echo '<font class="text1">'.$id.'<br>'.$name.'<br>'.$eintragausgabe.'<br>'.$www.'<br>'.$email.'<br>'.$icq.'<br></font>';

mysql_query("UPDATE gbook SET name = '$name', eintrag = '$eintrag', www = '$www', email = '$email', icq = '$icq' WHERE id = '".$_GET['id']."'");

if(mysql_affected_rows() == 1) echo '<font class="text1">Daten wurden erfolgreich in der Datenbank upgedatet!</font>';
else echo '<font class="text1">Bitte versuchen sie es nochmal.</font>';
}


?>
</body>
</html>
 
Zuletzt bearbeitet von einem Moderator:
Deaktiviere mal die Magic Quotes global und probier Folgendes:
PHP:
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) { 

	if( !isset($_GET['id'], $_POST['name'], $_POST['eintrag'], $_POST['www'], $_POST['email'], $_POST['icq']) ) {
		// Parameter fehlen
	} else {
		$id = (int)$_GET['id'];
		$name = $_POST['name'];
		$eintrag = $_POST['eintrag'];
		$www = $_POST['www'];
		$email = $_POST['email'];
		$icq = $_POST['icq'];

		echo '<font class="text1">'.$id.'<br>'.htmlspecialchars($name).'<br>'.htmlspecialchars(str_replace("database/", "../database/", $eintrag)).'<br>'. htmlspecialchars($www).'<br>'.htmlspecialchars($email).'<br>'.htmlspecialchars($icq).'<br></font>';

		mysql_query("UPDATE gbook SET name = '".mysql_real_escape_string($name)."', eintrag = '".mysql_real_escape_string($eintrag)."', www = '".mysql_real_escape_string($www)."', email = '".mysql_real_escape_string($email)."', icq = '".mysql_real_escape_string($icq)."' WHERE id = ".$id);

		if( mysql_affected_rows() == 1 ) {
			echo '<font class="text1">Daten wurden erfolgreich in der Datenbank upgedatet!</font>';
		} else {
			echo '<font class="text1">Bitte versuchen sie es nochmal.</font>';
		}
	}
}
 
Deaktiviere mal die Magic Quotes global

An den Magic Quotes lag es :) Mit allen 3 Optionen ausgeschaltet funktioniert auch meine Version.

Zu deiner Version habe ich noch 2 Fragen:

PHP:
$_SERVER['REQUEST_METHOD'] == 'POST'
welche Vorteile bietet diese Methode gegenüber $_POST

mysql_real_escape_string bietet ja bekannter Maßen schutzt vor SQL Injection. Ist dies dennoch nötig obwohl die Seite per Session geschützt ist oder gilt die Divise doppelt ist sicherer. ?

Noch zum Schluss: Danke für eure Hilfe ganz besonders dir Gumbo

mfg

zirp

PS: Sehr eleganter Code Gumbo :)
 
$eintragausgabe = str_replace('database/', '../database/', $eintragausgabe);


so hätte es vielleicht auch funktioniert,
Hochkommata sind bei sowas eigentlich immer besser.

$_POST + $_GET = $_REQUEST

 
Zurück