Newseintrag schreiben



  • Hi,

    ich wollte ein Formalur machen, mit dem man einen Newseintrag schreiben kann der dann in eine Datenbank hinzugefügt wird:

    if (!isset($_POST['submit']))
    {
    ?>
    
    <form name="newsadd"  action="adindex.php?adnavid=adnewsadd" method=POST>
    <table border="0">
    	<tr>
    		<td>&Uuml;berschrift:</td>
    		<td><input type="text" name="head"></td>
    	</tr>
    	<tr>
    		<td>Datum:</td>
    		<td><input type="text" name="date"></td>
    	</tr>
    	<tr>
    		<td>Text:</td>
    		<td>
    			<textarea name="text" rows="3" cols="30"></textarea>
    		</td>
    	</tr>
    	<tr>
    		<td colspan="2"><center>
    			<input type="submit" name="submit" value="Newseintrag hinzuf&uuml;gen">
    		</center></td>
    	</tr>
    </table>
    
    <?php
    }
    else
    {
    
    mysql_select_db('montblanc', $db);
    $sql = "INSERT INTO `goba_news` (`news_id`, `news_text`, `news_date`, `news_by`, `news_head`)
     VALUES (\'\', \'". $_POST['text']."\', \'". $_POST['date']."\', \'". $_SESSION['acc_name']."\', \'". $_POST['head']."\')";
    $bla = mysql_query($sql);
    
    echo ("Newseintrag hinzugef&uuml;gt!");
    ?>
    <br><br>
    <a href="index.php?navid=news">Ansehen</a>
    
    <?php
    }
    

    Da steht dann zwar nachdem ich auf den Button geklickt hab "newseintrag hunzugefügt" aber in der Datenbank is dan nichts.
    Was hab ich falsch gemacht?

    mfg
    Jakel

    /Edit: P.S: mysql_connect() hab ich nicht vergessen, dass findet schon in adindex.php statt, darin wird diese Seite included.



  • http://at2.php.net/mysql_error

    edit: Die ganzen Backticks hast Du da absichtlich hingepackt?



  • äh, ... SQL Injection ⚠



  • $sql = "INSERT INTO `goba_news` (`news_text`, `news_date`, `news_by`, `news_head`)
     VALUES ('".addslashes($_POST['text'])."', '".addslashes($_POST['date'])."', '".addslashes($_SESSION['acc_name'])."', '".addslashes($_POST['head'])."')";
    $bla = mysql_query($sql);
    

    Wenn $_SESSION['acc_name'] eine Zahl ist anstelle addslashes(), intval() nehmen.

    Die news_id dürfte normal vom SQL-Afruf selbst erstellt werden, das Feld sollte auf "autonincrement" stehen.



  • Also die ganzen Backsticks und so kommen daher, dass ich bei PHPMyAdmin einfach einen Eintrag hinzugefügt hab, mir den dafür angezeigten Code in meinen Kopiert und die jeweiligen Werte für die Variablen ersetzt.



  • Lass die Backticks lieber weg ... Die sind wartungs (und besonders migrations)-technisch eine Katastrophe, und zudem bei sinnvollen Tabellennamen überflüssig 😉



  • Ich weiß, dass das nur mit sehr viel Phantasie Ontopic ist, aber kanntet Ihr das hier schon? 🙂
    http://xkcd.org/327/



  • der ist absolut ontopic 🙂

    best of 🙂



  • Wo wir grad schon beim Thema sind, wie kann ich so was verhindern?^^

    http://www.c-plusplus.net/forum/viewtopic-var-p-is-1411085.html#1411085

    (Neuer Thread weil sonst ein Mod kommt und mir die Faustregel predigt ;))



  • Der neue Code:

    if (!isset($_POST['submit']))
    {
    ?>
    
    <form name="newsadd"  action="adindex.php?adnavid=adnewsadd" method=POST>
    <table border="0">
    	<tr>
    		<td>&Uuml;berschrift:</td>
    		<td><input type="text" name="head"></td>
    	</tr>
    	<tr>
    		<td>Datum:</td>
    		<td><input type="text" name="date"></td>
    	</tr>
    	<tr>
    		<td>Text:</td>
    		<td>
    			<textarea name="text" rows="3" cols="30"></textarea>
    		</td>
    	</tr>
    	<tr>
    		<td colspan="2"><center>
    			<input type="submit" name="submit" value="Newseintrag hinzuf&uuml;gen">
    		</center></td>
    	</tr>
    </table>
    
    <?php
    }
    else
    {
    
    $sql = "INSERT INTO `goba_news` (`news_text`, `news_date`, `news_by`, `news_head`)
     VALUES ('".addslashes($_POST['text'])."', '".addslashes($_POST['date'])."', '".addslashes($_SESSION['acc_name'])."', '".addslashes($_POST['head'])."')";
    $bla = mysql_query($sql);
    
    echo ("Newseintrag hinzugef&uuml;gt! oder auch nicht...");
    ?>
    <br><br>
    <a href="index.php?navid=news">Ansehen</a>
    
    <?php
    }
    

    Funktioniert immer noch nicht...



  • Nimm die ganzen Backticks mal weg und lass Dir den SQL-Error anzeigen (siehe oben).



  • Und auch wenn es mit dem nicht-funktionieren nichts zu tun hat, würde im im Zusammenhang mit MySQL eher mysql_real_escape_string() an Stelle von addslashes() verwenden.

    Gruß Jens



  • $sql = "INSERT INTO `goba_news` (`news_text`, `news_date`, `news_by`, `news_head`)
     VALUES ('".addslashes($_POST['text'])."', '".addslashes($_POST['date'])."', '".addslashes($_SESSION['acc_name'])."', '".addslashes($_POST['head'])."')";
    $bla = mysql_query($sql);
    

    Seit ihr alle Tippfaul? Bei sowas muesste der Php-Interpreter die Festplatte formatieren, die Grafikkarte und die CPU verbrennen lassen. Kurz den gesammten PC einschmelzen auf das du nie mehr Schaden anrichten kannst.

    $text = mysql_real_escape_string($_POST['text']);
    $date = mysql_real_escape_string($_POST['date']);
    // usw.
    $sql = "insert into goba_news (news_text, news_data, ....) values ('$text', '$date', ...)";
    $bla = mysql_query($sql);
    

    Wenn $_SESSION['acc_name'] eine Zahl ist anstelle addslashes(), intval() nehmen.

    Ich nehme dafuer sprintf(), vielleicht ein wenig overkill, aber egal:

    $sql = sprintf("
    insert table_name set a='%s', b=%d, c=%u;",
    $ein_str, $ein_int, $noch_ein_int);
    

Anmelden zum Antworten