Archiv verlassen und diese Seite im Standarddesign anzeigen : Artikel
jOhnny knOx 25-04-2003, 23:28 Mit folgendem Befehl möchte ich einen Artikel hinzufügen:
mysql_query("INSERT INTO $tab_art (catid, titel, artikel, time) VALUES ('$cat_id', '$titel', '$artikel', '$zeit')");
echo "\$cat_id = $cat_id";
Hierbei gebe ich zum Check noch die ID der Kategorie des Artikel an. Und hier liegt auch mein Problem, $catid aber nicht ausgegeben. Der Code vor dem lautet wie folgt:
$types = mysql_query("SELECT * FROM $tab_artcat ORDER BY name");
echo "<select name='catid'>";
while ($cat = mysql_fetch_array($types)) {
$cat_id = "$cat[id]";
echo "<option>$cat[name]</option>";
}
Realmaker 25-04-2003, 23:38 ich würd ein $types = mysql_query("SELECT * FROM $tab_artcat ORDER BY name") or die(mysql_error()); versuchen
jOhnny knOx 25-04-2003, 23:44 Keine Fehler...
Realmaker 25-04-2003, 23:46 dann würd ich das mal versuchen:$cat_id = "$cat[id]";
//wird zu:
$cat_id = $cat['id'];
jOhnny knOx 25-04-2003, 23:50 Geht leider nicht.
Realmaker 25-04-2003, 23:53 und das?:echo '<option>'.$cat['name'].'</option>';
Hast du es eingestellt das du alle Fehlermeldungen angezeigt bekommst?
mach die abfrage mal im PHP-myadmin und guck was er dir ausgibt und ob das auch alles richtig ist
jOhnny knOx 26-04-2003, 00:11 Das funktioniert auch nicht. Und Fehler gibt es auch nicht, irgendwie wird nur die Variable $cat_id nicht definiert.
Ich möchte mal den Aufbau meines Codes zeigen, vielleicht hilft das ja weiter.
elseif ($_GET['action']=='admin' and $_GET['article']=='add') {
if ($add) {
// Angabencheck
if ($titel == "") { echo "Titel fehlt."; }
elseif ($artikel == "") { echo "Artikel fehlt."; }
else {
// Wenn es keine Fehler und alle Angaben gibt:
$zeit=time();
mysql_query("INSERT INTO $tab_art (catid, titel, artikel, time) VALUES ('$cat_id', '$titel', '$artikel', '$zeit')");
echo "Artikel erstellt. \$cat_id = $cat_id"; }
} else {
// Hier ist nun die Standardanzeige:
echo "<table width='100%' border='0' cellpadding='3' cellspacing='1'>
<form action='?action=admin&article=add' method='post'>
<tr bgcolor='$tcolor2'><td>Type:</td><td>";
$types = mysql_query("SELECT * FROM $tab_artcat ORDER BY name");
echo "<select name='catid'>";
while ($cat = mysql_fetch_array($types)) {
$cat_id = "$cat[id]";
echo "<option>$cat[name]</option>";
}
echo "</select>";
echo "</td></tr>
<tr bgcolor='$tcolor3'><td>Title:</td><td><input type='titel' size='30' name='titel'></td></tr>
<tr bgcolor='$tcolor2'><td>Article:</td><td><textarea name='artikel' cols='30' rows='6'></textarea></td></tr>
<tr><td></td><td><input name='add' type='submit' value='add article'></tr></td>
</form>
</table>"; }
Realmaker 26-04-2003, 12:55 mach mal vor der while schleife testweise ein if(empty($cat['id'])) echo '$cat[\\\'id\\\'] ist leer';
er soll mir die \\'s anzeigen :mad:
jOhnny knOx 26-04-2003, 13:59 Naja vor der while Schleife ist $cat[id] ja noch leer und ich wüsste nicht was das vor der Schleife bewirken sollte. Ich bräuchte eine Möglichkeit die $cat[id] in den <select>-tag einzubinden, damit die id bezüglich den namen ausgelesen wird, starte ich aber die while schleife vor dem Select werden pro Kategorie die gefunden wird ein Select-Tag erstellt.
wo soll das catid hin? in den select tag, oder in den option-tag?
jOhnny knOx 26-04-2003, 14:37 in den select tag
Dann hast du es also anscheinend immer noch nicht begriffen... (mach mir langsam echt gedanken)
pass auf
1. tag mit var
2. definition der var
wie willst du also (wiedermal) eine variable benutzen, die erst später definiert wird?!?!?!
also machs wie du es beim letzten mal gelöst hast...
jOhnny knOx 26-04-2003, 14:46 Ja, aber es wird doch standardgemäß logischer Weise immer der Code der am Ende Steht, also:
} else {
// Hier ist nun die Standardanzeige:
echo "<table width='100%' border='0' cellpadding='3' cellspacing='1'>
<form action='?action=admin&article=add' method='post'>
<tr bgcolor='$tcolor2'><td>Type:</td><td>";
$types = mysql_query("SELECT * FROM $tab_artcat ORDER BY name");
echo "<select name='catid'>";
while ($cat = mysql_fetch_array($types)) {
$cat_id = "$cat[id]";
echo "<option>$cat[name]</option>";
}
echo "</select>";
echo "</td></tr>
<tr bgcolor='$tcolor3'><td>Title:</td><td><input type='titel' size='30' name='titel'></td></tr>
<tr bgcolor='$tcolor2'><td>Article:</td><td><textarea name='artikel' cols='30' rows='6'></textarea></td></tr>
<tr><td></td><td><input name='add' type='submit' value='add article'></tr></td>
</form>
</table>"; }
angezeigt und hier werden die Variablen ja auch definiert. Wenn man nun auf das input "add" klickt wird alles neugelesen oder wie ?
ich versteh dich nicht...
jOhnny knOx 26-04-2003, 14:55 Die beim allerersten Mal, beim Aufrufen der Seite, ja die ersten If's im Code nicht der Fall sein kann, da man noch nicht auf das Input geklickt hat, kommt doch der Code der am Schluss steht, wobei doch die Variablen definiert werden, richtig ?
Wenn man nun auf Input "add" klickt wird da die Datei neu gelesen ?
aber dann sind logischerweise auch alle Variablen (außer Post) weg. Du müsstest die also per hidden oder session übergeben.
jOhnny knOx 27-04-2003, 03:09 wie würde das denn gehen mit dem hidden input die $cat[id] zu bekommen ?
ja, du machst halt n hidden field wo die id drin steht. fertig!
jOhnny knOx 27-04-2003, 20:41 Ich hab' es so probiert:
echo "<input name='$cat_id' type='hidden' value='$cat_id'>";
Das geht aber nicht. Ich verstehe nicht wie das gehen soll eine id einem Namen der Dateneinträge zuzuweisen, weil das while kommt doch erst nach dem <select>-tag und da muss doch die ID des Namens stehen, oder ?
wie wärs mit name="cat_id"
jOhnny knOx 28-04-2003, 15:43 Frage: Wie weise ich denn einem Datensatz eine ID in dem <select>/<option>-Tag zu, wenn doch das while nach dem select kommt ?
die <option>-tags werden innerhalb der while-schleife geschrieben (alles andere macht ja auch gar keinen sinn).
und in die option-tags gehört auch die ID mit rein.
jOhnny knOx 28-04-2003, 16:10 Und wie das, wenn da nur für
<option>$cat[name]</option>
Platz ist ?
mrhappiness 28-04-2003, 16:12 dann mach statt echo "<option>$cat[name]</option>"; eben einecho '<option value="'.$cat['id'].'">'.$cat['name'].'</option>'; :mad:
da is nämlich soviel platz wie du brauchst...
jOhnny knOx 28-04-2003, 16:35 Dann versteh ich aber nicht warum da nen hidden field hinkommen soll ...
mrhappiness 28-04-2003, 16:37 vielleicht weil sich so mancher hier geringfügigst undeutlich ausdrückt? ;)
jOhnny knOx 28-04-2003, 16:39 Es sollte doch nachdem ich dem ganzen Code gepostet habe jedem klar sein, dass da einfach ein value in den option-tag reinmuss.
Original geschrieben von jOhnny knOx
Es sollte doch nachdem ich dem ganzen Code gepostet habe jedem klar sein, dass da einfach ein value in den option-tag reinmuss.
das sollte jemandem der halbwegs HTML beherrscht aber auch klar sein ohne dass er hier überhaupt nachfragen muss.
jOhnny knOx 28-04-2003, 17:50 Könnte ich den folgenden Code so umstruktutieren, dass "$cat[id]" (was am ende des Codes steht) vor dem INSERT INTO (was in der Mitte des Codes steht) definiert wird ? Denn ich möchte keine Fehler- oder Korrektheitsanzeige unterhalb des Form Tags, sondern durch den Form Tag ersetzen. Wie wäre das möglich ?
elseif ($_GET['action']=='admin' and $_GET['article']=='add') {
if ($add) {
// Angabencheck
if ($titel == "") { echo "Titel fehlt."; }
elseif ($artikel == "") { echo "Artikel fehlt."; }
else {
// Wenn es keine Fehler und alle Angaben gibt:
$zeit=time();
mysql_query("INSERT INTO $tab_art (catid, titel, artikel, time) VALUES ('$cat_id', '$titel', '$artikel', '$zeit')");
echo "Artikel erstellt. \$cat_id = $cat_id"; }
} else {
// Hier ist nun die Standardanzeige:
echo "<table width='100%' border='0' cellpadding='3' cellspacing='1'>
<form action='?action=admin&article=add' method='post'>
<tr bgcolor='$tcolor2'><td>Type:</td><td>";
$types = mysql_query("SELECT * FROM $tab_artcat ORDER BY name");
echo "<select name='catid'>";
while ($cat = mysql_fetch_array($types)) { echo "<option value='$cat[id]'>$cat[name]</option>"; }
echo "</select>";
echo "</td></tr>
<tr bgcolor='$tcolor3'><td>Title:</td><td><input type='titel' size='30' name='titel'></td></tr>
<tr bgcolor='$tcolor2'><td>Article:</td><td><textarea name='artikel' cols='30' rows='6'></textarea></td></tr>
<tr><td></td><td><input name='add' type='submit' value='add article'></tr></td>
</form>
</table>"; }
Muss echt sagen, dass ich bei deinen Problemen manschmal nicht mehr mitkomme...
also ein bisschen gedanken um die ablauflogik deines scriptes kannst du dir doch wohl mal selber machen, oder...?
jOhnny knOx 28-04-2003, 18:11 Ich weiss nicht nach welchem "Schema" ich das anstellen könnte, dass der ganze Formtag bei jedem Klick aufs Input Feld verschwinden würde, bei Fehler- oder Korrektheit ...
wie wärs mit if isset $_POST
mrhappiness 28-04-2003, 19:56 Parse error: parse error, unexpected T_ISSET, expecting '(' ...
:D
mrhappiness 28-04-2003, 20:55 tu ich nich, dein code funzt echt nich *fg*
ich wollt nicht alles vorsagen
jOhnny knOx 29-04-2003, 07:13 Gehts vielleicht genauer ?
Original geschrieben von jOhnny knOx
Gehts vielleicht genauer ?
nein, verdammt.
nimm dir das handbuch, nimm dir ein tutorial, und dann sie mal selber zu, dass du was auf die reihe bekommst.
soll ich dir die klammern auch noch geben?
()
Und damit du alles hast, geb ich dir den auch noch:
;
:D:D:D
das wars jetzt aber!!!
Langsam überlege ich echt, ob das das richtige für dich ist. IdR. machen wir Newbees hier ziemlich schnell fit...
mrhappiness 29-04-2003, 13:12 was hab ich gesagt?Original geschrieben von mrhappiness
Parse error: parse error, unexpected T_ISSET, expecting '(' ...
:D
Wie gesagt, wollte nicht alles vorweg nehmen.
aber gibs zu, du hast das selbe problem und hast es getestet... :D
mrhappiness 29-04-2003, 14:28 nicht alles vorwegnehmen is ja ok, aber mit den infos von dir kann man ja nix anfangen oder?!
etwas mehr muss da schon kommen; einfach nur 1-2 stichwörter hinschmeißen ist völlig unzureichend, da kommt doch kein normaler mensch mit klar;) (hab ich vergessen)
und: nein, ich hatte das problem nich :D
jOhnny knOx 30-04-2003, 20:54 Kann es jemand vielleicht etwas ausführlich erklären und nicht in einem kurzen Satz fassen, wo ich es sowieso nicht verstehen werde. Ich möchte ja nicht das ihr unbedingt hier alles vorcodet, sondern lediglich das Schema/Prinzip bzw. die Logik damit das funktioniert. Danke ...
schon fünf seiten, und immer noch nicht verstanden...?
wie war jetzt nochmal genau die frage?
jOhnny knOx 01-05-2003, 13:31 Original geschrieben von jOhnny knOx
Könnte ich den folgenden Code so umstruktutieren, dass "$cat[id]" (was am ende des Codes steht) vor dem INSERT INTO (was in der Mitte des Codes steht) definiert wird ? Denn ich möchte keine Fehler- oder Korrektheitsanzeige unterhalb des Form Tags, sondern durch den Form Tag ersetzen. Wie wäre das möglich ?
elseif ($_GET['action']=='admin' and $_GET['article']=='add') {
if ($add) {
// Angabencheck
if ($titel == "") { echo "Titel fehlt."; }
elseif ($artikel == "") { echo "Artikel fehlt."; }
else {
// Wenn es keine Fehler und alle Angaben gibt:
$zeit=time();
mysql_query("INSERT INTO $tab_art (catid, titel, artikel, time) VALUES ('$cat_id', '$titel', '$artikel', '$zeit')");
echo "Artikel erstellt. \$cat_id = $cat_id"; }
} else {
// Hier ist nun die Standardanzeige:
echo "<table width='100%' border='0' cellpadding='3' cellspacing='1'>
<form action='?action=admin&article=add' method='post'>
<tr bgcolor='$tcolor2'><td>Type:</td><td>";
$types = mysql_query("SELECT * FROM $tab_artcat ORDER BY name");
echo "<select name='catid'>";
while ($cat = mysql_fetch_array($types)) { echo "<option value='$cat[id]'>$cat[name]</option>"; }
echo "</select>";
echo "</td></tr>
<tr bgcolor='$tcolor3'><td>Title:</td><td><input type='titel' size='30' name='titel'></td></tr>
<tr bgcolor='$tcolor2'><td>Article:</td><td><textarea name='artikel' cols='30' rows='6'></textarea></td></tr>
<tr><td></td><td><input name='add' type='submit' value='add article'></tr></td>
</form>
</table>"; }
Das heisst im Einfachem:
Formtag am Anfang des Codes, dennoch bei Fehler- und Bestätigungsmeldung verschwinden lassen
|
-
- |