online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon boma vom 13.04.2022, 02:02 Options

Where like mit $_POST

Hallo Leute

nach mehreren Stunden probieren und googlen hier meine erster Post. Sehr wahrscheinlich nicht richtig gesucht, wenn ich nur wüsste was genau... Ich mache seit ein paar Tagen meine ersten Schrite mit php, bitte um Nachsicht.


<?php
echo "
<form method='post' action='saprunbookquery.php'>
<input name='jnquery' type='text' size='50' maxlength='50'>
<input type='submit' class='button1' value='Go!' name='button1' />
</form>
";
$jnquery=$_POST['jnquery'];
$con = mysql_connect("localhost","user","passwd");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
mysql_select_db("icc_db", $con);
$result ="SELECT * FROM saprunbook WHERE Job_Name like '%$jnquery%'";
echo "<table align='center' cellspacing='0' cellpadding='0'>
<tr>
<th>Job Name</th>
<th>Job Title</th>
<th>Contact</th>
<th>Phone</th>
<th>Schedule</th>
<th>Est</th>
<th>Frequency</th>
<th>Action</th>
</tr>";
while($row = mysql_fetch_object($result))
  {
  echo "<tr>";
  echo "<td>" . $row['Job_Name'] . "</td>";
  echo "<td>" . $row['Job_Title'] . "</td>";
  echo "<td>" . $row['Contact'] . "</td>";
  echo "<td>" . $row['Phone'] . "</td>";
  echo "<td>" . $row['Schedule'] . "</td>";
  echo "<td>" . $row['Est'] . "</td>";
  echo "<td>" . $row['Freq'] . "</td>";
  echo "<td>" . $row['Operations'] . "</td>";
  echo "</tr>";
  }
echo "</table>";
mysql_close($con);
?>
</html>


Als Resultat bekomme ich
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/saprunbookquery.php on line 30

Kann mir jemand sagen was ich falsch mache?

Vielen Dank für Eure Hilfe


Antwort schreiben

Antwort 1 von son_quatsch vom 13.04.2022, 07:53 Options

In der Doku (die du zu jeder Funktion befragen kannst) ist ein hervorragendes Beispiel (#1). Du musst deine Abfrage erstmal ausführen mittels mysql_query().

Antwort 2 von boma vom 13.04.2022, 11:16 Options

Danke, ich werde es mir gleich anschauen.

Antwort 3 von boma vom 13.04.2022, 16:33 Options

son_quatsch

danke für deinen tipp, hat das problem geschmälert...

jedoch glaube ich das hiermit Zeile 2 etwas nicht stimmt! Vorallem den Part nach like...

1 $jnquery=$_POST['jnquery'];
2 $result = mysql_query("SELECT * FROM saprunbook WHERE Job_Name like '%$jnquery%'");

$_POST ist momentan noch ein Buch mit sieben Siegel für mich. Aber defitiv das nächste Thema zum durchackern.

Danke nochmals

Antwort 4 von boma vom 13.04.2022, 17:15 Options

ok jetzt bin ich noch mehr verwirrt oder ganz nahe dran

<html>
2 <title>ICC EMEA Runbook for SAP</title>
3 <link href="styles.css" rel="stylesheet" type="text/css" />
4 <?php
5 echo "
6 <form method='post' action='saprunbookquery.php'>
7 <input name='jnquery' type='text' size='50' maxlength='50'>
8 <input type='submit' class='button1' value='Go!' name='button1' />
9 </form>
10 ";
11 $jnquery=$_POST['jnquery'];
12 $con = mysql_connect("localhost","root","utopia");
13 if (!$con)
14 {
15 die('Could not connect: ' . mysql_error());
16 }
17 mysql_select_db("icc_db", $con);
18 // $result ="SELECT * FROM saprunbook WHERE Job_Name like '%$jnquery%'";
19 $result = mysql_query("SELECT * FROM saprunbook WHERE Job_Name LIKE '$_POST[jnquery]'");
20 echo "<table align='center' cellspacing='0' cellpadding='0'>
21 <tr>
22 <th>Job Name</th>
23 <th>Job Title</th>
24 <th>Contact</th>
25 <th>Phone</th>
26 <th>Schedule</th>
27 <th>Est</th>
28 <th>Frequency</th>
29 <th>Action</th>
30 </tr>";
31 while($row = mysql_fetch_object($result))
32 {
33 echo "<tr>";
34 echo "<td>" . $row['Job_Name'] . "</td>";
35 echo "<td>" . $row['Job_Title'] . "</td>";
36 echo "<td>" . $row['Contact'] . "</td>";
37 echo "<td>" . $row['Phone'] . "</td>";
38 echo "<td>" . $row['Schedule'] . "</td>";
39 echo "<td>" . $row['Est'] . "</td>";
40 echo "<td>" . $row['Freq'] . "</td>";
41 echo "<td>" . $row['Operations'] . "</td>";
42 echo "</tr>";
43 }
44 echo "</table>";
45 mysql_close($con);
46 ?>
47 </html>


jetzt krieg ich zwar keine Fehlermeldung, aber auch keinen Output von der Abfrage... ich glaub jetzt bin ich in einer Sackgasse gelandet.

Danke für jede Hilfe.

Antwort 5 von RaHi vom 13.04.2022, 17:32 Options

Hallo boma,

Dein Code ist unsicher! Mit SQL-Injection unterlaufe ich deine fachliche Intention sofort. Ich
hoffe du bringst so was nicht ins www.

Gruß Ralf

Antwort 6 von boma vom 13.04.2022, 17:40 Options

Hallo Ralf

nein keine Angst, das bleibt im Firmen Intranet und ist eigentlich nur für unsere Abteilung bestimmt.

Dennoch wäre ich um Rat dankbar, wie man den Code sicherer machen kann.

Gruss
boma

Antwort 7 von boma vom 13.04.2022, 17:46 Options

primär wäre ich an der Lösung interessiert wie man die Abfrage zum laufen bekommt.

sekundär wäre ein sicherer Code erstrebenswert aber ich mache gerade meine ersten schritte mit php.

Antwort 8 von son_quatsch vom 15.04.2022, 08:02 Options

boma, zunächst einmal: wenn du wieder Code postest, dann benutz die [ CODE ]...[ /CODE ]-Formatierung - ansonsten werden Leerzeichen geschluckt.

Dann: verwendest du als Tabellenspalten Namen in Groß- und Kleinschreibung - sind diese wirklich exakt so definiert? Wenn du später auf $row zugreifst, dann arbeitest du mit einem Feld. Ein Feld hat Elemente. Auf diese Elemente wird per Index zugegriffen - und ein Index 'eins' ist ein anderer als Index 'EiNs'. Sind deine Tabellenspalten also gar nicht exakt so definiert, sondern z.B. als 'job_name' oder 'JOB_NAME', dann greifst du auf ein nicht vorhandenes Feldelement zu. Dementsprechend hab ich nun error_reporting( E_ALL ); - damit sollte es jeweils eine Fehlermeldung geben, wenn wir auf nicht existierende Feldelemente zugreifen wollen (und ansonsten auch Unfug machen).

Ein Beispiel zu einer Vermeidung von SQL-Injection hab ich auch implementiert.

Der Rest ist kommentiert.

<html><head>
	<title>ICC EMEA Runbook for SAP</title>
	<link href="styles.css" rel="stylesheet" type="text/css" />
</head><body>
	<form method="post" action="saprunbookquery.php">
		<input name="jnquery" type="text" size="50" maxlength="50">
		<input type="submit" class="button1" value="Go!" name="button1" />
	</form><?php

	// Zeige alles, was wir unter PHP falsch machen
	error_reporting( E_ALL );

	// Mit DBMS verbinden; bei Fehlschlag Meldung
	$con= mysql_connect( 'localhost', 'root', 'utopia' ) or die( 'Keine Verbindung: '. mysql_error() );

	// DB auswählen; bei Fehlschlag Meldung
	mysql_select_db( 'icc_db', $con ) or die( 'Konnte DB nicht wählen: '. mysql_error() );

	// Eine SQL-Injection ist z.B., wenn folgender Text übergeben werden würde:
	// '; DROP DATABASE; SELECT 1 FROM DUAL WHERE ''= '
	// Würden wir das einfach an unsere SQL-Abfrage anhängen, würden drei syntaktisch korrekte
	// Komanndos ausgeführt werden, wovon eins tödlich wäre. Deshalb ersetzen wir in der
	// Übergabe alle ' mit einem '', was unter MySQL dann kein Textbegrenzer, sondern ein
	// Hochkomma im Text selbst darstellt.
	$where= str_replace( '\'', '\'\'', $_POST['jnquery'] );

	// Wurde überhaupt etwas übergeben? Dann komplett zur WHERE-Bedingung ausbauen...
	if( strlen( $where )> 0 ) $where= ' WHERE Job_Name LIKE \''. $where. '\'';

	// ...ansonsten würden wir den kompletten Tabelleninhalt ausgeben
	$sql= 'SELECT * FROM saprunbook'. $where;

	// Abfrage ausführen; bei Fehlschlag Meldung samt SQL-Kommando
	$result= mysql_query( $sql ) or die( 'Abfragefehler für >>'. $sql. '<<: '. mysql_error() );

	// Tabellenkopf ausgeben
	echo '
	<table align="center" cellspacing="0" cellpadding="0"><tr>
		<th>Job Name</th>
		<th>Job Title</th>
		<th>Contact</th>
		<th>Phone</th>
		<th>Schedule</th>
		<th>Est</th>
		<th>Frequency</th>
		<th>Action</th>
	</tr>';

	// Jeden Datensatz als Tabellenzeile ausgeben.
	// VORSICHT! Bei den Spaltennamen wird zwischen Groß- und Kleinschreibung
	// unterschieden - existieren diese also nicht wirklich exakt in dieser Schreibweise
	// in der Tabelle, so werden wir im folgenden immer auf leere Feldelemente zugreifen!
	while( $row= mysql_fetch_object( $result ) ) echo '<tr>
		<td>'. $row['Job_Name']. '</td>
		<td>'. $row['Job_Title']. '</td>
		<td>'. $row['Contact']. '</td>
		<td>'. $row['Phone']. '</td>
		<td>'. $row['Schedule']. '</td>
		<td>'. $row['Est']. '</td>
		<td>'. $row['Freq']. '</td>
		<td>'. $row['Operations']. '</td>
	</tr>';

	// Tabelle schließen
	echo "</table>";

	// Abfrageergebnis freigeben
	mysql_free_result( $result );

	// DBMS-Verbindung freigeben
	mysql_close( $con );

?></body></html>

Antwort 9 von boma vom 16.04.2022, 00:57 Options

Hallo son quatsch :o)

vielen Dank für die Zeit die Du aufgewendet hast für die Aufschlüsselung / Kommentierung dieses Codes. Ich werde wohl noch ein bisschen studieren müssen, den irgendwie scheint es noch nicht ganz so zu funktionieren. Die Schreibweise der Spalten entspricht denen vom Code...

Eine Frage am Rande, was für ein Buch kannst Du mir empfehlen? Kann auch in English sein.

Grüsse

Antwort 10 von son_quatsch vom 16.04.2022, 07:12 Options

Zitat:
vielen Dank für die Zeit die Du aufgewendet hast
Es ist eins der ersten und häufigsten Problemszenarien aller PHP-Anfänger - daher war es nicht weiter schwierig :-)

Zitat:
irgendwie scheint es noch nicht ganz so zu funktionieren
Jedes "irgendwie" in einer Beschreibung fehl am Platze - was genau funktioniert nicht? Wenn es keine Fehlermeldung gibt, dann klappt technisch alles. Wenn du keine Daten bekommst, dann überprüf das erstellte SQL. Werden PHP-Warnungen ausgegeben? Also: wie weit funktioniert es und ab wo kannst du woran erkennen, dass es nicht deinen Erwartungen entspricht?

Zitat:
Eine Frage am Rande, was für ein Buch kannst Du mir empfehlen? Kann auch in English sein.
Hab nie Bücher fürs Programmieren verwendet. http://www.php.net ist nicht nur die offizielle Seite, sondern hat auch eine sehr gute Dokumentation zu jeder Funktion und jedem sonstigen Bereich der Sprache. Und viele Leute haben dann zusätzliche Beispiele dort veröffentlicht, sodass man auf viele Anwendungsmöglichkeiten hingewiesen wird. Die Doku gibt es sogar mehrsprachig - mein Link neulich war die Doku auf Deutsch. Die ganze Doku gibt's auch als Download zum offline betrachten.

Ähnliche Themen

Powershell ausgabe in Datei
hardy114  02.10.2008 - 649 Hits - 8 Antworten

Fehler-Code -12263
Charmin  05.10.2008 - 14 Hits - 2 Antworten

Login
Dani93  06.10.2008 - 14 Hits - 4 Antworten

POST Daten an eine Seite übertragen
TByte  02.01.2010 - 614 Hits - 6 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026