Update und INSERT INTO

Shark Master

Grünschnabel
Hallo zusammen,
ich brauch (wieder mal) mal eure Hilfe.
Ich möchte mit einem <form> zwei INSERT INTO ausführen.
Das heißt ein input=text soll es in tabelleA spalteb speichern und das andere in tabelleB spalteA.
Hab es schon so versucht
Code:
$eintrag = "INSERT INTO tabelleA
(spalteb )
VALUES
('$spalteb ');
INSERT INTO tabelleB
(spalteA)
VALUES
('$spalteA')";
und so
Code:
$eintrag = "INSERT INTO tabelleA AND tabelleB
(spalteb , spalteA)
VALUES
('$spalteb ', '$spalteA')";
Aber leider half da nix

Beim anderen möchte ich mit einem <form> ein INSERT INTO machen und ein UPDATE.
Hab es schon so geschrieben.
Code:
if( isset($_POST['newName']) )
{
$add_preis = $_POST['add_preis'];
$id= $_POST['add_id'];
$strSQL = "UPDATE karte SET db_sell_preis='$add_preis' WHERE id='$id'";
$rs= mysql_query($strSQL) OR die("Error: Zeile ".__LINE__." </ br>".mysql_error());

echo "<meta http-equiv='refrsh' content='0;url=index.php'>";
}

if(empty($_GET['id']) || !is_numeric($_GET['id']))
die("Ungültige Anfrage");

if( isset($_GET['id']) )
{
$id = $_GET['id'];
$rs= mysql_query("SELECT * FROM karte WHERE id='$id'") OR die("Error: Zeile ".__LINE__." </ br>".mysql_error());
$row= mysql_fetch_array($rs);
} else { echo "kein GET id"; }
Aber da komme ich nur rein wenn ich die GET habe und es ändert auch nichts.

Ich hoffe ihr könnt mir bei meinem Problem helfen und es richtig stellen was da falsch ist.
 
Hi

Eine ganze Reihe von allgemeinen Problemen, die mir auffallen:

a) Die SQL-Anweisungen bzw. Strings in PHP generell einfach so über mehrere Zeilen schreiben hat vermutlich nicht den gewünschten Effekt. Entweder alles in eine Zeile quetschen oder die "Heredoc"-Schreibweise verwenden, siehe http://php.net/manual/de/language.types.string.php.

Außerdem ist es bei normalen EInstellungen nicht möglich, mehrere SQL-Anweisungen im selben String bzw. selben Aufruf der query-Funktion abzusetzen (wie du im ersten Codeteil willst; der nächste Versuch ist sowieso falsch). Trenn die zwei Anweisungen vom Code 1 und schick beide separat mit der Queryfunktion ab.

b) mysql_query und alle mysql_irgendwas - Funktionen sind böse.
Ehrlich. So hoffnungslos veraltet, dass man schon wegen der Verwendung davon Fehlermeldungen bekommt, wenn man die Meldungsanzeige von PHP einschaltet (es funktioniert zwar prinzipiell noch, aber... es gibt auch potentielle Sicherheitsprobleme und und und.). Seit 11 Jahren gibts was besseres: Mysqli (oder auch PDO). Bitte jetzt umsteigen.

Und falls du dir (wie viele Leute, leider) denkst "wenns es geht verwend ichs, weil ich nichts neues lernen will, und sicherheitsmäßig wird schon nichts passieren": Die genannten Fehlermeldungen warnen davor, dass die Funktionen bald komplett entfernt werden. Wenn man Code will, der dauerhaft funktioniert, nicht verwenden.

c) Variablen wie $spalteb direkt in die SQL-Anweisung einzufügen ist eines der bekanntesten, aber trotzdem häufigsten (Sicherheits)Probleme in PHP. Erstens wird die SQL-Anweisung nicht wie erwartet funktionieren, wenn bestimmte Zeichen wie ' oder " und so im Variablenwert drin sind. Zweitens, wenn du verhindern willst, dass dir jemand mit einer einzigen gezielt falschen Eingabe die ganze DB-Tabelle leert, deinen Adminaccount übernimmt oder Ähnliches, verwende Prepared Statements ("mysqli prepared statements" liefert viele Beispiele in Google).

d) Hast du dir einmal testweise ausgeben lassen, ob zB. in $spalteb direkt vor der SQL-Anweisung auch der erwartete Wert vom Formular drinsteht? (isset wollte ich hier auch erwähnen, aber das kennst du ja offensichtlich schon)

e) Mysql-Fehler gibst du zwar aus, aber evt. PHP-Fehler nicht? (Sonst hätten dich die Meldugnen wegen den alten Funktionen vermutlich schon gestört). Versuch für die Dauer der Entwicklung einmal das am Scriptanfang:
PHP:
error_reporting(E_ALL);
ini_set('display_errors', true);


...
Jedenfalls, zum Problem von Code 1 und 2, falls es nach den obigen Sachen noch immer nicht funktioniert:
Bitte mehr PHP-Code und auch das HTML-Formular herzeigen
Es müssten dann außerdem Fehlermeldungen sichtbar sein. Welche?
Wird etwas Falsches oder gar nichts in die DB eingetragen?

Kein codemäßiger Fehler, aber beim $spalteb im ersten Codeteil ist danach
ein Leerzeichen zu viel, das würde auch immer in die DB eingefügt werden.


Für Code 3 gelten die selben allgemeinen Sachen und ggf. Fragen von oben, außerdem sollte refrsh refresh heißen.
 
Zuletzt bearbeitet:
Also das ist teil 1
PHP:
<?php
include('funktion/config.php');
include('funktion/date.php');

if(isset($_POST['add'])){
$db_name_de = $_POST["add_name_de"];
$db_name_en = $_POST["add_name_en"];
$rarity = $_POST["add_rarity"];
$quality = $_POST["add_quality"];
$edition = $_POST["add_edition"];
$setnumber = $_POST["add_setnumber"];
$sprache = $_POST["add_sprache"];
$db_auflage = $_POST["add_firstedition"];
$db_cardnumber = $_POST["add_cardnumber"];
$eingefugt = time();


//Hier mal die eingegebenen Daten noch prüfen.
//mit htmlspecialchars und dem Skript für Umlaute

$eintrag = "INSERT INTO karte_name
(db_name_de, db_name_en)
VALUES
('$db_name_de', '$db_name_en');
INSERT INTO karte
(setnumber, sprache, db_auflage, db_cardnumber, eingefugt)
VALUES
('$setnumber', '$sprache', '$db_auflage', '$db_cardnumber', '$eingefugt')";

$eintragen = mysql_query($eintrag);
}
?>
<html>
<head>
<title>Karte hinzuf&uuml;gen</title>
</head>
<table border="1" cellspacing="0" cellpadding="0" align="center" width="100%">
<?php
include('funktion/header.php');
include('funktion/menu.php');
?>
<a href="index.php">Startseite</a>&nbsp;&rArr;&nbsp;Karte hinzuf&uuml;gen
</td>
</tr>
<tr>
<td>
<body>
<form id="Sprache" name="Sprache" method="POST" action="test2.php" enctype="multipart/form-data">
<table border="1" align="center">
<tr>
<td width="200">Name der Karte (deutsch):</td>
<td><input type="text" name="add_name_de" size="43"></td>
</tr>
<tr>
<td>Name der Karte (englisch):</td>
<td><input type="text" name="add_name_en" size="43"></td>
</tr>
<tr>
<td>Seltenheit:</td>
<td><?php
$query = "SELECT * FROM rarity ORDER BY name";
$resultat = mysql_query($query)
or die ("Konnte Abfrage nicht ausführen.");
?>
<select name="add_rarity">
<?php
while($zeile = mysql_fetch_assoc($resultat))
{
extract($zeile);
echo "<option name='add_rarity' value='$short'>$name</option>\n";
}
?></select>
</td>
</tr>
<tr>
<td>Qualit&auml;t:</td>
<td><?php
$query = "SELECT * FROM quality ORDER BY id";
$resultat = mysql_query($query)
or die ("Konnte Abfrage nicht ausführen.");

while($zeile = mysql_fetch_assoc($resultat))
{
extract($zeile);
echo "<input type='radio' value='$id' name='add_quality'> <img src='img/site/quali/$name_secu.png' alt=''>&nbsp;$name_prim / $name_secu<br>";
}
?>
</td>
</tr>
<tr>
<td>Edition:</td>
<td><?php
$query = "SELECT * FROM edition ORDER BY short";
$resultat = mysql_query($query)
or die ("Konnte Abfrage nicht ausführen.");
?>
<select name="add_edition">
<?php
while($zeile = mysql_fetch_assoc($resultat))
{
extract($zeile);
echo "<option name='add_edition' value='$short'>$short - $name</option>\n";
}
?></select>
</td>
</tr>
<tr>
<td>Sprache:</td>
<td><?php
$query = "SELECT * FROM sprache ORDER BY land";
$resultat = mysql_query($query)
or die ("Konnte Abfrage nicht ausführen.");

while($zeile = mysql_fetch_assoc($resultat))
{
extract($zeile);
echo "<input type='radio' value='$short' name='add_sprache'> <img src='img/site/flags/$land.png' alt=''>&nbsp;$land ($short)<br>";
}
?>
</td>
</tr>
<tr>
<td>Seriennummer:</td>
<td><input type="text" name="add_setnumber" size="43"></td>
</tr>
<tr>
<td>Auflage:</td>
<td><?php
$query = "SELECT * FROM auflage ORDER BY id";
$resultat = mysql_query($query)
or die ("Konnte Abfrage nicht ausführen.");

while($zeile = mysql_fetch_assoc($resultat))
{
extract($zeile);
echo "<input type='radio' value='$db_name_de' name='add_firstedition'>$db_name_de<br>";
}
?>
</td>
</tr>
<tr>
<td>Kartennummer:</td>
<td><input type="text" name="add_cardnumber" size="43"></td>
</tr>
<tr>
<td>Kartenbild:</td>
<td><input type="file" name="cardpic" id="cardpic" /></td>
</tr>
<tr>
<td colspan="7" align="center"><input type="submit" name="add" id="button" value="eintragen" /></td>
</tr>
<?php
if(isset($_POST['add'])){
if($eintragen == true) {
echo "<tr><td colspan='7' align='center'><font color='#green'>Die Karte wurde eingetragen</font></td></tr>";
} else {
echo "<tr><td colspan='7' align='center'><font color='#red'>Fehler im System. Konnte nicht abgespeichert werden</font></td></tr>";
}
}
?>
</table>
</body>
</td>
</tr>
<?php
include('funktion/footer.php');
?>
</table>
</html>

Das ist teil 2
PHP:
<?php
include('funktion/config.php');
include('funktion/date.php');
include('funktion/img_hover.php');

//Bearbeitungsscript
if( isset($_POST['newName']) )
{
$add_preis = $_POST['add_preis'];
$id= $_POST['add_id'];
$strSQL = "UPDATE karte SET db_sell_preis='$add_preis' WHERE id='$id'";
$rs= mysql_query($strSQL) OR die("Error: Zeile ".__LINE__." </ br>".mysql_error());

echo "<meta http-equiv='refrsh' content='0;url=index.php'>";
}

if(empty($_GET['id']) || !is_numeric($_GET['id']))
die("Ungültige Anfrage");

if( isset($_GET['id']) )
{
$id = $_GET['id'];
$rs= mysql_query("SELECT * FROM karte WHERE id='$id'") OR die("Error: Zeile ".__LINE__." </ br>".mysql_error());
$row= mysql_fetch_array($rs);
} else { echo "kein GET id"; }

?>
<html>
<head>
<title>Angebotsliste</title>
</head>
<table border="1" cellspacing="0" cellpadding="0" align="center" width="100%">
<?php
include('funktion/header.php');
include('funktion/menu.php');
?>
<a href="index.php">Startseite</a>&nbsp;&rArr;&nbsp;<a href="index.php">Angebotsliste</a>
</td>
</tr>
<tr>
<td>
<body>
<form id="Sprache" name="Sprache" method="GET" action="test.php">
<table width="95%" border="1" align="center">
<tr align="center">
<td width="5%"><b>Images</b></td>
<td width="7%"><b>Edition</b></td>
<td><b>Name</b></td>
<td width="6%"><b>verkauft am</b></td>
<td width="7%"><b>verschickt am</b></td>
<td width="6%"><b>bezahlt</b></td>
<td width="6%"><b>K&auml;ufer</b></td>
<td><b>Aktionen</b></td>
</tr>
<?php
$strSQL = "
SELECT
    karte.id,
    edition,
    sprache,
    setnumber,
    nameid,
    db_name_de,
    db_name_en,
    db_sell_eingefugt,
    db_sell_versand,
    db_sell_preis
FROM
    karte
JOIN
    karte_name
ON
    karte.nameid = karte_name.ID
WHERE
    db_sell = '1'
ORDER BY
    nameid";
$rs = mysql_query($strSQL);
while($row = mysql_fetch_array($rs)) {
$strBuy  ="Verkauf";
$linBuy  = "<a href = 'test.php?id=" . $row['nameid'] ."&cardid=".$row['id']."&db_sell=1&name=add_sell'>" . $strBuy . "</a>";
?>
</tr>
<tr align="center">
<input type="hidden" name="cardid" id="cardid" value="<?php echo $row['id']; ?>" />
<?php
echo "<td><img class='image' src='img/karte/" . $row['id'] . ".png' width='30' height='45' alt='Leider Kein Bild'/></td>";
echo "<td>" . $row['edition'] . "-" . $row['sprache'] . "" . $row['setnumber'] . "</td>";
echo "<td>" . $row['db_name_de'] . "</td>";
echo "<td>" . $row['db_sell_eingefugt'] . "</td>";
echo "<td>" . $row['db_sell_versand'] . "</td>";
echo "<td><input type='text' name='add_preis' value='$row[9]'></td>";
echo "<td></td>";
echo "<td><input type='submit' name='add' id='button' value='eintragen' />&nbsp;</td>";
}
?>
</tr>
</table>
</form>
</body>
</td>
</tr>
<?php
include('funktion/footer.php');
?>
</table>
</html>
 

Neue Beiträge

Zurück